diff --git a/.github/workflows/deployNewCore.yml b/.github/workflows/deployNewCore.yml new file mode 100644 index 00000000..28cc59e1 --- /dev/null +++ b/.github/workflows/deployNewCore.yml @@ -0,0 +1,73 @@ +name: Build & upload the debug package +# Trigger on every tag creation +on: + push: + branches: + - 'new_core' +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + build: + runs-on: macos-latest + permissions: + contents: write + packages: write + steps: + - uses: actions/checkout@v3 + - name: set up JDK 17 + uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: 17 + - name: Cache Gradle + uses: actions/cache@v3 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + restore-keys: | + ${{ runner.os }}-gradle- + - name: Cache Konan + uses: actions/cache@v3 + with: + path: | + ~/.konan/caches + ~/.konan/dependencies + ~/.konan/kotlin-native-prebuilt-macos-* + key: ${{ runner.os }}-konan-${{ hashFiles('**/Dependencies.kt') }} + restore-keys: | + ${{ runner.os }}-konan- + + - name: Update local properties + env: + PUBLISH_REPO_USER: ${{ secrets.PUBLISH_REPO_USER }} + PUBLISH_REPO_TOKEN: ${{ secrets.PUBLISH_REPO_TOKEN }} + PUBLISH_CORE_VERSION: 0.2.${{ github.run_number }}-alpha + run: echo PUBLISH_REPO_USER=$PUBLISH_REPO_USER$'\n' + PUBLISH_CORE_VERSION=$PUBLISH_CORE_VERSION$'\n' + PUBLISH_REPO_TOKEN=$PUBLISH_REPO_TOKEN > ./local.properties + + - name: Print local.properties content + run: cat ./local.properties + + - name: Update versions properties + env: + PUBLISH_CORE_VERSION: 0.2.${{ github.run_number }}-alpha + run: echo PUBLISH_CORE_VERSION=$PUBLISH_CORE_VERSION> ./versions.properties + + - name: Print versions.properties content + run: cat ./versions.properties + + - name: Update version catalog + run: ./gradlew updateVersionCatalog + + - name: Commit updated version catalog + run: | + git config user.name "GitHub Actions Bot" + git config user.email "actions@github.com" + git add gradle/libs.versions.toml + git commit -m "Update metacto-core version to 0.2.${{ github.run_number }}-alpha" + git push + + - name: Publish to GitHub Packages + run: ./gradlew publishAllPublicationsToGithubRepository diff --git a/.github/workflows/deployRelease.yml b/.github/workflows/deployRelease.yml index b00ef464..6f2c350c 100644 --- a/.github/workflows/deployRelease.yml +++ b/.github/workflows/deployRelease.yml @@ -38,13 +38,13 @@ jobs: env: PUBLISH_REPO_USER: ${{ secrets.PUBLISH_REPO_USER }} PUBLISH_REPO_TOKEN: ${{ secrets.PUBLISH_REPO_TOKEN }} - PUBLISH_VERSION: 3.0.${{ github.run_number }} + PUBLISH_CORE_VERSION: 3.0.${{ github.run_number }} run: echo PUBLISH_REPO_USER=$PUBLISH_REPO_USER$'\n' - PUBLISH_VERSION=$PUBLISH_VERSION$'\n' + PUBLISH_CORE_VERSION=$PUBLISH_CORE_VERSION$'\n' PUBLISH_REPO_TOKEN=$PUBLISH_REPO_TOKEN > ./local.properties - name: Print local.properties content run: cat ./local.properties - name: Publish to GitHub Packages - run: ./gradlew :coreApp:publishAllPublicationsToGithubRepository + run: ./gradlew :CmpCore:publishAllPublicationsToGithubRepository diff --git a/.gitignore b/.gitignore index 98d02245..f1db1b31 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,5 @@ iosApp/Pods/* iosApp/Podfile.lock kotlin-js-store/* .kotlin/* +samples/sample-ios-app/Pods/* +samples/sample-ios-app/Podfile.lock \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..198e87ad --- /dev/null +++ b/Makefile @@ -0,0 +1,36 @@ +.PHONY: pull-mains cleanup new-screen + +# ======================PULL MAINS====================== +pull-mains: + @echo "Pulling main branches..." + git pull + git pull origin staging + git pull origin release + +# ======================CLEANUP====================== +cleanup: + @echo "Cleaning project..." + rm -rf .idea + ./gradlew clean + rm -rf .gradle + rm -rf build + rm -rf */build + rm -rf samples/sample-ios-app/iosApp.xcworkspace + rm -rf samples/sample-ios-app/Pods + rm -rf samples/sample-ios-app/iosApp.xcodeproj/project.xcworkspace + rm -rf samples/sample-ios-app/iosApp.xcodeproj/xcuserdata + +# ====================== NEW SCREEN====================== +new-screen: + @echo "Creating new screen..." + @feature=$(word 2, $(MAKECMDGOALS)); \ + screen=$(word 3, $(MAKECMDGOALS)); \ + if [ -z "$$feature" ] || [ -z "$$screen" ]; then \ + echo "Usage: make new-screen "; exit 1; \ + fi; \ + echo "Feature: $$feature, Screen: $$screen"; \ + ./scripts/new-screen.sh "$$feature" "$$screen" + +# ====================== CATCHALL for dynamic targets ======================= +%: + @echo "Shamy is genius ;)" \ No newline at end of file diff --git a/androidApp/build.gradle.kts b/androidApp/build.gradle.kts deleted file mode 100644 index 0ff1992b..00000000 --- a/androidApp/build.gradle.kts +++ /dev/null @@ -1,114 +0,0 @@ -import org.jetbrains.kotlin.gradle.dsl.JvmTarget - -plugins { - kotlin(Plugins.MULTIPLATFORM_PLUGIN) - id(Plugins.ANDROID_APPLICATION_PLUGIN) - id(Plugins.COMPOSE_PLUGIN) version Versions.COMPOSE - id(Plugins.COMPOSE_COMPILER_PLUGIN) version Versions.KOTLIN - id(Plugins.PLAY_SERVICES_PLUGIN) - id(Plugins.CRASHLYTICS_PLUGIN) -} - -android { - namespace = Configs.SAMPLE_APP_NAMESPACE - compileSdk = Configs.COMPILE_SDK_VERSION - - sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml") - - packagingOptions.apply { - setMerges( - setOf( - "MR/**", - "META-INF/services/**", - "font/**" - ) - ) - } - - defaultConfig { - minSdk = Configs.MIN_SDK_VERSION - targetSdk = Configs.TARGET_SDK_VERSION - versionCode = Configs.MY_ATLAS_VERSION_CODE - versionName = Configs.MY_ATLAS_VERSION_NAME - - proguardFiles( - getDefaultProguardFile("proguard-android-optimize.txt"), "./proguard-rules.pro" - ) - } - - signingConfigs { - Buildable.all().forEach { - maybeCreate(it.name).apply { - storeFile = file(it.storeFile) - storePassword = it.storePassword - keyAlias = it.keyAlias - keyPassword = it.keyPassword - } - } - } - - buildTypes { - Buildable.all().forEach { - maybeCreate(it.name).apply { - isDebuggable = it.isDebuggable - isMinifyEnabled = it.isMinifyEnabled - isShrinkResources = it.isShrinkResources - signingConfig = signingConfigs.getByName(it.name) - } - } - } - - flavorDimensions(FlavorDimensions.DEFAULT) - productFlavors { - ProductFlavor.all().forEach { flavor -> - maybeCreate(flavor.toString()).apply { - applicationId = flavor.applicationId - versionNameSuffix = flavor.versionNameSuffix - resValue( - type = "string", - name = "app_name", - value = "SampleApp${flavor.appNameSuffix}" - ) - } - } - } - - lint { - abortOnError = false - checkReleaseBuilds = false - } - - buildFeatures { - compose = true - buildConfig = true - } - - composeOptions { - kotlinCompilerExtensionVersion = Versions.COMPOSE_ANDROID - } - - compileOptions { - sourceCompatibility = Versions.JVM - targetCompatibility = Versions.JVM - } - - kotlin { - jvmToolchain(Versions.JVM.toString().toInt()) - } -} - -kotlin { - androidTarget { - compilerOptions { - jvmTarget.value(JvmTarget.JVM_17) - freeCompilerArgs.addAll("-P", "plugin:org.jetbrains.kotlin.parcelize:additionalAnnotation=com.metacto.core.utils.CommonParcelize") - } - } - sourceSets { - val androidMain by getting { - dependencies { - implementation(project(Dependencies.Modules.SAMPLE_APP_SHARED)) - } - } - } -} \ No newline at end of file diff --git a/androidApp/google-services.json b/androidApp/google-services.json deleted file mode 100644 index 05ab8a99..00000000 --- a/androidApp/google-services.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "project_info": { - "project_number": "211134116667", - "project_id": "metactosampleapp", - "storage_bucket": "metactosampleapp.appspot.com" - }, - "client": [ - { - "client_info": { - "mobilesdk_app_id": "1:211134116667:android:0f5bd66d529ccdbc827d1e", - "android_client_info": { - "package_name": "com.sampleApp.app.dev" - } - }, - "oauth_client": [], - "api_key": [ - { - "current_key": "AIzaSyBSqPW4Jn4HksPCcHoRqfXQ2IUxWY_oVro" - } - ], - "services": { - "appinvite_service": { - "other_platform_oauth_client": [] - } - } - }, - { - "client_info": { - "mobilesdk_app_id": "1:211134116667:android:499f537d887e9ce1827d1e", - "android_client_info": { - "package_name": "com.sampleApp.app.prod" - } - }, - "oauth_client": [], - "api_key": [ - { - "current_key": "AIzaSyBSqPW4Jn4HksPCcHoRqfXQ2IUxWY_oVro" - } - ], - "services": { - "appinvite_service": { - "other_platform_oauth_client": [] - } - } - } - ], - "configuration_version": "1" -} \ No newline at end of file diff --git a/androidApp/proguard-rules.pro b/androidApp/proguard-rules.pro deleted file mode 100644 index 8d79869f..00000000 --- a/androidApp/proguard-rules.pro +++ /dev/null @@ -1,23 +0,0 @@ -# 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 - --keepresourcefiles assets/io/michaelrocks/libphonenumber/android/** diff --git a/androidApp/src/androidMain/kotlin/com/sampleApp/app/MainActivity.kt b/androidApp/src/androidMain/kotlin/com/sampleApp/app/MainActivity.kt deleted file mode 100644 index 6d736866..00000000 --- a/androidApp/src/androidMain/kotlin/com/sampleApp/app/MainActivity.kt +++ /dev/null @@ -1,46 +0,0 @@ -package com.sampleApp.app - -import android.content.Intent -import android.os.Bundle -import androidx.activity.compose.setContent -import androidx.appcompat.app.AppCompatActivity -import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen -import androidx.core.view.WindowCompat -import com.metacto.core.utils.deepLink.IDeepLinkManager -import com.metacto.core.utils.notification.INotificationManager -import com.sampleApp.app.presentation.MainView -import com.sampleApp.app.presentation.app.app.AppContract -import com.sampleApp.app.presentation.app.app.AppViewModel -import org.koin.android.ext.android.inject - -class MainActivity : AppCompatActivity() { - private val deepLinkManager by inject() - private val notificationManager by inject() - private val appViewModel by inject() - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - notificationManager.onCreateOrOnNewIntent(intent) - appViewModel.setEvent(AppContract.Event.Init) - - installSplashScreen() - WindowCompat.setDecorFitsSystemWindows(window, false) - setContent { - MainView() - } - - intent?.let { checkDeepLink(intent) } - } - - override fun onNewIntent(intent: Intent) { - super.onNewIntent(intent) - checkDeepLink(intent) - notificationManager.onCreateOrOnNewIntent(intent) - } - - private fun checkDeepLink(intent: Intent) { - intent.dataString?.let { - deepLinkManager.emitDeepLink(it) - } - } -} \ No newline at end of file diff --git a/androidApp/src/androidMain/kotlin/com/sampleApp/app/SampleApp.kt b/androidApp/src/androidMain/kotlin/com/sampleApp/app/SampleApp.kt deleted file mode 100644 index 9d6b5bda..00000000 --- a/androidApp/src/androidMain/kotlin/com/sampleApp/app/SampleApp.kt +++ /dev/null @@ -1,26 +0,0 @@ -package com.sampleApp.app - -import android.app.Application -import com.sampleApp.app.constants.AppEnvironment -import com.sampleApp.app.di.initKoin -import org.koin.android.ext.koin.androidContext - -class SampleApp : Application() { - override fun onCreate() { - super.onCreate() - - // Prepare environment - val environment = if (BuildConfig.FLAVOR == "qa") { - AppEnvironment.dev() - } else { - AppEnvironment.prod() - } - - // Init koin - initKoin( - environment = environment - ) { - androidContext(this@SampleApp) - } - } -} \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 51e7105b..9d908dc9 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,14 +2,27 @@ buildscript { repositories.addProjectRepos() dependencies { - classpath(Plugins.GRADLE_CLASSPATH) - classpath(Plugins.KOTLIN_CLASSPATH) - classpath(Plugins.SERIALIZATION_CLASSPATH) - classpath(Plugins.PLAY_SERVICES_CLASSPATH) - classpath(Plugins.CRASHLYTICS_PLUGIN_CLASSPATH) + classpath(libs.classpath.androidgradle) + classpath(libs.classpath.kotlingradle) + classpath(libs.classpath.serialization) + classpath(libs.classpath.googleservices) + classpath(libs.classpath.crashlytics) } } allprojects { repositories.addProjectRepos() } + +tasks.register("updateVersionCatalog") { + group = "publishing" + description = "Updates metacto-core version in libs.versions.toml from versions.properties" +} + +// Convenience task to update version catalog and publish +tasks.register("publishVersionCatalog") { + group = "publishing" + description = "Updates version catalog and publishes to Maven" + dependsOn("updateVersionCatalog") + finalizedBy(":version-catalog:publishToMavenLocal") +} diff --git a/buildSrc/src/main/kotlin/CatalogConfigs.kt b/buildSrc/src/main/kotlin/CatalogConfigs.kt new file mode 100644 index 00000000..4151968f --- /dev/null +++ b/buildSrc/src/main/kotlin/CatalogConfigs.kt @@ -0,0 +1,9 @@ +object CatalogConfigs { + const val FRAMEWORK_NAME = "appShared" + const val NAMESPACE = "com.metacto.catalogapp" + const val APP_NAME = "Catalog" + const val DEV_APP_ID = "com.metacto.catalogapp.dev" + const val PROD_APP_ID = "com.metacto.catalogapp.prod" + val VERSION_CODE by lazy { getGitCommitCount() } + val VERSION_NAME by lazy { getVersionName() } +} \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/CatalogProductFlavor.kt b/buildSrc/src/main/kotlin/CatalogProductFlavor.kt new file mode 100644 index 00000000..d0c77578 --- /dev/null +++ b/buildSrc/src/main/kotlin/CatalogProductFlavor.kt @@ -0,0 +1,24 @@ +import java.util.* + +sealed class CatalogProductFlavor { + abstract val applicationId: String + abstract val appName: String + open val versionNameSuffix: String = "" + + object QA : CatalogProductFlavor() { + override val applicationId: String = CatalogConfigs.DEV_APP_ID + override val appName: String = "${CatalogConfigs.APP_NAME}-DEV" + override val versionNameSuffix: String = "-dev" + } + + object PROD : CatalogProductFlavor() { + override val applicationId: String = CatalogConfigs.PROD_APP_ID + override val appName: String = CatalogConfigs.APP_NAME + } + + companion object { + fun all() = listOf(QA, PROD) + } + + override fun toString(): String = javaClass.simpleName.lowercase(Locale.US) +} \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/Configs.kt b/buildSrc/src/main/kotlin/Configs.kt index 85dd00db..333d8610 100644 --- a/buildSrc/src/main/kotlin/Configs.kt +++ b/buildSrc/src/main/kotlin/Configs.kt @@ -1,20 +1,14 @@ object Configs { - const val COMPILE_SDK_VERSION = 35 - const val TARGET_SDK_VERSION = 35 - const val MIN_SDK_VERSION = 26 - const val CORE_APP_ID = "com.metacto.coreApp" - const val SAMPLE_APP_FRAMEWORK_NAME = "sampleAppShared" - const val SAMPLE_APP_NAMESPACE = "com.sampleApp.app" - const val DEV_APP_ID = "com.sampleApp.app.dev" - const val PROD_APP_ID = "com.sampleApp.app.prod" - val MY_ATLAS_VERSION_CODE by lazy { getGitCommitCount() } - val MY_ATLAS_VERSION_NAME by lazy { getVersionName() } - const val IOS_DEPLOYMENT_TARGET = "14.1" - - // TODO: move these values to gradle.properties + const val GROUP_ID = "com.metacto.kmm" + const val PUBLISH_REPO_USER = "PUBLISH_REPO_USER" + const val PUBLISH_REPO_TOKEN = "PUBLISH_REPO_TOKEN" + const val LOCAL_PROPERTIES = "local.properties" + const val VERSIONS_PROPERTIES = "versions.properties" + const val PUBLISH_VERSION = "PUBLISH_CORE_VERSION" + const val MAVEN_URL = "https://maven.pkg.github.com/Meta-CTO/coreapp" + const val PUBLISH_MAVEN_REPO_NAME = "Github" const val SH_USERNAME = "developer-swensonhe" const val SH_PASSWORD = "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" - - const val META_CTO_USERNAME = "metactoengineer" - const val META_CTO_PASSWORD = "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" + val META_CTO_USERNAME: String = System.getenv("META_CTO_USERNAME").orEmpty() + val META_CTO_PASSWORD: String = System.getenv("META_CTO_PASSWORD").orEmpty() } \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/Definitions.kt b/buildSrc/src/main/kotlin/Definitions.kt index 7127821a..5f7a1efd 100644 --- a/buildSrc/src/main/kotlin/Definitions.kt +++ b/buildSrc/src/main/kotlin/Definitions.kt @@ -7,11 +7,8 @@ fun RepositoryHandler.addProjectRepos() { jcenter() mavenCentral() mavenLocal() - maven("https://jitpack.io") - maven("https://www.jitpack.io") maven("https://storage.googleapis.com/r8-releases/raw") maven("https://maven.google.com") -// maven("https://s01.oss.sonatype.org/content/repositories/snapshots/") maven("https://maven.pkg.jetbrains.space/public/p/compose/dev") maven("https://plugins.gradle.org/m2/") maven("https://maven.pkg.github.com/swensonhe/firebase-kotlin-sdk") { @@ -26,4 +23,5 @@ fun RepositoryHandler.addProjectRepos() { password = Configs.META_CTO_PASSWORD } } + maven("https://jitpack.io") } \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/Dependencies.kt b/buildSrc/src/main/kotlin/Dependencies.kt deleted file mode 100644 index 315bed2e..00000000 --- a/buildSrc/src/main/kotlin/Dependencies.kt +++ /dev/null @@ -1,118 +0,0 @@ -object Dependencies { - object Pods { - const val FIREBASE_AUTH = "FirebaseAuth" - const val FIREBASE_ANALYTICS = "FirebaseAnalytics" - const val GOOGLE_SIGN_IN = "GoogleSignIn" - const val FIREBASE_DYNAMIC_LINKS = "FirebaseDynamicLinks" - const val FIREBASE_CRASHLYTICS = "FirebaseCrashlytics" - const val FIREBASE_REMOTE_CONFIG = "FirebaseRemoteConfig" - const val FIREBASE_MESSAGING = "FirebaseMessaging" - const val AMPLITUDE = "Amplitude" - const val APPS_FLYER = "AppsFlyerFramework" - - object CleverTap { - const val MODULE = "CleverTapSDK" - const val SDK = "CleverTap-iOS-SDK" - } - } - - object Compose { - const val RUNTIME = "org.jetbrains.compose.runtime:runtime:${Versions.COMPOSE}" - const val FOUNDATION = "org.jetbrains.compose.foundation:foundation:${Versions.COMPOSE}" - const val MATERIAL = "org.jetbrains.compose.material:material:${Versions.COMPOSE}" - const val MATERIAL3 = "org.jetbrains.compose.material3:material3:${Versions.COMPOSE}" - const val ANIMATION = "org.jetbrains.compose.animation:animation:${Versions.COMPOSE}" - const val ANIMATION_GRAPHICS = - "org.jetbrains.compose.animation:animation-graphics:${Versions.COMPOSE}" - const val EXTENDED_ICONS = - "org.jetbrains.compose.material:material-icons-extended:${Versions.COMPOSE}" - const val RESOURCES = - "org.jetbrains.compose.components:components-resources:${Versions.COMPOSE}" - const val UI_TOOLING = "androidx.compose.ui:ui-tooling:${Versions.COMPOSE_ANDROID}" - } - - object Kotlin { - const val DATE_TIME = "org.jetbrains.kotlinx:kotlinx-datetime:${Versions.DATE_TIME}" - } - - object Koin { - const val CORE = "io.insert-koin:koin-core:${Versions.KOIN}" - const val COMPOSE = "io.insert-koin:koin-compose:${Versions.KOIN_COMPOSE}" - const val ANDROID = "io.insert-koin:koin-android:${Versions.KOIN}" - const val ANDROID_COMPOSE = "io.insert-koin:koin-androidx-compose:${Versions.KOIN}" - } - - object Voyager { - const val NAVIGATOR = "cafe.adriel.voyager:voyager-navigator:${Versions.VOYAGER}" - const val BOTTOM_SHEET = - "cafe.adriel.voyager:voyager-bottom-sheet-navigator:${Versions.VOYAGER}" - const val TAB_NAVIGATOR = "cafe.adriel.voyager:voyager-tab-navigator:${Versions.VOYAGER}" - const val SCREEN_MODEL = "cafe.adriel.voyager:voyager-screenmodel:${Versions.VOYAGER}" - const val KOIN = "cafe.adriel.voyager:voyager-koin:${Versions.VOYAGER}" - } - - object AndroidX { - const val ACTIVITY_COMPOSE = - "androidx.activity:activity-compose:${Versions.ACTIVITY_COMPOSE}" - const val APP_COMPAT = "androidx.appcompat:appcompat:${Versions.APP_COMPAT}" - const val CORE_KTS = "androidx.core:core-ktx:${Versions.CORE_KTS}" - const val SECURITY_CRYPTO = "androidx.security:security-crypto:${Versions.SECURITY_CRYPTO}" - const val SPLASH_SCREEN = "androidx.core:core-splashscreen:${Versions.SPLASH_SCREEN}" - } - - object Firebase { - const val BOM = "com.google.firebase:firebase-bom:${Versions.FIREBASE}" - const val DYNAMIC_LINKS = "com.google.firebase:firebase-dynamic-links-ktx" - const val CRASHLYTICS = "com.google.firebase:firebase-crashlytics" - const val ANALYTICS = "com.google.firebase:firebase-analytics" - const val MESSAGING = "com.google.firebase:firebase-messaging-ktx" - const val PLAY_SERVICES_AUTH = - "com.google.android.gms:play-services-auth:${Versions.PLAY_SERVICES_AUTH}" - } - - object Coil { - const val CORE = "io.coil-kt.coil3:coil:${Versions.COIL}" - const val COMPOSE = "io.coil-kt.coil3:coil-compose:${Versions.COIL}" - const val NETWORK = "io.coil-kt.coil3:coil-network-ktor3:${Versions.COIL}" - const val SVG = "io.coil-kt.coil3:coil-svg:${Versions.COIL}" - } - - object ExoPlayer { - const val PLAYER = "androidx.media3:media3-exoplayer:${Versions.EXO_PLAYER}" - const val HLS = "androidx.media3:media3-exoplayer-hls:${Versions.EXO_PLAYER}" - const val UI = "androidx.media3:media3-ui:${Versions.EXO_PLAYER}" - const val SESSION = "androidx.media3:media3-session:${Versions.EXO_PLAYER}" - } - - object YoutubePlayer { - const val CORE = "com.pierfrancescosoffritti.androidyoutubeplayer:core:${Versions.YOUTUBE_PLAYER}" - const val CUSTOM_UI = "com.pierfrancescosoffritti.androidyoutubeplayer:custom-ui:${Versions.YOUTUBE_PLAYER}" - } - - object Modules { - const val CORE_APP = ":coreapp" - const val SAMPLE_APP_SHARED = ":sampleAppShared" - } - - object GitLive { - const val CONFIG = "dev.gitlive:firebase-config:${Versions.GIT_LIVE}" - } - - object Camera { - const val CAMERA_VIEW = "androidx.camera:camera-view:${Versions.CAMERA_X}" - const val CAMERA2 = "androidx.camera:camera-camera2:${Versions.CAMERA_X}" - const val CORE = "androidx.camera:camera-core:${Versions.CAMERA_X}" - const val LIFECYCLE = "androidx.camera:camera-lifecycle:${Versions.CAMERA_X}" - const val VIDEO = "androidx.camera:camera-video:${Versions.CAMERA_X}" - } - - const val STRAPI_KMM = "com.metacto:strapi:${Versions.STRAPI_KMM}" - const val ANDROID_IMAGE_PICKER = "com.github.dhaval2404:imagepicker:${Versions.ANDROID_IMAGE_PICKER}" - const val LIB_PHONE_NUMBER = "io.github.luca992.libphonenumber-kotlin:libphonenumber:${Versions.LIB_PHONE_NUMBER}" - const val ANDROID_CROPPER = "com.vanniktech:android-image-cropper:${Versions.ANDROID_CROPPER}" - const val COMPOTTIE = "io.github.alexzhirkevich:compottie:${Versions.COMPOTTIE}" - const val WEBVIEW = "io.github.kevinnzou:compose-webview-multiplatform:${Versions.WEBVIEW}" - const val SHIMMER = "com.valentinilk.shimmer:compose-shimmer:${Versions.SHIMMER}" - const val KMP_NOTIFIER = "io.github.mirzemehdi:kmpnotifier:${Versions.KMP_NOTIFIER}" - const val STATELY_COMMON = "co.touchlab:stately-common:2.0.5" -} \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/PlaygroundConfigs.kt b/buildSrc/src/main/kotlin/PlaygroundConfigs.kt new file mode 100644 index 00000000..07730288 --- /dev/null +++ b/buildSrc/src/main/kotlin/PlaygroundConfigs.kt @@ -0,0 +1,9 @@ +object PlaygroundConfigs { + const val FRAMEWORK_NAME = "appShared" + const val NAMESPACE = "com.metacto.playground" + const val APP_NAME = "Playground" + const val DEV_APP_ID = "com.metacto.playground.dev" + const val PROD_APP_ID = "com.metacto.playground.prod" + val VERSION_CODE by lazy { getGitCommitCount() } + val VERSION_NAME by lazy { getVersionName() } +} \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/PlaygroundProductFlavor.kt b/buildSrc/src/main/kotlin/PlaygroundProductFlavor.kt new file mode 100644 index 00000000..1b57d100 --- /dev/null +++ b/buildSrc/src/main/kotlin/PlaygroundProductFlavor.kt @@ -0,0 +1,24 @@ +import java.util.* + +sealed class PlaygroundProductFlavor { + abstract val applicationId: String + abstract val appName: String + open val versionNameSuffix: String = "" + + object QA : PlaygroundProductFlavor() { + override val applicationId: String = PlaygroundConfigs.DEV_APP_ID + override val appName: String = "${PlaygroundConfigs.APP_NAME}-DEV" + override val versionNameSuffix: String = "-dev" + } + + object PROD : PlaygroundProductFlavor() { + override val applicationId: String = PlaygroundConfigs.PROD_APP_ID + override val appName: String = PlaygroundConfigs.APP_NAME + } + + companion object { + fun all() = listOf(QA, PROD) + } + + override fun toString(): String = javaClass.simpleName.lowercase(Locale.US) +} \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/Plugins.kt b/buildSrc/src/main/kotlin/Plugins.kt deleted file mode 100644 index 2e9f5d3f..00000000 --- a/buildSrc/src/main/kotlin/Plugins.kt +++ /dev/null @@ -1,26 +0,0 @@ -object Plugins { - // Plugins - const val MULTIPLATFORM_PLUGIN = "multiplatform" - const val COCOAPODS_PLUGIN = "native.cocoapods" - const val ANDROID_LIBRARY_PLUGIN = "com.android.library" - const val COMPOSE_PLUGIN = "org.jetbrains.compose" - const val COMPOSE_COMPILER_PLUGIN = "org.jetbrains.kotlin.plugin.compose" - const val SERIALIZATION_PLUGIN = "org.jetbrains.kotlin.plugin.serialization" - const val PARCELIZE_PLUGIN = "kotlin-parcelize" - const val ANDROID_APPLICATION_PLUGIN = "com.android.application" - const val PLAY_SERVICES_PLUGIN = "com.google.gms.google-services" - const val CRASHLYTICS_PLUGIN = "com.google.firebase.crashlytics" - const val SWIFT_KLIB = "io.github.ttypic.swiftklib" - const val MAVEN_PUBLISH = "maven-publish" - const val SIGNING = "signing" - - // Classpaths - const val GRADLE_CLASSPATH = "com.android.tools.build:gradle:${Versions.GRADLE}" - const val KOTLIN_CLASSPATH = "org.jetbrains.kotlin:kotlin-gradle-plugin:${Versions.KOTLIN}" - const val SERIALIZATION_CLASSPATH = - "org.jetbrains.kotlin:kotlin-serialization:${Versions.SERIALIZATION}" - const val PLAY_SERVICES_CLASSPATH = - "com.google.gms:google-services:${Versions.PLAY_SERVICES_PLUGIN}" - const val CRASHLYTICS_PLUGIN_CLASSPATH = - "com.google.firebase:firebase-crashlytics-gradle:${Versions.CRASHLYTICS_PLUGIN}" -} \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/ProductFlavor.kt b/buildSrc/src/main/kotlin/ProductFlavor.kt deleted file mode 100644 index 1b256e3e..00000000 --- a/buildSrc/src/main/kotlin/ProductFlavor.kt +++ /dev/null @@ -1,28 +0,0 @@ -import java.util.* - -sealed class ProductFlavor { - val name: String = javaClass.simpleName.lowercase(Locale.US) - abstract val applicationId: String - open val appNameSuffix: String = "" - open val versionNameSuffix: String = "" - - object QA : ProductFlavor() { - override val applicationId: String = Configs.DEV_APP_ID - override val appNameSuffix: String = "-DEV" - override val versionNameSuffix: String = "-dev" - } - - object PROD : ProductFlavor() { - override val applicationId: String = Configs.PROD_APP_ID - } - - companion object { - fun all() = arrayListOf(QA, PROD) - } - - override fun toString(): String = name -} - -object FlavorDimensions { - const val DEFAULT = "default" -} diff --git a/buildSrc/src/main/kotlin/UpdateVersionCatalogTask.kt b/buildSrc/src/main/kotlin/UpdateVersionCatalogTask.kt new file mode 100644 index 00000000..9d0ec5a8 --- /dev/null +++ b/buildSrc/src/main/kotlin/UpdateVersionCatalogTask.kt @@ -0,0 +1,28 @@ +import org.gradle.api.DefaultTask +import org.gradle.api.tasks.TaskAction +import java.io.File +import java.util.Properties + +open class UpdateVersionCatalogTask : DefaultTask() { + + @TaskAction + fun updateVersion() { + val versionProperties = Properties().apply { + load(File(project.rootDir, "versions.properties").inputStream()) + } + val publishVersion = versionProperties.getProperty("PUBLISH_CORE_VERSION") + + val libsVersionsFile = File(project.rootDir, "gradle/libs.versions.toml") + val content = libsVersionsFile.readText() + + // Update metacto-core version + val updatedContent = content.replace( + Regex("""metacto-core = "[^"]+""""), + """metacto-core = "$publishVersion"""" + ) + + libsVersionsFile.writeText(updatedContent) + + println("✅ Updated metacto-core version to $publishVersion in libs.versions.toml") + } +} diff --git a/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/src/main/kotlin/Versions.kt deleted file mode 100644 index 1bf2ef69..00000000 --- a/buildSrc/src/main/kotlin/Versions.kt +++ /dev/null @@ -1,38 +0,0 @@ -import org.gradle.api.JavaVersion - -object Versions { - val JVM = JavaVersion.VERSION_17 - const val GRADLE = "8.7.1" - const val KOTLIN = "2.1.0" - const val COMPOSE = "1.7.0" - const val SWIFT_KLIB = "0.6.4" - const val COMPOSE_ANDROID = "1.7.4" - const val GOOGLE_SIGN_IN_POD = "7.0.0" - const val DATE_TIME = "0.4.0" - const val STRAPI_KMM = "10.0.158" - const val KOIN = "4.0.0" - const val KOIN_COMPOSE = "1.1.0" - const val VOYAGER = "1.1.0-beta02" - const val ACTIVITY_COMPOSE = "1.8.0" - const val APP_COMPAT = "1.6.1" - const val CORE_KTS = "1.12.0" - const val SECURITY_CRYPTO = "1.0.0" - const val PLAY_SERVICES_AUTH = "20.7.0" - const val SPLASH_SCREEN = "1.1.0-alpha02" - const val FIREBASE = "32.7.0" - const val SERIALIZATION = "2.1.0" - const val PLAY_SERVICES_PLUGIN = "4.3.14" - const val CRASHLYTICS_PLUGIN = "2.9.4" - const val ANDROID_IMAGE_PICKER = "2.1" - const val LIB_PHONE_NUMBER = "0.1.3-metacto-3" - const val ANDROID_CROPPER = "4.5.0" - const val COIL = "3.0.0-alpha10" - const val COMPOTTIE = "1.1.0" - const val WEBVIEW = "1.9.40-alpha04" - const val EXO_PLAYER = "1.3.1" - const val GIT_LIVE = "1.10.4" - const val YOUTUBE_PLAYER = "12.1.0" - const val SHIMMER = "1.3.1" - const val KMP_NOTIFIER = "1.3.0" - const val CAMERA_X = "1.3.4" -} diff --git a/cleanup.sh b/cleanup.sh deleted file mode 100755 index 62f9391b..00000000 --- a/cleanup.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh -rm -rf .idea -./gradlew clean -rm -rf .gradle -rm -rf build -rm -rf */build -rm -rf iosApp/iosApp.xcworkspace -rm -rf iosApp/Pods -rm -rf iosApp/iosApp.xcodeproj/project.xcworkspace -rm -rf iosApp/iosApp.xcodeproj/xcuserdata diff --git a/core/core/build.gradle.kts b/core/core/build.gradle.kts new file mode 100644 index 00000000..de66b5be --- /dev/null +++ b/core/core/build.gradle.kts @@ -0,0 +1,142 @@ +import com.android.build.gradle.internal.cxx.configure.gradleLocalProperties +import org.jetbrains.kotlin.gradle.plugin.mpp.apple.XCFramework +import org.jetbrains.kotlin.konan.properties.Properties +import java.io.FileInputStream +import java.io.FileOutputStream + +plugins { + alias(libs.plugins.multiplatform) + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.parcelize) + alias(libs.plugins.kotlin.serialization) + alias(libs.plugins.maven.publish) + alias(libs.plugins.signing) +} + +private val versionProperties = Properties().apply { + load(FileInputStream(File(rootProject.rootDir, Configs.VERSIONS_PROPERTIES))) +} + +private val currentVersion = versionProperties.getProperty(Configs.PUBLISH_VERSION) as String +private val libName = "core" +private val libNamespace = "com.metacto.core" + +version = currentVersion +group = Configs.GROUP_ID + +kotlin { + androidTarget { + compilerOptions { + freeCompilerArgs.addAll("-P", "plugin:org.jetbrains.kotlin.parcelize:additionalAnnotation=com.metacto.kmm.core.CommonParcelize") + } + compilations.all { + kotlinOptions { + jvmTarget = libs.versions.jvm.get() + } + } + publishLibraryVariants("debug", "release") + } + + val xcf = XCFramework() + listOf( + iosX64(), + iosArm64(), + iosSimulatorArm64() + ).forEach { + it.binaries.framework(libName) { + baseName = libName + xcf.add(this) + isStatic = true + } + } + + metadata { + compilations.matching { it.name == "iosMain" }.all { + compileTaskProvider.configure { enabled = false } + } + } + + sourceSets { + commonMain.dependencies { + // Core SDKs + api(libs.metacto.network) + + // Koin + api(libs.koin.core) + api(libs.koin.compose) + + // Kotlin + api(libs.kotlin.coroutines) + api(libs.kotlin.datetime) + + // Don't remove this + implementation(libs.statelycommon) + } + + androidMain.dependencies { + // Koin + api(libs.koin.android) + api(libs.koin.androidcompose) + } + + iosMain.dependencies { + // IOS DEPENDENCIES + } + } + + task("testClasses") +} + +android { + namespace = libNamespace + compileSdk = libs.versions.compileSdk.get().toInt() + + sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml") + sourceSets["main"].res.srcDirs("src/androidMain/res") + sourceSets["main"].resources.srcDirs("src/commonMain/resources") + sourceSets["main"].res.srcDirs("src/androidMain/res", "src/commonMain/resources") + + defaultConfig { + minSdk = libs.versions.minSdk.get().toInt() + targetSdk = libs.versions.targetSdk.get().toInt() + consumerProguardFiles("consumer-rules.pro") + } + compileOptions { + sourceCompatibility = JavaVersion.toVersion(libs.versions.jvm.get()) + targetCompatibility = JavaVersion.toVersion(libs.versions.jvm.get()) + } +} + +publishing { + repositories { + val localProperties = gradleLocalProperties(rootDir, providers) + var publishUserRepo = localProperties.getProperty(Configs.PUBLISH_REPO_USER) + var publishTokenRepo = localProperties.getProperty(Configs.PUBLISH_REPO_TOKEN) + + if (publishUserRepo.isNullOrEmpty()) { + publishUserRepo = "" + localProperties.setProperty(Configs.PUBLISH_REPO_USER, publishUserRepo) + } + + if (publishTokenRepo.isNullOrEmpty()) { + publishTokenRepo = "" + localProperties.setProperty(Configs.PUBLISH_REPO_TOKEN, publishTokenRepo) + } + + if (publishUserRepo.isEmpty() || publishTokenRepo.isEmpty()) { + localProperties.store( + FileOutputStream(File(rootDir, Configs.LOCAL_PROPERTIES)), null + ) + } + + repositories { + maven(Configs.MAVEN_URL) { + name = Configs.PUBLISH_MAVEN_REPO_NAME + credentials { + username = publishUserRepo + password = publishTokenRepo + } + } + } + } +} \ No newline at end of file diff --git a/core/core/src/androidMain/kotlin/com/metacto/core/date/CoreDate.kt b/core/core/src/androidMain/kotlin/com/metacto/core/date/CoreDate.kt new file mode 100644 index 00000000..5c7c7103 --- /dev/null +++ b/core/core/src/androidMain/kotlin/com/metacto/core/date/CoreDate.kt @@ -0,0 +1,49 @@ +package com.metacto.core.date + +import com.metacto.kmm.core.CommonSerializable +import kotlinx.datetime.LocalDate +import kotlinx.datetime.TimeZone +import kotlinx.datetime.atStartOfDayIn +import kotlinx.datetime.toLocalDateTime +import kotlinx.serialization.Serializable +import java.io.ObjectInputStream +import java.io.ObjectOutputStream + +@Serializable(with = CoreDateSerializer::class) +actual class CoreDate actual constructor( + actual val value: LocalDate +) : CommonSerializable { + + private fun writeObject(out: ObjectOutputStream) { + val millis = value.atStartOfDayIn(TimeZone.UTC).toEpochMilliseconds() + out.writeLong(millis) + } + + private fun readObject(inp: ObjectInputStream) { + val millis = inp.readLong() + val instant = kotlinx.datetime.Instant.fromEpochMilliseconds(millis) + val localDate = instant.toLocalDateTime(TimeZone.UTC).date + + val field = this::class.java.getDeclaredField("value") + field.isAccessible = true + field.set(this, localDate) + } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (other !is CoreDate) return false + return value == other.value + } + + override fun hashCode(): Int { + return value.hashCode() + } + + override fun toString(): String { + return "CoreDate(value=$value)" + } + + actual companion object { + private const val serialVersionUID = 1L + } +} \ No newline at end of file diff --git a/core/core/src/androidMain/kotlin/com/metacto/core/date/CoreDateTime.kt b/core/core/src/androidMain/kotlin/com/metacto/core/date/CoreDateTime.kt new file mode 100644 index 00000000..116785d1 --- /dev/null +++ b/core/core/src/androidMain/kotlin/com/metacto/core/date/CoreDateTime.kt @@ -0,0 +1,49 @@ +package com.metacto.core.date + +import com.metacto.kmm.core.CommonSerializable +import kotlinx.datetime.LocalDateTime +import kotlinx.datetime.TimeZone +import kotlinx.datetime.toInstant +import kotlinx.datetime.toLocalDateTime +import kotlinx.serialization.Serializable +import java.io.ObjectInputStream +import java.io.ObjectOutputStream + +@Serializable(with = CoreDateTimeSerializer::class) +actual class CoreDateTime actual constructor( + actual val value: LocalDateTime +) : CommonSerializable { + + private fun writeObject(out: ObjectOutputStream) { + val millis = value.toInstant(TimeZone.UTC).toEpochMilliseconds() + out.writeLong(millis) + } + + private fun readObject(inp: ObjectInputStream) { + val millis = inp.readLong() + val instant = kotlinx.datetime.Instant.fromEpochMilliseconds(millis) + val localDateTime = instant.toLocalDateTime(TimeZone.UTC) + + val field = this::class.java.getDeclaredField("value") + field.isAccessible = true + field.set(this, localDateTime) + } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (other !is CoreDateTime) return false + return value == other.value + } + + override fun hashCode(): Int { + return value.hashCode() + } + + override fun toString(): String { + return "CoreDateTime(value=$value)" + } + + actual companion object { + private const val serialVersionUID = 1L + } +} \ No newline at end of file diff --git a/core/core/src/androidMain/kotlin/com/metacto/core/date/CoreTime.kt b/core/core/src/androidMain/kotlin/com/metacto/core/date/CoreTime.kt new file mode 100644 index 00000000..def52e25 --- /dev/null +++ b/core/core/src/androidMain/kotlin/com/metacto/core/date/CoreTime.kt @@ -0,0 +1,48 @@ +package com.metacto.core.date + +import com.metacto.kmm.core.CommonSerializable +import kotlinx.datetime.Clock +import kotlinx.datetime.LocalTime +import kotlinx.datetime.TimeZone +import kotlinx.datetime.toLocalDateTime +import kotlinx.serialization.Serializable +import java.io.ObjectInputStream +import java.io.ObjectOutputStream + +@Serializable(with = CoreTimeSerializer::class) +actual class CoreTime actual constructor( + actual val value: LocalTime +) : CommonSerializable { + + private fun writeObject(out: ObjectOutputStream) { + val nanoOfDay = value.toNanosecondOfDay() + out.writeLong(nanoOfDay) + } + + private fun readObject(inp: ObjectInputStream) { + val nanoOfDay = inp.readLong() + val localTime = LocalTime.fromNanosecondOfDay(nanoOfDay) + + val field = this::class.java.getDeclaredField("value") + field.isAccessible = true + field.set(this, localTime) + } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (other !is CoreTime) return false + return value == other.value + } + + override fun hashCode(): Int { + return value.hashCode() + } + + override fun toString(): String { + return "CoreTime(value=$value)" + } + + actual companion object { + private const val serialVersionUID = 1L + } +} \ No newline at end of file diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/date/DateTimeUtils.android.kt b/core/core/src/androidMain/kotlin/com/metacto/core/date/DateTimeUtils.android.kt similarity index 90% rename from coreapp/src/androidMain/kotlin/com/metacto/core/utils/date/DateTimeUtils.android.kt rename to core/core/src/androidMain/kotlin/com/metacto/core/date/DateTimeUtils.android.kt index 7f51a0b9..c185a44c 100644 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/date/DateTimeUtils.android.kt +++ b/core/core/src/androidMain/kotlin/com/metacto/core/date/DateTimeUtils.android.kt @@ -1,9 +1,10 @@ -package com.metacto.core.utils.date +package com.metacto.core.date import android.text.format.DateUtils import kotlinx.datetime.LocalDate import kotlinx.datetime.LocalDateTime import kotlinx.datetime.LocalTime +import kotlinx.datetime.TimeZone import kotlinx.datetime.toJavaLocalDate import kotlinx.datetime.toJavaLocalDateTime import kotlinx.datetime.toJavaLocalTime @@ -85,12 +86,12 @@ actual fun String.parseLocalTime(format: String, langCode: String): LocalTime? { } } -actual fun LocalDate.formatToRelativeDate(): String { - return toMillis().timestampToRelativeDate() +actual fun LocalDate.formatToRelativeDate(timeZone: TimeZone): String { + return toMillis(timeZone).timestampToRelativeDate() } -actual fun LocalDateTime.formatToRelativeDate(): String { - return toMillis().timestampToRelativeDate() +actual fun LocalDateTime.formatToRelativeDate(timeZone: TimeZone): String { + return toMillis(timeZone).timestampToRelativeDate() } private fun Long.timestampToRelativeDate(): String { diff --git a/core/core/src/androidMain/kotlin/com/metacto/core/di/Di.android.kt b/core/core/src/androidMain/kotlin/com/metacto/core/di/Di.android.kt new file mode 100644 index 00000000..76d1a2c7 --- /dev/null +++ b/core/core/src/androidMain/kotlin/com/metacto/core/di/Di.android.kt @@ -0,0 +1,47 @@ +package com.metacto.core.di + +import com.metacto.core.CoreConfigs +import com.metacto.core.domain.repos.ApiErrorHandling +import com.metacto.core.domain.repos.RepositoriesFactory +import com.metacto.core.eventBroadcaster.EventBroadcaster +import com.metacto.core.language.ILanguageManager +import com.metacto.core.language.LanguageManager +import com.metacto.kmm.network.constants.StrapiVersion +import com.metacto.kmm.network.repos.CoreAppConfigurationRepository +import org.koin.android.ext.koin.androidContext +import org.koin.dsl.module + +internal actual fun platformModule(errorHandling: ApiErrorHandling) = module { + // Android specific dependencies can be added here + + single { + val coreConfigs = get() + RepositoriesFactory( + context = androidContext(), + coreConfigs = coreConfigs, + appStorageName = coreConfigs.storageName, + shouldShowActualErrorMessages = coreConfigs.shouldShowActualErrorMessages, + networkUserAgent = coreConfigs.networkUserAgent, + errorHandling = errorHandling + ) + } + + single { + val coreConfigs = get() + CoreAppConfigurationRepository( + applicationContext = androidContext(), + appConfigurationService = get(), + sharedPreference = get(), + appConfigurationExpirationInMinutes = coreConfigs.appConfigurationExpirationInMinutes, + enforceDefaultDataWrapper = coreConfigs.strapiVersion == StrapiVersion.V5 + ) + } + + single { + EventBroadcaster + } + + single { + LanguageManager(get()) + } +} \ No newline at end of file diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/domain/repos/RepositoriesFactory.kt b/core/core/src/androidMain/kotlin/com/metacto/core/domain/repos/RepositoriesFactory.kt similarity index 64% rename from coreapp/src/androidMain/kotlin/com/metacto/core/domain/repos/RepositoriesFactory.kt rename to core/core/src/androidMain/kotlin/com/metacto/core/domain/repos/RepositoriesFactory.kt index 579bf583..8502d3a8 100644 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/domain/repos/RepositoriesFactory.kt +++ b/core/core/src/androidMain/kotlin/com/metacto/core/domain/repos/RepositoriesFactory.kt @@ -3,20 +3,19 @@ package com.metacto.core.domain.repos import android.content.Context import androidx.security.crypto.EncryptedSharedPreferences import androidx.security.crypto.MasterKeys -import com.metacto.core.CoreEnvironment -import com.metacto.strapikmm.datasource.network.KtorClientFactory -import com.metacto.strapikmm.datasource.network.services.strapi.StrapiService -import com.metacto.strapikmm.errorhandling.SerializableNetworkError -import com.metacto.strapikmm.sharedpreference.KmmPreference +import com.metacto.core.CoreConfigs +import com.metacto.kmm.network.KtorClientFactory +import com.metacto.kmm.network.services.HttpService +import com.metacto.kmm.sharedpreferences.KmmPreference import com.russhwolf.settings.SharedPreferencesSettings -import kotlin.reflect.KClass -actual open class RepositoriesFactory constructor( +actual open class RepositoriesFactory( context: Context, - actual val environment: CoreEnvironment, + actual val coreConfigs: CoreConfigs, actual val appStorageName: String, actual val shouldShowActualErrorMessages: Boolean, - actual val errorClass: KClass + actual val networkUserAgent: String?, + actual val errorHandling: ApiErrorHandling ) { private val masterKeyAlias = MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC) @@ -38,15 +37,18 @@ actual open class RepositoriesFactory constructor( ) private val ktorClientFactory = KtorClientFactory( - networkLogLevel = environment.networkLogLevel, + networkLogLevel = coreConfigs.logLevel, preference = sharedPreference, - shouldShowActualErrorMessages = shouldShowActualErrorMessages + shouldShowActualErrorMessages = shouldShowActualErrorMessages, + userAgent = networkUserAgent ) - actual val strapiService = StrapiService( - httpClient = ktorClientFactory.build(errorClass), - baseUrl = environment.baseUrl, + actual val httpService = HttpService( + baseUrl = coreConfigs.baseUrl, kmmPreference = sharedPreference, - context = context + httpClient = errorHandling.buildClient( + factory = ktorClientFactory, + configure = coreConfigs.httpClientConfiguration + ) ) } \ No newline at end of file diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/eventBroadcaster/EventBroadcaster.kt b/core/core/src/androidMain/kotlin/com/metacto/core/eventBroadcaster/EventBroadcaster.kt similarity index 94% rename from coreapp/src/androidMain/kotlin/com/metacto/core/utils/eventBroadcaster/EventBroadcaster.kt rename to core/core/src/androidMain/kotlin/com/metacto/core/eventBroadcaster/EventBroadcaster.kt index d0cd60d3..2d4c2d49 100644 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/eventBroadcaster/EventBroadcaster.kt +++ b/core/core/src/androidMain/kotlin/com/metacto/core/eventBroadcaster/EventBroadcaster.kt @@ -1,6 +1,6 @@ @file:OptIn(DelicateCoroutinesApi::class) -package com.metacto.core.utils.eventBroadcaster +package com.metacto.core.eventBroadcaster import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.GlobalScope diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/extensions/ActivityExtensions.kt b/core/core/src/androidMain/kotlin/com/metacto/core/extensions/ActivityExtensions.kt similarity index 89% rename from coreapp/src/androidMain/kotlin/com/metacto/core/utils/extensions/ActivityExtensions.kt rename to core/core/src/androidMain/kotlin/com/metacto/core/extensions/ActivityExtensions.kt index 5e36bf89..edf2ded8 100644 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/extensions/ActivityExtensions.kt +++ b/core/core/src/androidMain/kotlin/com/metacto/core/extensions/ActivityExtensions.kt @@ -1,13 +1,11 @@ -package com.metacto.core.utils.extensions +package com.metacto.core.extensions -import android.R.attr.fragment import android.annotation.SuppressLint import android.app.Activity import android.content.pm.ActivityInfo import androidx.annotation.IdRes import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentActivity -import androidx.lifecycle.viewmodel.compose.viewModel fun FragmentActivity.replaceFragment(@IdRes containerId: Int, fragment: Fragment) { supportFragmentManager diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/extensions/CommonExtensions.android.kt b/core/core/src/androidMain/kotlin/com/metacto/core/extensions/CommonExtensions.android.kt similarity index 78% rename from coreapp/src/androidMain/kotlin/com/metacto/core/utils/extensions/CommonExtensions.android.kt rename to core/core/src/androidMain/kotlin/com/metacto/core/extensions/CommonExtensions.android.kt index cca1adb7..2c151f79 100644 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/extensions/CommonExtensions.android.kt +++ b/core/core/src/androidMain/kotlin/com/metacto/core/extensions/CommonExtensions.android.kt @@ -1,9 +1,9 @@ -package com.metacto.core.utils.extensions +package com.metacto.core.extensions import android.util.LayoutDirection import androidx.core.text.layoutDirection -import com.metacto.core.utils.PlatformType -import com.metacto.core.utils.language.Language +import com.metacto.core.PlatformType +import com.metacto.core.language.Language import java.util.Locale import java.util.UUID diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/extensions/ContextExtensions.kt b/core/core/src/androidMain/kotlin/com/metacto/core/extensions/ContextExtensions.kt similarity index 98% rename from coreapp/src/androidMain/kotlin/com/metacto/core/utils/extensions/ContextExtensions.kt rename to core/core/src/androidMain/kotlin/com/metacto/core/extensions/ContextExtensions.kt index 621ac5b0..184a33de 100644 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/extensions/ContextExtensions.kt +++ b/core/core/src/androidMain/kotlin/com/metacto/core/extensions/ContextExtensions.kt @@ -1,4 +1,4 @@ -package com.metacto.core.utils.extensions +package com.metacto.core.extensions import android.annotation.SuppressLint import android.app.Activity @@ -11,7 +11,6 @@ import android.provider.Settings import android.widget.Toast import androidx.activity.ComponentActivity - fun Context.getActivity(): Activity? { return when (this) { is Activity -> this diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/extensions/IntentExtensions.kt b/core/core/src/androidMain/kotlin/com/metacto/core/extensions/IntentExtensions.kt similarity index 97% rename from coreapp/src/androidMain/kotlin/com/metacto/core/utils/extensions/IntentExtensions.kt rename to core/core/src/androidMain/kotlin/com/metacto/core/extensions/IntentExtensions.kt index cbc487b1..e4113d33 100644 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/extensions/IntentExtensions.kt +++ b/core/core/src/androidMain/kotlin/com/metacto/core/extensions/IntentExtensions.kt @@ -1,4 +1,4 @@ -package com.metacto.core.utils.extensions +package com.metacto.core.extensions import android.content.Intent import android.os.Build diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/extensions/NumberExtensions.android.kt b/core/core/src/androidMain/kotlin/com/metacto/core/extensions/NumberExtensions.android.kt similarity index 95% rename from coreapp/src/androidMain/kotlin/com/metacto/core/utils/extensions/NumberExtensions.android.kt rename to core/core/src/androidMain/kotlin/com/metacto/core/extensions/NumberExtensions.android.kt index 083c6185..bc3e585d 100644 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/extensions/NumberExtensions.android.kt +++ b/core/core/src/androidMain/kotlin/com/metacto/core/extensions/NumberExtensions.android.kt @@ -1,4 +1,4 @@ -package com.metacto.core.utils.extensions +package com.metacto.core.extensions import java.text.DecimalFormat import java.util.Locale diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/presentation/base/CoreViewModel.android.kt b/core/core/src/androidMain/kotlin/com/metacto/core/extensions/ThrowableExtensions.android.kt similarity index 54% rename from coreapp/src/androidMain/kotlin/com/metacto/core/presentation/base/CoreViewModel.android.kt rename to core/core/src/androidMain/kotlin/com/metacto/core/extensions/ThrowableExtensions.android.kt index 9ef316b5..60dd3303 100644 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/presentation/base/CoreViewModel.android.kt +++ b/core/core/src/androidMain/kotlin/com/metacto/core/extensions/ThrowableExtensions.android.kt @@ -1,7 +1,6 @@ -package com.metacto.core.presentation.base +package com.metacto.core.extensions -import com.metacto.core.CoreEnvironment -import com.metacto.strapikmm.errorhandling.AppException +import com.metacto.kmm.network.errorhandling.AppException actual fun AppException.getErrorCode(): Int? { return this.errorCode @@ -16,9 +15,5 @@ actual fun AppException.getErrorBody(): String? { } actual fun AppException.getHttpErrorCode(): Int? { - return this.errorCode -} - -actual fun CoreEnvironment.getStoreId(): String { - return androidAppId + return this.httpErrorCode } \ No newline at end of file diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/language/LanguageManager.kt b/core/core/src/androidMain/kotlin/com/metacto/core/language/LanguageManager.kt similarity index 75% rename from coreapp/src/androidMain/kotlin/com/metacto/core/utils/language/LanguageManager.kt rename to core/core/src/androidMain/kotlin/com/metacto/core/language/LanguageManager.kt index 8a08c38a..7e5e56ca 100644 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/language/LanguageManager.kt +++ b/core/core/src/androidMain/kotlin/com/metacto/core/language/LanguageManager.kt @@ -1,13 +1,13 @@ -package com.metacto.core.utils.language +package com.metacto.core.language import android.os.LocaleList import androidx.compose.runtime.State import androidx.compose.runtime.mutableStateOf -import com.metacto.core.utils.extensions.getObject -import com.metacto.core.utils.extensions.getSystemLanguage -import com.metacto.core.utils.extensions.putObject -import com.metacto.core.utils.language.ILanguageManager.Companion.KEY_APP_LANG -import com.metacto.strapikmm.sharedpreference.KmmPreference +import com.metacto.core.extensions.getSystemLanguage +import com.metacto.core.language.ILanguageManager.Companion.KEY_APP_LANG +import com.metacto.kmm.sharedpreferences.KmmPreference +import com.metacto.kmm.sharedpreferences.getObject +import com.metacto.kmm.sharedpreferences.putObject import java.util.Locale class LanguageManager( diff --git a/core/core/src/commonMain/kotlin/com/metacto/core/CoreConfigs.kt b/core/core/src/commonMain/kotlin/com/metacto/core/CoreConfigs.kt new file mode 100644 index 00000000..d1e69b15 --- /dev/null +++ b/core/core/src/commonMain/kotlin/com/metacto/core/CoreConfigs.kt @@ -0,0 +1,21 @@ +package com.metacto.core + +import com.metacto.core.deepLink.DeepLinkParser +import com.metacto.kmm.logger.LogLevel +import com.metacto.kmm.network.constants.StrapiVersion +import io.ktor.client.HttpClientConfig + +typealias HttpClientConfiguration = HttpClientConfig<*>.() -> Unit + +data class CoreConfigs( + val storageName: String, + val baseUrl: String, + val logLevel: LogLevel, + val shouldShowActualErrorMessages: Boolean, + val appConfigurationExpirationInMinutes: Long, + val deepLinkParsers: Map = emptyMap(), + val strapiVersion: StrapiVersion = StrapiVersion.V5, + val forceUpdateRemoteConfigKey: String? = null, + val httpClientConfiguration: HttpClientConfiguration = {}, + val networkUserAgent: String? = null +) \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/domain/CoreConstants.kt b/core/core/src/commonMain/kotlin/com/metacto/core/CoreConstants.kt similarity index 88% rename from coreapp/src/commonMain/kotlin/com/metacto/core/domain/CoreConstants.kt rename to core/core/src/commonMain/kotlin/com/metacto/core/CoreConstants.kt index 43e66bcd..dc93f859 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/domain/CoreConstants.kt +++ b/core/core/src/commonMain/kotlin/com/metacto/core/CoreConstants.kt @@ -8,6 +8,5 @@ object CoreConstants { const val YEAR_MONTH_DAY_DATE_FORMAT = "yyyy-MM-dd" const val US_COUNTRY_CODE = "US" const val CACHED_REMOTE_CONFIGS = "CACHED_REMOTE_CONFIGS" - const val KEY_NOTIFICATION_ID = "KEY_NOTIFICATION_ID" const val KEYCHAIN_PREFERENCE_VERSION = "k_version" } \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/CountDownTimer.kt b/core/core/src/commonMain/kotlin/com/metacto/core/CountDownTimer.kt similarity index 98% rename from coreapp/src/commonMain/kotlin/com/metacto/core/utils/CountDownTimer.kt rename to core/core/src/commonMain/kotlin/com/metacto/core/CountDownTimer.kt index a77ed788..d8338463 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/CountDownTimer.kt +++ b/core/core/src/commonMain/kotlin/com/metacto/core/CountDownTimer.kt @@ -1,4 +1,4 @@ -package com.metacto.core.utils +package com.metacto.core import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/PlatformType.kt b/core/core/src/commonMain/kotlin/com/metacto/core/PlatformType.kt similarity index 61% rename from coreapp/src/commonMain/kotlin/com/metacto/core/utils/PlatformType.kt rename to core/core/src/commonMain/kotlin/com/metacto/core/PlatformType.kt index 45348ff2..8c3aa704 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/PlatformType.kt +++ b/core/core/src/commonMain/kotlin/com/metacto/core/PlatformType.kt @@ -1,4 +1,4 @@ -package com.metacto.core.utils +package com.metacto.core enum class PlatformType { ANDROID, diff --git a/core/core/src/commonMain/kotlin/com/metacto/core/date/CoreDate.kt b/core/core/src/commonMain/kotlin/com/metacto/core/date/CoreDate.kt new file mode 100644 index 00000000..5b0a1177 --- /dev/null +++ b/core/core/src/commonMain/kotlin/com/metacto/core/date/CoreDate.kt @@ -0,0 +1,14 @@ +package com.metacto.core.date + +import com.metacto.kmm.core.CommonSerializable +import kotlinx.datetime.LocalDate +import kotlinx.serialization.Serializable + +@Serializable(with = CoreDateSerializer::class) +expect class CoreDate( + value: LocalDate +) : CommonSerializable { + val value: LocalDate + + companion object +} \ No newline at end of file diff --git a/core/core/src/commonMain/kotlin/com/metacto/core/date/CoreDateSerializer.kt b/core/core/src/commonMain/kotlin/com/metacto/core/date/CoreDateSerializer.kt new file mode 100644 index 00000000..cdcd29cd --- /dev/null +++ b/core/core/src/commonMain/kotlin/com/metacto/core/date/CoreDateSerializer.kt @@ -0,0 +1,21 @@ +package com.metacto.core.date + +import kotlinx.datetime.LocalDate +import kotlinx.serialization.KSerializer +import kotlinx.serialization.descriptors.PrimitiveKind +import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor +import kotlinx.serialization.descriptors.SerialDescriptor +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder + +object CoreDateSerializer : KSerializer { + override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("CoreDate", PrimitiveKind.STRING) + + override fun serialize(encoder: Encoder, value: CoreDate) { + encoder.encodeString(value.value.toString()) + } + + override fun deserialize(decoder: Decoder): CoreDate { + return CoreDate(LocalDate.parse(decoder.decodeString())) + } +} \ No newline at end of file diff --git a/core/core/src/commonMain/kotlin/com/metacto/core/date/CoreDateTime.kt b/core/core/src/commonMain/kotlin/com/metacto/core/date/CoreDateTime.kt new file mode 100644 index 00000000..8e229c63 --- /dev/null +++ b/core/core/src/commonMain/kotlin/com/metacto/core/date/CoreDateTime.kt @@ -0,0 +1,12 @@ +package com.metacto.core.date + +import com.metacto.kmm.core.CommonSerializable +import kotlinx.datetime.LocalDateTime +import kotlinx.serialization.Serializable + +@Serializable(with = CoreDateTimeSerializer::class) +expect class CoreDateTime( + value: LocalDateTime +) : CommonSerializable { + val value: LocalDateTime +} \ No newline at end of file diff --git a/core/core/src/commonMain/kotlin/com/metacto/core/date/CoreDateTimeSerializer.kt b/core/core/src/commonMain/kotlin/com/metacto/core/date/CoreDateTimeSerializer.kt new file mode 100644 index 00000000..81b095d5 --- /dev/null +++ b/core/core/src/commonMain/kotlin/com/metacto/core/date/CoreDateTimeSerializer.kt @@ -0,0 +1,28 @@ +package com.metacto.core.date + +import kotlinx.datetime.Instant +import kotlinx.datetime.TimeZone +import kotlinx.datetime.toInstant +import kotlinx.datetime.toLocalDateTime +import kotlinx.serialization.KSerializer +import kotlinx.serialization.descriptors.PrimitiveKind +import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor +import kotlinx.serialization.descriptors.SerialDescriptor +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder + +object CoreDateTimeSerializer : KSerializer { + override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("CoreDateTime", PrimitiveKind.STRING) + + override fun serialize(encoder: Encoder, value: CoreDateTime) { + val instant = value.value.toInstant(TimeZone.UTC) + encoder.encodeString(instant.toString()) + } + + override fun deserialize(decoder: Decoder): CoreDateTime { + val isoString = decoder.decodeString() + val instant = Instant.parse(isoString) + return CoreDateTime(instant.toLocalDateTime(TimeZone.UTC)) + } +} \ No newline at end of file diff --git a/core/core/src/commonMain/kotlin/com/metacto/core/date/CoreTime.kt b/core/core/src/commonMain/kotlin/com/metacto/core/date/CoreTime.kt new file mode 100644 index 00000000..4a9d1d62 --- /dev/null +++ b/core/core/src/commonMain/kotlin/com/metacto/core/date/CoreTime.kt @@ -0,0 +1,14 @@ +package com.metacto.core.date + +import com.metacto.kmm.core.CommonSerializable +import kotlinx.datetime.LocalTime +import kotlinx.serialization.Serializable + +@Serializable(with = CoreTimeSerializer::class) +expect class CoreTime( + value: LocalTime +) : CommonSerializable { + val value: LocalTime + + companion object +} \ No newline at end of file diff --git a/core/core/src/commonMain/kotlin/com/metacto/core/date/CoreTimeSerializer.kt b/core/core/src/commonMain/kotlin/com/metacto/core/date/CoreTimeSerializer.kt new file mode 100644 index 00000000..260777fe --- /dev/null +++ b/core/core/src/commonMain/kotlin/com/metacto/core/date/CoreTimeSerializer.kt @@ -0,0 +1,21 @@ +package com.metacto.core.date + +import kotlinx.datetime.LocalTime +import kotlinx.serialization.KSerializer +import kotlinx.serialization.descriptors.PrimitiveKind +import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor +import kotlinx.serialization.descriptors.SerialDescriptor +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder + +object CoreTimeSerializer : KSerializer { + override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("CoreTime", PrimitiveKind.STRING) + + override fun serialize(encoder: Encoder, value: CoreTime) { + encoder.encodeString(value.value.toString()) + } + + override fun deserialize(decoder: Decoder): CoreTime { + return CoreTime(LocalTime.parse(decoder.decodeString())) + } +} \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/date/DateTimeUtils.kt b/core/core/src/commonMain/kotlin/com/metacto/core/date/DateTimeUtils.kt similarity index 51% rename from coreapp/src/commonMain/kotlin/com/metacto/core/utils/date/DateTimeUtils.kt rename to core/core/src/commonMain/kotlin/com/metacto/core/date/DateTimeUtils.kt index f31da0c7..ba8f34ad 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/date/DateTimeUtils.kt +++ b/core/core/src/commonMain/kotlin/com/metacto/core/date/DateTimeUtils.kt @@ -1,6 +1,6 @@ -package com.metacto.core.utils.date +package com.metacto.core.date -import com.metacto.core.utils.extensions.getSystemLanguage +import com.metacto.core.extensions.getSystemLanguage import kotlinx.datetime.Clock import kotlinx.datetime.Instant import kotlinx.datetime.LocalDate @@ -47,6 +47,71 @@ fun LocalDate.isPast(): Boolean { return this < LocalDate.now() } +fun CoreDateTime.toMillis(timeZone: TimeZone = TimeZone.currentSystemDefault()): Long { + return this.value.toMillis(timeZone) +} + +fun CoreDateTime.format( + format: String, + langCode: String = getSystemLanguage().code +): String { + return this.value.format(format, langCode) +} + +fun CoreDateTime.formatToRelativeDate(): String { + return this.value.formatToRelativeDate() +} + +fun CoreDateTime.Companion.now(timeZone: TimeZone = TimeZone.currentSystemDefault()): CoreDateTime { + return CoreDateTime(LocalDateTime.now(timeZone)) +} + +fun Long.toCoreDateTime(timeZone: TimeZone = TimeZone.currentSystemDefault()): CoreDateTime { + return CoreDateTime(this.toLocalDateTime(timeZone)) +} + +fun CoreDate.toMillis(timeZone: TimeZone = TimeZone.currentSystemDefault()): Long { + return this.value.toMillis(timeZone) +} + +fun CoreDate.format( + format: String, + langCode: String = getSystemLanguage().code +): String { + return this.value.format(format, langCode) +} + +fun CoreDate.formatToRelativeDate(): String { + return this.value.formatToRelativeDate() +} + +fun CoreDate.isPast(): Boolean { + return this.value.isPast() +} + +fun CoreDate.Companion.now(timeZone: TimeZone = TimeZone.currentSystemDefault()): CoreDate { + return CoreDate(LocalDate.now(timeZone)) +} + +fun Long.toCoreDate(timeZone: TimeZone = TimeZone.currentSystemDefault()): CoreDate { + return CoreDate(this.toLocalDate(timeZone)) +} + +fun CoreTime.format( + format: String, + langCode: String = getSystemLanguage().code +): String { + return this.value.format(format, langCode) +} + +fun CoreTime.Companion.now(timeZone: TimeZone = TimeZone.currentSystemDefault()): CoreTime { + return CoreTime(LocalTime.now(timeZone)) +} + +fun Long.toCoreTime(timeZone: TimeZone = TimeZone.currentSystemDefault()): CoreTime { + return CoreTime(this.toLocalTime(timeZone)) +} + expect fun LocalDateTime.format( format: String, langCode: String = getSystemLanguage().code @@ -77,6 +142,6 @@ expect fun String.parseLocalTime( langCode: String = getSystemLanguage().code ): LocalTime? -expect fun LocalDate.formatToRelativeDate(): String +expect fun LocalDate.formatToRelativeDate(timeZone: TimeZone = TimeZone.currentSystemDefault()): String -expect fun LocalDateTime.formatToRelativeDate(): String \ No newline at end of file +expect fun LocalDateTime.formatToRelativeDate(timeZone: TimeZone = TimeZone.currentSystemDefault()): String diff --git a/core/core/src/commonMain/kotlin/com/metacto/core/date/LocalDateTimeSerializer.kt b/core/core/src/commonMain/kotlin/com/metacto/core/date/LocalDateTimeSerializer.kt new file mode 100644 index 00000000..bd3f6491 --- /dev/null +++ b/core/core/src/commonMain/kotlin/com/metacto/core/date/LocalDateTimeSerializer.kt @@ -0,0 +1,29 @@ +package com.metacto.core.date + +import kotlinx.datetime.Instant +import kotlinx.datetime.LocalDateTime +import kotlinx.datetime.TimeZone +import kotlinx.datetime.toInstant +import kotlinx.datetime.toLocalDateTime +import kotlinx.serialization.KSerializer +import kotlinx.serialization.descriptors.PrimitiveKind +import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor +import kotlinx.serialization.descriptors.SerialDescriptor +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder + +object LocalDateTimeSerializer : KSerializer { + override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("LocalDateTime", PrimitiveKind.STRING) + + override fun serialize(encoder: Encoder, value: LocalDateTime) { + val instant = value.toInstant(TimeZone.Companion.UTC) + encoder.encodeString(instant.toString()) + } + + override fun deserialize(decoder: Decoder): LocalDateTime { + val isoString = decoder.decodeString() + val instant = Instant.Companion.parse(isoString) + return instant.toLocalDateTime(TimeZone.Companion.UTC) + } +} \ No newline at end of file diff --git a/core/core/src/commonMain/kotlin/com/metacto/core/deepLink/DeepLink.kt b/core/core/src/commonMain/kotlin/com/metacto/core/deepLink/DeepLink.kt new file mode 100644 index 00000000..ca7b922e --- /dev/null +++ b/core/core/src/commonMain/kotlin/com/metacto/core/deepLink/DeepLink.kt @@ -0,0 +1,5 @@ +package com.metacto.core.deepLink + +import com.metacto.kmm.core.CommonSerializable + +open class DeepLink : CommonSerializable \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/deepLink/DeepLinkManager.kt b/core/core/src/commonMain/kotlin/com/metacto/core/deepLink/DeepLinkManager.kt similarity index 82% rename from coreapp/src/commonMain/kotlin/com/metacto/core/utils/deepLink/DeepLinkManager.kt rename to core/core/src/commonMain/kotlin/com/metacto/core/deepLink/DeepLinkManager.kt index f4e2992c..bcd5c211 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/deepLink/DeepLinkManager.kt +++ b/core/core/src/commonMain/kotlin/com/metacto/core/deepLink/DeepLinkManager.kt @@ -1,7 +1,7 @@ -package com.metacto.core.utils.deepLink +package com.metacto.core.deepLink -import com.metacto.core.utils.extensions.matchWithWildcard -import com.metacto.strapikmm.util.Logger +import com.metacto.core.extensions.matchWithWildcard +import com.metacto.kmm.logger.Logger import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.collectLatest @@ -12,12 +12,6 @@ internal class DeepLinkManager( ) : IDeepLinkManager { private val deepLinksFlow = MutableSharedFlow(replay = 1) - override fun emitDynamicLink(link: String) { - DynamicLinkProcessor.process(link) { - validAndParseDeepLink(it) - } - } - override fun emitDeepLink(link: String) { validAndParseDeepLink(link) } diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/deepLink/DeepLinkParser.kt b/core/core/src/commonMain/kotlin/com/metacto/core/deepLink/DeepLinkParser.kt similarity index 62% rename from coreapp/src/commonMain/kotlin/com/metacto/core/utils/deepLink/DeepLinkParser.kt rename to core/core/src/commonMain/kotlin/com/metacto/core/deepLink/DeepLinkParser.kt index 106ceda2..989ac2b3 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/deepLink/DeepLinkParser.kt +++ b/core/core/src/commonMain/kotlin/com/metacto/core/deepLink/DeepLinkParser.kt @@ -1,4 +1,4 @@ -package com.metacto.core.utils.deepLink +package com.metacto.core.deepLink interface DeepLinkParser { fun parse(url: String): DeepLink? diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/deepLink/IDeepLinkManager.kt b/core/core/src/commonMain/kotlin/com/metacto/core/deepLink/IDeepLinkManager.kt similarity index 68% rename from coreapp/src/commonMain/kotlin/com/metacto/core/utils/deepLink/IDeepLinkManager.kt rename to core/core/src/commonMain/kotlin/com/metacto/core/deepLink/IDeepLinkManager.kt index ec7ba9ab..33faf436 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/deepLink/IDeepLinkManager.kt +++ b/core/core/src/commonMain/kotlin/com/metacto/core/deepLink/IDeepLinkManager.kt @@ -1,9 +1,8 @@ -package com.metacto.core.utils.deepLink +package com.metacto.core.deepLink val Class = IDeepLinkManager::class interface IDeepLinkManager { fun emitDeepLink(link: String) - fun emitDynamicLink(link: String) suspend fun observeDeepLinks(callback: (DeepLink) -> Unit) } \ No newline at end of file diff --git a/core/core/src/commonMain/kotlin/com/metacto/core/di/Di.kt b/core/core/src/commonMain/kotlin/com/metacto/core/di/Di.kt new file mode 100644 index 00000000..dc7152f8 --- /dev/null +++ b/core/core/src/commonMain/kotlin/com/metacto/core/di/Di.kt @@ -0,0 +1,77 @@ +package com.metacto.core.di + +import com.metacto.core.CoreConfigs +import com.metacto.core.deepLink.DeepLinkManager +import com.metacto.core.deepLink.IDeepLinkManager +import com.metacto.core.domain.repos.ApiErrorHandling +import com.metacto.core.domain.repos.RepositoriesFactory +import com.metacto.core.domain.repos.UploadRepository +import com.metacto.kmm.logger.Logger +import com.metacto.kmm.network.constants.StrapiVersion +import com.metacto.kmm.network.errorhandling.SerializableNetworkError +import com.metacto.kmm.network.repos.CoreFirebaseAuthRepository +import com.metacto.kmm.network.repos.CoreLogoutUseCase +import com.metacto.kmm.network.repos.CoreUploaderRepository +import com.metacto.kmm.network.repos.CoreUserRepository +import org.koin.core.module.Module +import org.koin.dsl.module +import kotlin.reflect.KClass + +fun coreModule(configs: CoreConfigs, errorClass: KClass) = + coreModule(configs, ApiErrorHandling.Declared(errorClass)) + +fun coreModule(configs: CoreConfigs, errorHandling: ApiErrorHandling) = module { + // Common dependencies can be added here + + includes(platformModule(errorHandling)) + + single { + configs + } + + single { + get>().httpService + } + + single { + get>().sharedPreference + } + + single { + CoreUserRepository( + userService = get(), + sharedPreference = get(), + logoutUseCase = get(), + enforceDefaultDataWrapper = configs.strapiVersion == StrapiVersion.V5 + ) + } + + single { + CoreFirebaseAuthRepository(get(), get(), get(), configs.strapiVersion) + } + + single { + CoreUploaderRepository(get()) + } + + single { + UploadRepository(get(), get(), get()) + } + + single { + CoreLogoutUseCase(get()) + } + + single { + Logger("") + } + + single { + DeepLinkManager( + appLogger = get(), + parsers = configs.deepLinkParsers + ) + } +} + +internal expect fun platformModule(errorHandling: ApiErrorHandling): Module \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/domain/models/JwtPayload.kt b/core/core/src/commonMain/kotlin/com/metacto/core/domain/models/JwtPayload.kt similarity index 100% rename from coreapp/src/commonMain/kotlin/com/metacto/core/domain/models/JwtPayload.kt rename to core/core/src/commonMain/kotlin/com/metacto/core/domain/models/JwtPayload.kt diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/domain/models/request/UpdatePreviewUrlRequest.kt b/core/core/src/commonMain/kotlin/com/metacto/core/domain/models/request/UpdatePreviewUrlRequest.kt similarity index 100% rename from coreapp/src/commonMain/kotlin/com/metacto/core/domain/models/request/UpdatePreviewUrlRequest.kt rename to core/core/src/commonMain/kotlin/com/metacto/core/domain/models/request/UpdatePreviewUrlRequest.kt diff --git a/core/core/src/commonMain/kotlin/com/metacto/core/domain/repos/ApiErrorHandling.kt b/core/core/src/commonMain/kotlin/com/metacto/core/domain/repos/ApiErrorHandling.kt new file mode 100644 index 00000000..4b02632c --- /dev/null +++ b/core/core/src/commonMain/kotlin/com/metacto/core/domain/repos/ApiErrorHandling.kt @@ -0,0 +1,33 @@ +package com.metacto.core.domain.repos + +import com.metacto.kmm.network.HttpClientConfiguration +import com.metacto.kmm.network.KtorClientFactory +import com.metacto.kmm.network.ServerErrorMapper +import com.metacto.kmm.network.errorhandling.SerializableNetworkError +import io.ktor.client.HttpClient +import kotlinx.serialization.KSerializer +import kotlin.reflect.KClass + +sealed interface ApiErrorHandling { + + fun buildClient(factory: KtorClientFactory, configure: HttpClientConfiguration): HttpClient + + data class Declared( + val errorClass: KClass + ) : ApiErrorHandling { + override fun buildClient(factory: KtorClientFactory, configure: HttpClientConfiguration) = + factory.build(errorClass = errorClass, configure = configure) + } + + data class Mapped( + val serializer: KSerializer, + val toException: ServerErrorMapper + ) : ApiErrorHandling { + override fun buildClient(factory: KtorClientFactory, configure: HttpClientConfiguration) = + factory.build( + errorSerializer = serializer, + toException = toException, + configure = configure + ) + } +} diff --git a/core/core/src/commonMain/kotlin/com/metacto/core/domain/repos/RepositoriesFactory.kt b/core/core/src/commonMain/kotlin/com/metacto/core/domain/repos/RepositoriesFactory.kt new file mode 100644 index 00000000..3b666fc6 --- /dev/null +++ b/core/core/src/commonMain/kotlin/com/metacto/core/domain/repos/RepositoriesFactory.kt @@ -0,0 +1,15 @@ +package com.metacto.core.domain.repos + +import com.metacto.core.CoreConfigs +import com.metacto.kmm.network.services.HttpService +import com.metacto.kmm.sharedpreferences.KmmPreference + +expect open class RepositoriesFactory { + val sharedPreference: KmmPreference + val httpService: HttpService + val coreConfigs: CoreConfigs + val appStorageName: String + val shouldShowActualErrorMessages: Boolean + val networkUserAgent: String? + val errorHandling: ApiErrorHandling +} diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/domain/repos/UploadRepository.kt b/core/core/src/commonMain/kotlin/com/metacto/core/domain/repos/UploadRepository.kt similarity index 67% rename from coreapp/src/commonMain/kotlin/com/metacto/core/domain/repos/UploadRepository.kt rename to core/core/src/commonMain/kotlin/com/metacto/core/domain/repos/UploadRepository.kt index 5e78be65..0f2ae05b 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/domain/repos/UploadRepository.kt +++ b/core/core/src/commonMain/kotlin/com/metacto/core/domain/repos/UploadRepository.kt @@ -1,15 +1,15 @@ package com.metacto.core.domain.repos -import com.metacto.core.CoreEnvironment +import com.metacto.core.CoreConfigs import com.metacto.core.domain.models.request.UpdatePreviewUrlRequest import com.metacto.core.domain.models.request.UpdatePreviewUrlRequestData -import com.metacto.core.utils.extensions.randomUUID -import com.metacto.strapikmm.constants.SharedConstants -import com.metacto.strapikmm.datasource.network.services.strapi.JsonFlatter -import com.metacto.strapikmm.datasource.network.services.strapi.StrapiService -import com.metacto.strapikmm.datasource.network.services.strapi.convert -import com.metacto.strapikmm.model.image.Image -import com.metacto.strapikmm.sharedpreference.KmmPreference +import com.metacto.core.extensions.randomUUID +import com.metacto.kmm.network.JsonFlatter +import com.metacto.kmm.network.constants.SharedConstants +import com.metacto.kmm.network.model.media.Media +import com.metacto.kmm.network.services.HttpService +import com.metacto.kmm.network.services.convert +import com.metacto.kmm.sharedpreferences.KmmPreference import io.ktor.client.call.body import io.ktor.client.request.forms.formData import io.ktor.client.request.forms.submitFormWithBinaryData @@ -22,15 +22,16 @@ import kotlinx.serialization.json.JsonArray import kotlinx.serialization.json.jsonObject class UploadRepository( - private val appEnvironment: CoreEnvironment, - private val uploadService: StrapiService, + private val coreConfigs: CoreConfigs, + private val httpService: HttpService, private val sharedPreference: KmmPreference ) { @Throws(Throwable::class) - suspend fun uploadImage(bytes: ByteArray, fileName: String = randomUUID()): Image { + suspend fun uploadImage(bytes: ByteArray, fileName: String = randomUUID()): Media { return uploadMedia( bytes = bytes, - fileName = "$fileName.jpg" + fileName = "$fileName.jpg", + contentType = "image/jpeg" ) } @@ -39,10 +40,11 @@ class UploadRepository( bytes: ByteArray, fileName: String = randomUUID(), previewUrl: String? = null - ): Image { + ): Media { val video = uploadMedia( bytes = bytes, - fileName = "$fileName.mp4" + fileName = "$fileName.mp4", + contentType = "video/mp4" ) if (previewUrl != null && video.id != null) { @@ -53,16 +55,21 @@ class UploadRepository( } @Throws(Throwable::class) - private suspend fun uploadMedia(bytes: ByteArray, fileName: String): Image { + private suspend fun uploadMedia( + bytes: ByteArray, + fileName: String, + contentType: String + ): Media { val token = sharedPreference.getSecureString(SharedConstants.ACCESS_TOKEN) - val response = uploadService.httpClient.submitFormWithBinaryData( - url = "${appEnvironment.baseUrl}/upload", + val response = httpService.httpClient.submitFormWithBinaryData( + url = "${coreConfigs.baseUrl}/upload", formData = formData { append( "files", bytes, Headers.build { append(HttpHeaders.ContentDisposition, "filename=$fileName") + append(HttpHeaders.ContentType, contentType) append(HttpHeaders.Authorization, "Bearer $token") } ) @@ -70,12 +77,12 @@ class UploadRepository( ) val responseContent = ((response.body() as JsonArray)[0].jsonObject) - return JsonFlatter.flat(responseContent).convert() + return JsonFlatter.flat(responseContent).convert() } @Throws(Throwable::class) suspend fun updateVideoPreviewUrl(id: Int, previewUrl: String) { - uploadService.put { + httpService.put { endpoint("/custom-uploader/{id}") path("id", id.toString()) body(UpdatePreviewUrlRequest(UpdatePreviewUrlRequestData(previewUrl))) @@ -87,7 +94,7 @@ class UploadRepository( headers: Map> = emptyMap() ): ByteArray? { return try { - val response: HttpResponse = uploadService.httpClient.get(url) { + val response: HttpResponse = httpService.httpClient.get(url) { headers.forEach { (key, value) -> header(key, value) } } response.body() diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/eventBroadcaster/EventBroadcaster.kt b/core/core/src/commonMain/kotlin/com/metacto/core/eventBroadcaster/EventBroadcaster.kt similarity index 81% rename from coreapp/src/commonMain/kotlin/com/metacto/core/utils/eventBroadcaster/EventBroadcaster.kt rename to core/core/src/commonMain/kotlin/com/metacto/core/eventBroadcaster/EventBroadcaster.kt index a8485f57..c8b18666 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/eventBroadcaster/EventBroadcaster.kt +++ b/core/core/src/commonMain/kotlin/com/metacto/core/eventBroadcaster/EventBroadcaster.kt @@ -1,4 +1,4 @@ -package com.metacto.core.utils.eventBroadcaster +package com.metacto.core.eventBroadcaster val Class = EventBroadcaster::class diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/extensions/BooleanExtensions.kt b/core/core/src/commonMain/kotlin/com/metacto/core/extensions/BooleanExtensions.kt similarity index 76% rename from coreapp/src/commonMain/kotlin/com/metacto/core/utils/extensions/BooleanExtensions.kt rename to core/core/src/commonMain/kotlin/com/metacto/core/extensions/BooleanExtensions.kt index 386d4699..6630edc6 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/extensions/BooleanExtensions.kt +++ b/core/core/src/commonMain/kotlin/com/metacto/core/extensions/BooleanExtensions.kt @@ -1,4 +1,4 @@ -package com.metacto.core.utils.extensions +package com.metacto.core.extensions fun Boolean?.orFalse() = this ?: false diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/extensions/CommonExtensions.kt b/core/core/src/commonMain/kotlin/com/metacto/core/extensions/CommonExtensions.kt similarity index 64% rename from coreapp/src/commonMain/kotlin/com/metacto/core/utils/extensions/CommonExtensions.kt rename to core/core/src/commonMain/kotlin/com/metacto/core/extensions/CommonExtensions.kt index bf8668dc..6ca33b55 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/extensions/CommonExtensions.kt +++ b/core/core/src/commonMain/kotlin/com/metacto/core/extensions/CommonExtensions.kt @@ -1,7 +1,7 @@ -package com.metacto.core.utils.extensions +package com.metacto.core.extensions -import com.metacto.core.utils.PlatformType -import com.metacto.core.utils.language.Language +import com.metacto.core.PlatformType +import com.metacto.core.language.Language import kotlinx.coroutines.CancellableContinuation import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineStart @@ -9,6 +9,14 @@ import kotlinx.coroutines.Deferred import kotlinx.coroutines.async import kotlin.coroutines.CoroutineContext import kotlin.coroutines.EmptyCoroutineContext +import kotlin.coroutines.resume +import kotlin.coroutines.resumeWithException + +fun T.applyIf(condition: Boolean, block: T.() -> Unit): T { + return apply { + if (condition) block() + } +} fun ifTrue(expression: Boolean, block: () -> R): R? { return if (expression) block() else null @@ -35,6 +43,14 @@ fun CoroutineScope.asyncIf( } } +fun CancellableContinuation.resumeIfActive(value: T) { + if (isActive) resume(value) +} + +fun CancellableContinuation<*>.exceptionIfActive(throwable: Throwable) { + if (isActive) resumeWithException(throwable) +} + expect fun getPlatformType(): PlatformType expect fun randomUUID(): String diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/extensions/ListExtensions.kt b/core/core/src/commonMain/kotlin/com/metacto/core/extensions/ListExtensions.kt similarity index 98% rename from coreapp/src/commonMain/kotlin/com/metacto/core/utils/extensions/ListExtensions.kt rename to core/core/src/commonMain/kotlin/com/metacto/core/extensions/ListExtensions.kt index 39b9bd85..0dfa1a27 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/extensions/ListExtensions.kt +++ b/core/core/src/commonMain/kotlin/com/metacto/core/extensions/ListExtensions.kt @@ -1,4 +1,4 @@ -package com.metacto.core.utils.extensions +package com.metacto.core.extensions import kotlin.math.abs import kotlin.random.Random diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/extensions/MapExtensions.kt b/core/core/src/commonMain/kotlin/com/metacto/core/extensions/MapExtensions.kt similarity index 92% rename from coreapp/src/commonMain/kotlin/com/metacto/core/utils/extensions/MapExtensions.kt rename to core/core/src/commonMain/kotlin/com/metacto/core/extensions/MapExtensions.kt index 128a2338..2224604d 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/extensions/MapExtensions.kt +++ b/core/core/src/commonMain/kotlin/com/metacto/core/extensions/MapExtensions.kt @@ -1,4 +1,4 @@ -package com.metacto.core.utils.extensions +package com.metacto.core.extensions import kotlinx.serialization.json.Json import kotlinx.serialization.json.JsonObject diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/extensions/NumberExtensions.kt b/core/core/src/commonMain/kotlin/com/metacto/core/extensions/NumberExtensions.kt similarity index 78% rename from coreapp/src/commonMain/kotlin/com/metacto/core/utils/extensions/NumberExtensions.kt rename to core/core/src/commonMain/kotlin/com/metacto/core/extensions/NumberExtensions.kt index 8a9afe8c..7e2ccbef 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/extensions/NumberExtensions.kt +++ b/core/core/src/commonMain/kotlin/com/metacto/core/extensions/NumberExtensions.kt @@ -1,7 +1,5 @@ -package com.metacto.core.utils.extensions +package com.metacto.core.extensions -import androidx.compose.ui.unit.Dp -import androidx.compose.ui.unit.dp import kotlin.math.pow import kotlin.random.Random @@ -84,8 +82,6 @@ private fun Int.formatSecondsTime(): String { fun Int.isMoreThanOne() = this > 1 -fun Dp?.orZero() = this ?: 0.dp - fun Double.truncate(decimalsCount: Int): Double { val multiplier = 10.0.pow(decimalsCount.toDouble()) return (this * multiplier).toInt() / multiplier @@ -169,6 +165,44 @@ fun Float.toFeetInches(): String { return "$feet'${inches}" } +fun Int.to2DigitsFormat(): String { + return if (this < 10) "0$this" else this.toString() +} + +fun Int.formatThousands(): String { + return toString() + .split('.') + .let { parts -> + val integerPart = parts[0].reversed().chunked(3).joinToString(",").reversed() + val decimalPart = if (parts.size > 1) ".${parts[1]}" else "" + integerPart + decimalPart + } +} + +fun Int.formatCount(): String { + return when { + this < 1_000 -> this.toString() + this < 1_000_000 -> formatWithSuffix(this, 1_000, "k") + this < 1_000_000_000 -> formatWithSuffix(this, 1_000_000, "M") + else -> formatWithSuffix(this, 1_000_000_000, "B") + } +} + +private fun formatWithSuffix(value: Int, divisor: Int, suffix: String): String { + val shouldShowDecimal = value < divisor * 10 + + return if (shouldShowDecimal) { + val decimal = (value / (divisor / 10)) / 10.0 + if (decimal % 1 == 0.0) { + "${decimal.toInt()}$suffix" + } else { + "$decimal$suffix" + } + } else { + "${value / divisor}$suffix" + } +} + expect fun Double.format(decimalsCount: Int): String expect fun Double.formatToComma(maxFractionCount: Int = 0): String diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/extensions/StringExtensions.kt b/core/core/src/commonMain/kotlin/com/metacto/core/extensions/StringExtensions.kt similarity index 90% rename from coreapp/src/commonMain/kotlin/com/metacto/core/utils/extensions/StringExtensions.kt rename to core/core/src/commonMain/kotlin/com/metacto/core/extensions/StringExtensions.kt index f033d701..aaa55bf8 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/extensions/StringExtensions.kt +++ b/core/core/src/commonMain/kotlin/com/metacto/core/extensions/StringExtensions.kt @@ -1,10 +1,8 @@ -package com.metacto.core.utils.extensions +package com.metacto.core.extensions -import androidx.compose.ui.text.AnnotatedString -import androidx.compose.ui.text.buildAnnotatedString import com.metacto.core.domain.models.JwtPayload +import io.ktor.util.decodeBase64String import kotlinx.serialization.json.Json -import okio.ByteString.Companion.decodeBase64 fun String.format(vararg args: Any): String { var formattedString = this @@ -133,17 +131,6 @@ fun String.formatWithMask(mask: String, maskChar: Char): String { } } -fun AnnotatedString.formatWithMask(mask: String, maskChar: Char): AnnotatedString { - return buildAnnotatedString { - val formatted = text.formatWithMask( - mask = mask, - maskChar = maskChar - ) - - append(formatted) - } -} - fun String.removeLastChar(): String { if (this.isEmpty()) { return this @@ -151,14 +138,6 @@ fun String.removeLastChar(): String { return this.substring(0, this.length - 1) } -fun CharSequence.toAnnotatedString(): AnnotatedString { - return AnnotatedString(this.toString()) -} - -fun AnnotatedString.filterDigits(): AnnotatedString { - return this.filter { it.isDigit() }.toAnnotatedString() -} - fun String.asInt(): Int { return try { this.toInt() @@ -216,18 +195,6 @@ fun String.isValidUrl(): Boolean { return Regex(pattern).matches(this) } -fun String.decodeJwt(): JwtPayload? { - return try { - val parts = this.split(".") - val payloadBase64 = parts.getOrNull(1) - val decodedPayload = payloadBase64?.decodeBase64()?.utf8() ?: return null - val json = Json { ignoreUnknownKeys = true } - return json.decodeFromString(decodedPayload) - } catch (_: Throwable) { - null - } -} - fun String.isLocalFile(): Boolean { return startsWith("file://") || startsWith("/") } @@ -275,4 +242,16 @@ fun String.cleanHtml(): String { .split("\n") .joinToString("\n") { it.trimStart() } // Join lines back .trim() +} + +fun String.decodeJwt(): JwtPayload? { + return try { + val parts = this.split(".") + val payloadBase64 = parts.getOrNull(1) + val decodedPayload = payloadBase64?.decodeBase64String() ?: return null + val json = Json { ignoreUnknownKeys = true } + return json.decodeFromString(decodedPayload) + } catch (_: Throwable) { + null + } } \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/extensions/ThrowableExtensions.kt b/core/core/src/commonMain/kotlin/com/metacto/core/extensions/ThrowableExtensions.kt similarity index 59% rename from coreapp/src/commonMain/kotlin/com/metacto/core/utils/extensions/ThrowableExtensions.kt rename to core/core/src/commonMain/kotlin/com/metacto/core/extensions/ThrowableExtensions.kt index fe6d3137..7faf582b 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/extensions/ThrowableExtensions.kt +++ b/core/core/src/commonMain/kotlin/com/metacto/core/extensions/ThrowableExtensions.kt @@ -1,10 +1,14 @@ -package com.metacto.core.utils.extensions +package com.metacto.core.extensions -import com.metacto.core.presentation.base.getErrorCode -import com.metacto.strapikmm.errorhandling.AppException -import com.metacto.strapikmm.errorhandling.NetworkMapperConstants +import com.metacto.kmm.network.errorhandling.AppException +import com.metacto.kmm.network.errorhandling.NetworkMapperConstants -val INTERNET_ERROR_RANGE = -1000 downTo -1005 +expect fun AppException.getHttpErrorCode(): Int? +expect fun AppException.getErrorCode(): Int? +expect fun AppException.getErrorMessage(): String? +expect fun AppException.getErrorBody(): String? + +private val INTERNET_ERROR_RANGE = -1000 downTo -1005 const val NETWORK_CONNECTION_LOST = "network connection was lost" fun Throwable.isInternetConnectionError(): Boolean { diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/language/ILanguageManager.kt b/core/core/src/commonMain/kotlin/com/metacto/core/language/ILanguageManager.kt similarity index 90% rename from coreapp/src/commonMain/kotlin/com/metacto/core/utils/language/ILanguageManager.kt rename to core/core/src/commonMain/kotlin/com/metacto/core/language/ILanguageManager.kt index 528fc0e8..5de49f79 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/language/ILanguageManager.kt +++ b/core/core/src/commonMain/kotlin/com/metacto/core/language/ILanguageManager.kt @@ -1,4 +1,4 @@ -package com.metacto.core.utils.language +package com.metacto.core.language import androidx.compose.runtime.State diff --git a/core/core/src/commonMain/kotlin/com/metacto/core/language/Language.kt b/core/core/src/commonMain/kotlin/com/metacto/core/language/Language.kt new file mode 100644 index 00000000..f0e2a860 --- /dev/null +++ b/core/core/src/commonMain/kotlin/com/metacto/core/language/Language.kt @@ -0,0 +1,20 @@ +package com.metacto.core.language + +import com.metacto.kmm.core.CommonParcelable +import com.metacto.kmm.core.CommonParcelize + +@CommonParcelize +data class Language( + val code: String = "", + val name: String = "", + val isRtl: Boolean = false +) : CommonParcelable { + companion object +} + +val Language.Companion.English: Language + get() = Language( + code = "en", + name = "English", + isRtl = false + ) \ No newline at end of file diff --git a/core/core/src/iosMain/kotlin/com/metacto/core/date/CoreDate.kt b/core/core/src/iosMain/kotlin/com/metacto/core/date/CoreDate.kt new file mode 100644 index 00000000..292f1b2c --- /dev/null +++ b/core/core/src/iosMain/kotlin/com/metacto/core/date/CoreDate.kt @@ -0,0 +1,13 @@ +package com.metacto.core.date + +import com.metacto.kmm.core.CommonSerializable +import kotlinx.datetime.LocalDate +import kotlinx.serialization.Serializable + +@Serializable(with = CoreDateSerializer::class) +actual data class CoreDate actual constructor( + actual val value: LocalDate +) : CommonSerializable { + + actual companion object +} \ No newline at end of file diff --git a/core/core/src/iosMain/kotlin/com/metacto/core/date/CoreDateTime.kt b/core/core/src/iosMain/kotlin/com/metacto/core/date/CoreDateTime.kt new file mode 100644 index 00000000..804a3d53 --- /dev/null +++ b/core/core/src/iosMain/kotlin/com/metacto/core/date/CoreDateTime.kt @@ -0,0 +1,10 @@ +package com.metacto.core.date + +import com.metacto.kmm.core.CommonSerializable +import kotlinx.datetime.LocalDateTime +import kotlinx.serialization.Serializable + +@Serializable(with = CoreDateTimeSerializer::class) +actual data class CoreDateTime actual constructor( + actual val value: LocalDateTime +) : CommonSerializable \ No newline at end of file diff --git a/core/core/src/iosMain/kotlin/com/metacto/core/date/CoreTime.kt b/core/core/src/iosMain/kotlin/com/metacto/core/date/CoreTime.kt new file mode 100644 index 00000000..b809b80c --- /dev/null +++ b/core/core/src/iosMain/kotlin/com/metacto/core/date/CoreTime.kt @@ -0,0 +1,13 @@ +package com.metacto.core.date + +import com.metacto.kmm.core.CommonSerializable +import kotlinx.datetime.LocalTime +import kotlinx.serialization.Serializable + +@Serializable(with = CoreTimeSerializer::class) +actual data class CoreTime actual constructor( + actual val value: LocalTime +) : CommonSerializable { + + actual companion object +} \ No newline at end of file diff --git a/coreapp/src/iosMain/kotlin/com/metacto/core/utils/date/DateTimeUtils.ios.kt b/core/core/src/iosMain/kotlin/com/metacto/core/date/DateTimeUtils.ios.kt similarity index 96% rename from coreapp/src/iosMain/kotlin/com/metacto/core/utils/date/DateTimeUtils.ios.kt rename to core/core/src/iosMain/kotlin/com/metacto/core/date/DateTimeUtils.ios.kt index 0cb0b7b0..ef9a3f87 100644 --- a/coreapp/src/iosMain/kotlin/com/metacto/core/utils/date/DateTimeUtils.ios.kt +++ b/core/core/src/iosMain/kotlin/com/metacto/core/date/DateTimeUtils.ios.kt @@ -1,8 +1,9 @@ -package com.metacto.core.utils.date +package com.metacto.core.date import kotlinx.datetime.LocalDate import kotlinx.datetime.LocalDateTime import kotlinx.datetime.LocalTime +import kotlinx.datetime.TimeZone import platform.Foundation.NSCalendar import platform.Foundation.NSCalendarIdentifierGregorian import platform.Foundation.NSCalendarUnitDay @@ -203,12 +204,12 @@ private fun NSDate.toKotlinLocalTime(): LocalTime { ) } -actual fun LocalDate.formatToRelativeDate(): String { - return this.toMillis().timestampToReadableDate() +actual fun LocalDate.formatToRelativeDate(timeZone: TimeZone): String { + return this.toMillis(timeZone).timestampToReadableDate() } -actual fun LocalDateTime.formatToRelativeDate(): String { - return this.toMillis().timestampToReadableDate() +actual fun LocalDateTime.formatToRelativeDate(timeZone: TimeZone): String { + return this.toMillis(timeZone).timestampToReadableDate() } private fun Long.timestampToReadableDate(): String { diff --git a/core/core/src/iosMain/kotlin/com/metacto/core/di/Di.ios.kt b/core/core/src/iosMain/kotlin/com/metacto/core/di/Di.ios.kt new file mode 100644 index 00000000..b20615fc --- /dev/null +++ b/core/core/src/iosMain/kotlin/com/metacto/core/di/Di.ios.kt @@ -0,0 +1,50 @@ +package com.metacto.core.di + +import com.metacto.core.CoreConfigs +import com.metacto.core.domain.repos.ApiErrorHandling +import com.metacto.core.domain.repos.RepositoriesFactory +import com.metacto.core.eventBroadcaster.EventBroadcaster +import com.metacto.core.language.ILanguageManager +import com.metacto.core.language.LanguageManager +import com.metacto.kmm.network.constants.StrapiVersion +import com.metacto.kmm.network.repos.CoreAppConfigurationRepository +import com.metacto.kmm.sharedpreferences.KmmPreference +import org.koin.dsl.module + +internal actual fun platformModule(errorHandling: ApiErrorHandling) = module { + // iOS specific dependencies can be added here + + single { + val coreConfigs = get() + RepositoriesFactory( + coreConfigs = coreConfigs, + appStorageName = coreConfigs.storageName, + shouldShowActualErrorMessages = coreConfigs.shouldShowActualErrorMessages, + networkUserAgent = coreConfigs.networkUserAgent, + errorHandling = errorHandling + ) + } + + single { + val coreConfigs = get() + CoreAppConfigurationRepository( + applicationContext = null, + appConfigurationService = get(), + sharedPreference = get(), + appConfigurationExpirationInMinutes = coreConfigs.appConfigurationExpirationInMinutes, + enforceDefaultDataWrapper = coreConfigs.strapiVersion == StrapiVersion.V5 + ) + } + + single { + get>().sharedPreference + } + + single { + EventBroadcaster + } + + single { + LanguageManager(get()) + } +} \ No newline at end of file diff --git a/coreapp/src/iosMain/kotlin/com/metacto/core/domain/repos/RepositoriesFactory.kt b/core/core/src/iosMain/kotlin/com/metacto/core/domain/repos/RepositoriesFactory.kt similarity index 79% rename from coreapp/src/iosMain/kotlin/com/metacto/core/domain/repos/RepositoriesFactory.kt rename to core/core/src/iosMain/kotlin/com/metacto/core/domain/repos/RepositoriesFactory.kt index 42e1b73f..76326ce3 100644 --- a/coreapp/src/iosMain/kotlin/com/metacto/core/domain/repos/RepositoriesFactory.kt +++ b/core/core/src/iosMain/kotlin/com/metacto/core/domain/repos/RepositoriesFactory.kt @@ -6,12 +6,11 @@ package com.metacto.core.domain.repos -import com.metacto.core.CoreEnvironment +import com.metacto.core.CoreConfigs import com.metacto.core.domain.CoreConstants -import com.metacto.strapikmm.datasource.network.KtorClientFactory -import com.metacto.strapikmm.datasource.network.services.strapi.StrapiService -import com.metacto.strapikmm.errorhandling.SerializableNetworkError -import com.metacto.strapikmm.sharedpreference.KmmPreference +import com.metacto.kmm.network.KtorClientFactory +import com.metacto.kmm.network.services.HttpService +import com.metacto.kmm.sharedpreferences.KmmPreference import com.russhwolf.settings.ExperimentalSettingsApi import com.russhwolf.settings.ExperimentalSettingsImplementation import com.russhwolf.settings.KeychainSettings @@ -22,20 +21,21 @@ import platform.Foundation.NSUserDefaults import platform.Security.kSecAttrAccessible import platform.Security.kSecAttrAccessibleAfterFirstUnlock import platform.Security.kSecAttrService -import kotlin.reflect.KClass -actual open class RepositoriesFactory constructor( - actual val environment: CoreEnvironment, +actual open class RepositoriesFactory( + actual val coreConfigs: CoreConfigs, actual val appStorageName: String, actual val shouldShowActualErrorMessages: Boolean, - actual val errorClass: KClass + actual val networkUserAgent: String?, + actual val errorHandling: ApiErrorHandling ) { - private val oldKeyChainStore by lazy { KeychainSettings(service = appStorageName) } + private val oldKeyChainStore by lazy { KeychainSettings(service = appStorageName) } + @OptIn(ExperimentalForeignApi::class) private val newKeyChainStore by lazy { KeychainSettings( - kSecAttrService to CFBridgingRetain("${appStorageName}_${environment.title.lowercase()}_keychain"), + kSecAttrService to CFBridgingRetain("${appStorageName}_${coreConfigs.storageName.lowercase()}_keychain"), kSecAttrAccessible to kSecAttrAccessibleAfterFirstUnlock, ) } @@ -46,15 +46,19 @@ actual open class RepositoriesFactory constructor( ) private val ktorClientFactory = KtorClientFactory( - networkLogLevel = environment.networkLogLevel, + networkLogLevel = coreConfigs.logLevel, preference = sharedPreference, - shouldShowActualErrorMessages = shouldShowActualErrorMessages + shouldShowActualErrorMessages = shouldShowActualErrorMessages, + userAgent = networkUserAgent ) - actual val strapiService = StrapiService( - httpClient = ktorClientFactory.build(errorClass), - baseUrl = environment.baseUrl, - kmmPreference = sharedPreference + actual val httpService = HttpService( + baseUrl = coreConfigs.baseUrl, + kmmPreference = sharedPreference, + httpClient = errorHandling.buildClient( + factory = ktorClientFactory, + configure = coreConfigs.httpClientConfiguration + ) ) init { @@ -75,21 +79,27 @@ private fun migrate(oldKeyChainStore: KeychainSettings, newKeyChainStore: Keycha oldKeyChainStore.getLongOrNull(key) != null -> { oldKeyChainStore.getLongOrNull(key) } + oldKeyChainStore.getIntOrNull(key) != null -> { oldKeyChainStore.getIntOrNull(key) } + oldKeyChainStore.getStringOrNull(key) != null -> { oldKeyChainStore.getStringOrNull(key) } + oldKeyChainStore.getFloatOrNull(key) != null -> { oldKeyChainStore.getFloatOrNull(key) } + oldKeyChainStore.getDoubleOrNull(key) != null -> { oldKeyChainStore.getDoubleOrNull(key) } + oldKeyChainStore.getBooleanOrNull(key) != null -> { oldKeyChainStore.getBooleanOrNull(key) } + else -> { null } diff --git a/coreapp/src/iosMain/kotlin/com/metacto/core/utils/eventBroadcaster/EventBroadcaster.kt b/core/core/src/iosMain/kotlin/com/metacto/core/eventBroadcaster/EventBroadcaster.kt similarity index 93% rename from coreapp/src/iosMain/kotlin/com/metacto/core/utils/eventBroadcaster/EventBroadcaster.kt rename to core/core/src/iosMain/kotlin/com/metacto/core/eventBroadcaster/EventBroadcaster.kt index e9632c30..0b9ad5ea 100644 --- a/coreapp/src/iosMain/kotlin/com/metacto/core/utils/eventBroadcaster/EventBroadcaster.kt +++ b/core/core/src/iosMain/kotlin/com/metacto/core/eventBroadcaster/EventBroadcaster.kt @@ -1,4 +1,4 @@ -package com.metacto.core.utils.eventBroadcaster +package com.metacto.core.eventBroadcaster import platform.Foundation.NSNotificationCenter import platform.Foundation.NSOperationQueue.Companion.mainQueue diff --git a/coreapp/src/iosMain/kotlin/com/metacto/core/utils/extensions/CommonExtensions.ios.kt b/core/core/src/iosMain/kotlin/com/metacto/core/extensions/CommonExtensions.ios.kt similarity index 86% rename from coreapp/src/iosMain/kotlin/com/metacto/core/utils/extensions/CommonExtensions.ios.kt rename to core/core/src/iosMain/kotlin/com/metacto/core/extensions/CommonExtensions.ios.kt index c20534e1..ebde104e 100644 --- a/coreapp/src/iosMain/kotlin/com/metacto/core/utils/extensions/CommonExtensions.ios.kt +++ b/core/core/src/iosMain/kotlin/com/metacto/core/extensions/CommonExtensions.ios.kt @@ -1,11 +1,14 @@ @file:OptIn(ExperimentalForeignApi::class) -package com.metacto.core.utils.extensions +package com.metacto.core.extensions -import com.metacto.core.utils.PlatformType -import com.metacto.core.utils.language.Language +import com.metacto.core.PlatformType +import com.metacto.core.language.Language import kotlinx.cinterop.ExperimentalForeignApi +import kotlinx.cinterop.addressOf +import kotlinx.cinterop.usePinned import kotlinx.coroutines.Dispatchers +import platform.Foundation.NSData import platform.Foundation.NSLocale import platform.Foundation.NSLocaleLanguageDirectionRightToLeft import platform.Foundation.NSThread @@ -21,6 +24,7 @@ import platform.darwin.DISPATCH_QUEUE_PRIORITY_DEFAULT import platform.darwin.dispatch_async import platform.darwin.dispatch_get_global_queue import platform.darwin.dispatch_get_main_queue +import platform.posix.memcpy inline fun mainContinuation( noinline block: (T1) -> Unit @@ -90,6 +94,14 @@ fun openAppSettings() { openUrl(UIApplicationOpenSettingsURLString) } +@OptIn(ExperimentalForeignApi::class) +@ExperimentalUnsignedTypes +fun NSData.toByteArray(): ByteArray { + return ByteArray(length.toInt()).apply { + usePinned { memcpy(it.addressOf(0), bytes, length) } + } +} + actual fun getPlatformType(): PlatformType { return PlatformType.IOS } diff --git a/coreapp/src/iosMain/kotlin/com/metacto/core/utils/extensions/MediaExtensions.ios.kt b/core/core/src/iosMain/kotlin/com/metacto/core/extensions/MediaExtensions.ios.kt similarity index 98% rename from coreapp/src/iosMain/kotlin/com/metacto/core/utils/extensions/MediaExtensions.ios.kt rename to core/core/src/iosMain/kotlin/com/metacto/core/extensions/MediaExtensions.ios.kt index d040608a..fe80b080 100644 --- a/coreapp/src/iosMain/kotlin/com/metacto/core/utils/extensions/MediaExtensions.ios.kt +++ b/core/core/src/iosMain/kotlin/com/metacto/core/extensions/MediaExtensions.ios.kt @@ -1,4 +1,4 @@ -package com.metacto.core.utils.extensions +package com.metacto.core.extensions import kotlinx.cinterop.ExperimentalForeignApi import kotlinx.cinterop.refTo diff --git a/coreapp/src/iosMain/kotlin/com/metacto/core/utils/extensions/NumberExtensions.ios.kt b/core/core/src/iosMain/kotlin/com/metacto/core/extensions/NumberExtensions.ios.kt similarity index 97% rename from coreapp/src/iosMain/kotlin/com/metacto/core/utils/extensions/NumberExtensions.ios.kt rename to core/core/src/iosMain/kotlin/com/metacto/core/extensions/NumberExtensions.ios.kt index b075c8f7..95ec949b 100644 --- a/coreapp/src/iosMain/kotlin/com/metacto/core/utils/extensions/NumberExtensions.ios.kt +++ b/core/core/src/iosMain/kotlin/com/metacto/core/extensions/NumberExtensions.ios.kt @@ -1,4 +1,4 @@ -package com.metacto.core.utils.extensions +package com.metacto.core.extensions import platform.Foundation.NSLocale import platform.Foundation.NSNumber diff --git a/coreapp/src/iosMain/kotlin/com/metacto/core/utils/extensions/StringExtensions.ios.kt b/core/core/src/iosMain/kotlin/com/metacto/core/extensions/StringExtensions.ios.kt similarity index 73% rename from coreapp/src/iosMain/kotlin/com/metacto/core/utils/extensions/StringExtensions.ios.kt rename to core/core/src/iosMain/kotlin/com/metacto/core/extensions/StringExtensions.ios.kt index f4dfbfcc..83ef6903 100644 --- a/coreapp/src/iosMain/kotlin/com/metacto/core/utils/extensions/StringExtensions.ios.kt +++ b/core/core/src/iosMain/kotlin/com/metacto/core/extensions/StringExtensions.ios.kt @@ -1,4 +1,4 @@ -package com.metacto.core.utils.extensions +package com.metacto.core.extensions fun String.cleanFilePath(): String { return this diff --git a/coreapp/src/iosMain/kotlin/com/metacto/core/presentation/base/CoreViewModel.ios.kt b/core/core/src/iosMain/kotlin/com/metacto/core/extensions/ThrowableExtensions.ios.kt similarity index 65% rename from coreapp/src/iosMain/kotlin/com/metacto/core/presentation/base/CoreViewModel.ios.kt rename to core/core/src/iosMain/kotlin/com/metacto/core/extensions/ThrowableExtensions.ios.kt index 90dbdc41..14e05b5c 100644 --- a/coreapp/src/iosMain/kotlin/com/metacto/core/presentation/base/CoreViewModel.ios.kt +++ b/core/core/src/iosMain/kotlin/com/metacto/core/extensions/ThrowableExtensions.ios.kt @@ -1,7 +1,6 @@ -package com.metacto.core.presentation.base +package com.metacto.core.extensions -import com.metacto.core.CoreEnvironment -import com.metacto.strapikmm.errorhandling.AppException +import com.metacto.kmm.network.errorhandling.AppException actual fun AppException.getErrorCode(): Int? { return this.error.userInfo["errorCode"] as Int? @@ -17,8 +16,4 @@ actual fun AppException.getHttpErrorCode(): Int? { actual fun AppException.getErrorBody(): String? { return this.error.userInfo["errorBody"] as String? -} - -actual fun CoreEnvironment.getStoreId(): String { - return iosAppStoreId } \ No newline at end of file diff --git a/coreapp/src/iosMain/kotlin/com/metacto/core/utils/language/LanguageManager.kt b/core/core/src/iosMain/kotlin/com/metacto/core/language/LanguageManager.kt similarity index 76% rename from coreapp/src/iosMain/kotlin/com/metacto/core/utils/language/LanguageManager.kt rename to core/core/src/iosMain/kotlin/com/metacto/core/language/LanguageManager.kt index b20d2657..7e3abfbb 100644 --- a/coreapp/src/iosMain/kotlin/com/metacto/core/utils/language/LanguageManager.kt +++ b/core/core/src/iosMain/kotlin/com/metacto/core/language/LanguageManager.kt @@ -1,12 +1,12 @@ -package com.metacto.core.utils.language +package com.metacto.core.language import androidx.compose.runtime.State import androidx.compose.runtime.mutableStateOf -import com.metacto.core.utils.extensions.getObject -import com.metacto.core.utils.extensions.getSystemLanguage -import com.metacto.core.utils.extensions.putObject -import com.metacto.core.utils.language.ILanguageManager.Companion.KEY_APP_LANG -import com.metacto.strapikmm.sharedpreference.KmmPreference +import com.metacto.core.extensions.getSystemLanguage +import com.metacto.core.language.ILanguageManager.Companion.KEY_APP_LANG +import com.metacto.kmm.sharedpreferences.KmmPreference +import com.metacto.kmm.sharedpreferences.getObject +import com.metacto.kmm.sharedpreferences.putObject import platform.Foundation.NSUserDefaults import platform.Foundation.setValue diff --git a/core/files/build.gradle.kts b/core/files/build.gradle.kts new file mode 100644 index 00000000..e592ac84 --- /dev/null +++ b/core/files/build.gradle.kts @@ -0,0 +1,130 @@ +import com.android.build.gradle.internal.cxx.configure.gradleLocalProperties +import org.jetbrains.kotlin.gradle.dsl.JvmTarget +import org.jetbrains.kotlin.gradle.plugin.mpp.apple.XCFramework +import org.jetbrains.kotlin.konan.properties.Properties +import java.io.FileInputStream +import java.io.FileOutputStream + +plugins { + alias(libs.plugins.multiplatform) + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.parcelize) + alias(libs.plugins.maven.publish) + alias(libs.plugins.signing) +} + +private val versionProperties = Properties().apply { + load(FileInputStream(File(rootProject.rootDir, Configs.VERSIONS_PROPERTIES))) +} + +private val currentVersion = versionProperties.getProperty(Configs.PUBLISH_VERSION) as String +private val libName = "files" +private val libNamespace = "com.metacto.core.files" + +version = currentVersion +group = Configs.GROUP_ID + +kotlin { + androidTarget { + compilerOptions { + freeCompilerArgs.addAll("-P", "plugin:org.jetbrains.kotlin.parcelize:additionalAnnotation=com.metacto.kmm.core.CommonParcelize") + } + compilations.all { + kotlinOptions { + jvmTarget = libs.versions.jvm.get() + } + } + publishLibraryVariants("debug", "release") + } + + val xcf = XCFramework() + listOf( + iosX64(), + iosArm64(), + iosSimulatorArm64() + ).forEach { + it.binaries.framework(libName) { + baseName = libName + xcf.add(this) + isStatic = true + } + } + + metadata { + compilations.matching { it.name == "iosMain" }.all { + compileTaskProvider.configure { enabled = false } + } + } + + sourceSets { + commonMain.dependencies { + // Core + implementation(project(":core:core")) + } + + androidMain.dependencies { + // ANDROID ANDROID DEPENDENCIES + } + + iosMain.dependencies { + // IOS DEPENDENCIES + } + } + + task("testClasses") +} + +android { + namespace = libNamespace + compileSdk = libs.versions.compileSdk.get().toInt() + + sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml") + sourceSets["main"].res.srcDirs("src/androidMain/res") + sourceSets["main"].resources.srcDirs("src/commonMain/resources") + sourceSets["main"].res.srcDirs("src/androidMain/res", "src/commonMain/resources") + + defaultConfig { + minSdk = libs.versions.minSdk.get().toInt() + targetSdk = libs.versions.targetSdk.get().toInt() + consumerProguardFiles("consumer-rules.pro") + } + compileOptions { + sourceCompatibility = JavaVersion.toVersion(libs.versions.jvm.get()) + targetCompatibility = JavaVersion.toVersion(libs.versions.jvm.get()) + } +} + +publishing { + repositories { + val localProperties = gradleLocalProperties(rootDir, providers) + var publishUserRepo = localProperties.getProperty(Configs.PUBLISH_REPO_USER) + var publishTokenRepo = localProperties.getProperty(Configs.PUBLISH_REPO_TOKEN) + + if (publishUserRepo.isNullOrEmpty()) { + publishUserRepo = "" + localProperties.setProperty(Configs.PUBLISH_REPO_USER, publishUserRepo) + } + + if (publishTokenRepo.isNullOrEmpty()) { + publishTokenRepo = "" + localProperties.setProperty(Configs.PUBLISH_REPO_TOKEN, publishTokenRepo) + } + + if (publishUserRepo.isEmpty() || publishTokenRepo.isEmpty()) { + localProperties.store( + FileOutputStream(File(rootDir, Configs.LOCAL_PROPERTIES)), null + ) + } + + repositories { + maven(Configs.MAVEN_URL) { + name = Configs.PUBLISH_MAVEN_REPO_NAME + credentials { + username = publishUserRepo + password = publishTokenRepo + } + } + } + } +} + diff --git a/core/files/src/androidMain/kotlin/com/metacto/core/files/FileManager.kt b/core/files/src/androidMain/kotlin/com/metacto/core/files/FileManager.kt new file mode 100644 index 00000000..a369a0e4 --- /dev/null +++ b/core/files/src/androidMain/kotlin/com/metacto/core/files/FileManager.kt @@ -0,0 +1,56 @@ +package com.metacto.core.files + +import android.content.Context +import java.io.File +import androidx.core.net.toUri + +class FileManager(private val context: Context) : IFileManager { + + override fun readFile(filePath: String): ByteArray { + require(filePath.isNotBlank()) { + "File path cannot be blank" + } + + return if (filePath.startsWith("content://")) { + // Handle Android content URI + val uri = filePath.toUri() + context.contentResolver.openInputStream(uri)?.use { inputStream -> + inputStream.readBytes() + } ?: error("Cannot open input stream for URI: $filePath") + } else { + // Handle regular file path + val file = File(filePath) + if (!file.exists()) { + error("File does not exist: $filePath") + } + file.readBytes() + } + } + + override fun clearFolder(folderPath: String): Boolean { + return File(folderPath).deleteRecursively() + } + + override fun deleteFile(filePath: String): Boolean { + return if (filePath.startsWith("content://")) { + // Cannot delete content URIs - they're managed by the system + false + } else { + File(filePath).delete() + } + } + + override fun createFile(dirName: String?, fileName: String, content: String): String { + val baseDir = context.filesDir + val file = if (dirName.isNullOrEmpty()) { + File(baseDir, fileName) + } else { + val folder = File(baseDir, dirName) + if (!folder.exists()) folder.mkdirs() + File(folder, fileName) + } + + file.writeText(content) + return file.absolutePath + } +} \ No newline at end of file diff --git a/core/files/src/androidMain/kotlin/com/metacto/core/files/di/Di.android.kt b/core/files/src/androidMain/kotlin/com/metacto/core/files/di/Di.android.kt new file mode 100644 index 00000000..62c14550 --- /dev/null +++ b/core/files/src/androidMain/kotlin/com/metacto/core/files/di/Di.android.kt @@ -0,0 +1,13 @@ +package com.metacto.core.files.di + +import com.metacto.core.files.FileManager +import com.metacto.core.files.IFileManager +import org.koin.dsl.module + +internal actual fun platformModule() = module { + // Add Android specific dependencies here + + single { + FileManager(get()) + } +} \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/file/IFileManager.kt b/core/files/src/commonMain/kotlin/com/metacto/core/files/IFileManager.kt similarity index 61% rename from coreapp/src/commonMain/kotlin/com/metacto/core/utils/file/IFileManager.kt rename to core/files/src/commonMain/kotlin/com/metacto/core/files/IFileManager.kt index 429c8fe7..7e697498 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/file/IFileManager.kt +++ b/core/files/src/commonMain/kotlin/com/metacto/core/files/IFileManager.kt @@ -1,4 +1,4 @@ -package com.metacto.core.utils.file +package com.metacto.core.files interface IFileManager { @Throws(Throwable::class) @@ -7,4 +7,6 @@ interface IFileManager { fun clearFolder(folderPath: String): Boolean fun deleteFile(filePath: String): Boolean + + fun createFile(dirName: String? = null, fileName: String, content: String = ""): String } \ No newline at end of file diff --git a/core/files/src/commonMain/kotlin/com/metacto/core/files/di/Di.kt b/core/files/src/commonMain/kotlin/com/metacto/core/files/di/Di.kt new file mode 100644 index 00000000..3467a28f --- /dev/null +++ b/core/files/src/commonMain/kotlin/com/metacto/core/files/di/Di.kt @@ -0,0 +1,12 @@ +package com.metacto.core.files.di + +import org.koin.core.module.Module +import org.koin.dsl.module + +fun filesModule() = module { + // Common dependencies can be added here + + includes(platformModule()) +} + +internal expect fun platformModule(): Module \ No newline at end of file diff --git a/core/files/src/iosMain/kotlin/com/metacto/core/files/FileManager.kt b/core/files/src/iosMain/kotlin/com/metacto/core/files/FileManager.kt new file mode 100644 index 00000000..bbb77b83 --- /dev/null +++ b/core/files/src/iosMain/kotlin/com/metacto/core/files/FileManager.kt @@ -0,0 +1,112 @@ +package com.metacto.core.files + +import com.metacto.core.extensions.toByteArray +import kotlinx.cinterop.ExperimentalForeignApi +import platform.Foundation.NSData +import platform.Foundation.NSDocumentDirectory +import platform.Foundation.NSFileManager +import platform.Foundation.NSSearchPathForDirectoriesInDomains +import platform.Foundation.NSString +import platform.Foundation.NSUserDomainMask +import platform.Foundation.NSURL +import platform.Foundation.dataWithContentsOfFile +import platform.Foundation.dataWithContentsOfURL +import platform.Foundation.stringByAppendingPathComponent +import platform.Foundation.writeToFile + +class FileManager : IFileManager { + + override fun readFile(filePath: String): ByteArray { + require(filePath.isNotBlank()) { "File path cannot be blank" } + + val nsData = when { + filePath.startsWith("file://") -> { + // Handle iOS file URLs by converting to NSURL + val nsurl = NSURL.URLWithString(filePath) + nsurl?.let { NSData.dataWithContentsOfURL(it) } + } + filePath.contains("://") -> { + // Handle other URL schemes + val nsurl = NSURL.URLWithString(filePath) + nsurl?.let { NSData.dataWithContentsOfURL(it) } + } + else -> { + // Handle regular file paths + NSData.dataWithContentsOfFile(filePath) + } + } + + requireNotNull(nsData) { "Can't access file at: $filePath" } + return nsData.toByteArray() + } + + @OptIn(ExperimentalForeignApi::class) + override fun clearFolder(folderPath: String): Boolean { + val fileManager = NSFileManager.defaultManager + + return try { + // Get the list of files in the directory + val files = fileManager.contentsOfDirectoryAtPath(folderPath, null) + files?.forEach { file -> + val filePath = + (folderPath as NSString).stringByAppendingPathComponent(file as String) + fileManager.removeItemAtPath(filePath, null) + } + true + } catch (e: Throwable) { + println("Could not clear folder at $folderPath, Error: $e") + false + } + } + + @OptIn(ExperimentalForeignApi::class) + override fun deleteFile(filePath: String): Boolean { + return try { + // Attempt to remove the file at the given path + NSFileManager.defaultManager.removeItemAtPath(filePath, null) + true + } catch (e: Throwable) { + println("Could not delete file at: $filePath, Error: $e") + false + } + } + + @OptIn(ExperimentalForeignApi::class) + override fun createFile(dirName: String?, fileName: String, content: String): String { + try { + val fileManager = NSFileManager.defaultManager + val documentsDirectory = NSSearchPathForDirectoriesInDomains( + NSDocumentDirectory, + NSUserDomainMask, + true + ).first() as String + + val filePath = if (dirName.isNullOrEmpty().not()) { + val folderPath = "$documentsDirectory/$dirName" + + // Create directory if it doesn't exist + if (!fileManager.fileExistsAtPath(folderPath)) { + fileManager.createDirectoryAtPath( + path = folderPath, + withIntermediateDirectories = true, + attributes = null, + error = null + ) + } + + "$folderPath/$fileName" + } else { + "$documentsDirectory/$fileName" + } + + // Create or overwrite the file with content + (content as NSString).writeToFile(filePath, atomically = true) + + return filePath + } catch (e: Throwable) { + println("Error creating file: $e") + return "" + } + + } +} \ No newline at end of file diff --git a/core/files/src/iosMain/kotlin/com/metacto/core/files/di/Di.ios.kt b/core/files/src/iosMain/kotlin/com/metacto/core/files/di/Di.ios.kt new file mode 100644 index 00000000..6f4ac62a --- /dev/null +++ b/core/files/src/iosMain/kotlin/com/metacto/core/files/di/Di.ios.kt @@ -0,0 +1,13 @@ +package com.metacto.core.files.di + +import com.metacto.core.files.FileManager +import com.metacto.core.files.IFileManager +import org.koin.dsl.module + +internal actual fun platformModule() = module { + // Add iOS specific dependencies here + + single { + FileManager() + } +} \ No newline at end of file diff --git a/core/notifications/build.gradle.kts b/core/notifications/build.gradle.kts new file mode 100644 index 00000000..7bde5881 --- /dev/null +++ b/core/notifications/build.gradle.kts @@ -0,0 +1,134 @@ +import com.android.build.gradle.internal.cxx.configure.gradleLocalProperties +import org.jetbrains.kotlin.gradle.plugin.mpp.apple.XCFramework +import org.jetbrains.kotlin.konan.properties.Properties +import java.io.FileInputStream +import java.io.FileOutputStream + +plugins { + alias(libs.plugins.multiplatform) + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.parcelize) + alias(libs.plugins.maven.publish) + alias(libs.plugins.signing) +} + +private val versionProperties = Properties().apply { + load(FileInputStream(File(rootProject.rootDir, Configs.VERSIONS_PROPERTIES))) +} + +private val currentVersion = versionProperties.getProperty(Configs.PUBLISH_VERSION) as String +private val libName = "notifications" +private val libNamespace = "com.metacto.core.notifications" + +version = currentVersion +group = Configs.GROUP_ID + +kotlin { + androidTarget { + compilerOptions { + freeCompilerArgs.addAll("-P", "plugin:org.jetbrains.kotlin.parcelize:additionalAnnotation=com.metacto.kmm.core.CommonParcelize") + } + compilations.all { + kotlinOptions { + jvmTarget = libs.versions.jvm.get() + } + } + publishLibraryVariants("debug", "release") + } + + val xcf = XCFramework() + listOf( + iosX64(), + iosArm64(), + iosSimulatorArm64() + ).forEach { + it.binaries.framework(libName) { + baseName = libName + xcf.add(this) + isStatic = true + } + } + + metadata { + compilations.matching { it.name == "iosMain" }.all { + compileTaskProvider.configure { enabled = false } + } + } + + sourceSets { + commonMain.dependencies { + // Core + implementation(project(":core:core")) + + // Notifications + implementation(libs.kmpnotifier) + implementation(libs.uuid) // Needed for KmpNotifier (https://github.com/mirzemehdi/KMPNotifier/issues/30) + implementation(libs.statelycommon) // Needed for KmpNotifier (https://github.com/mirzemehdi/KMPNotifier/issues/30) + } + + androidMain.dependencies { + // ANDROID ANDROID DEPENDENCIES + } + + iosMain.dependencies { + // IOS DEPENDENCIES + } + } + + task("testClasses") +} + +android { + namespace = libNamespace + compileSdk = libs.versions.compileSdk.get().toInt() + + sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml") + sourceSets["main"].res.srcDirs("src/androidMain/res") + sourceSets["main"].resources.srcDirs("src/commonMain/resources") + sourceSets["main"].res.srcDirs("src/androidMain/res", "src/commonMain/resources") + + defaultConfig { + minSdk = libs.versions.minSdk.get().toInt() + targetSdk = libs.versions.targetSdk.get().toInt() + consumerProguardFiles("consumer-rules.pro") + } + compileOptions { + sourceCompatibility = JavaVersion.toVersion(libs.versions.jvm.get()) + targetCompatibility = JavaVersion.toVersion(libs.versions.jvm.get()) + } +} + +publishing { + repositories { + val localProperties = gradleLocalProperties(rootDir, providers) + var publishUserRepo = localProperties.getProperty(Configs.PUBLISH_REPO_USER) + var publishTokenRepo = localProperties.getProperty(Configs.PUBLISH_REPO_TOKEN) + + if (publishUserRepo.isNullOrEmpty()) { + publishUserRepo = "" + localProperties.setProperty(Configs.PUBLISH_REPO_USER, publishUserRepo) + } + + if (publishTokenRepo.isNullOrEmpty()) { + publishTokenRepo = "" + localProperties.setProperty(Configs.PUBLISH_REPO_TOKEN, publishTokenRepo) + } + + if (publishUserRepo.isEmpty() || publishTokenRepo.isEmpty()) { + localProperties.store( + FileOutputStream(File(rootDir, Configs.LOCAL_PROPERTIES)), null + ) + } + + repositories { + maven(Configs.MAVEN_URL) { + name = Configs.PUBLISH_MAVEN_REPO_NAME + credentials { + username = publishUserRepo + password = publishTokenRepo + } + } + } + } +} + diff --git a/core/notifications/src/androidMain/AndroidManifest.xml b/core/notifications/src/androidMain/AndroidManifest.xml new file mode 100644 index 00000000..4dfbbfea --- /dev/null +++ b/core/notifications/src/androidMain/AndroidManifest.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/notification/INotificationManager.kt b/core/notifications/src/androidMain/kotlin/com/metacto/core/notifications/INotificationManager.kt similarity index 90% rename from coreapp/src/androidMain/kotlin/com/metacto/core/utils/notification/INotificationManager.kt rename to core/notifications/src/androidMain/kotlin/com/metacto/core/notifications/INotificationManager.kt index 3fb01cc6..202952ae 100644 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/notification/INotificationManager.kt +++ b/core/notifications/src/androidMain/kotlin/com/metacto/core/notifications/INotificationManager.kt @@ -1,9 +1,9 @@ -package com.metacto.core.utils.notification +package com.metacto.core.notifications import android.app.NotificationChannel import android.app.NotificationManager import android.content.Intent -import com.metacto.core.utils.Date +import kotlinx.datetime.LocalDateTime actual interface INotificationManager { fun show(notification: Notification) @@ -16,7 +16,7 @@ actual interface INotificationManager { fun onCreateOrOnNewIntent(intent: Intent?) - actual fun schedule(notification: Notification, date: Date) + actual fun schedule(notification: Notification, date: LocalDateTime) actual fun scheduleRepeating(notification: Notification, hourOfDay: Int, minute: Int) diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/notification/Notification.kt b/core/notifications/src/androidMain/kotlin/com/metacto/core/notifications/Notification.kt similarity index 86% rename from coreapp/src/androidMain/kotlin/com/metacto/core/utils/notification/Notification.kt rename to core/notifications/src/androidMain/kotlin/com/metacto/core/notifications/Notification.kt index 451cc277..75fad64a 100644 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/notification/Notification.kt +++ b/core/notifications/src/androidMain/kotlin/com/metacto/core/notifications/Notification.kt @@ -1,10 +1,10 @@ -package com.metacto.core.utils.notification +package com.metacto.core.notifications import android.app.PendingIntent import androidx.annotation.DrawableRes import androidx.core.app.NotificationCompat -import com.metacto.core.utils.CommonParcelable -import com.metacto.core.utils.CommonParcelize +import com.metacto.kmm.core.CommonParcelable +import com.metacto.kmm.core.CommonParcelize @CommonParcelize actual data class Notification( diff --git a/core/notifications/src/androidMain/kotlin/com/metacto/core/notifications/NotificationChannel.kt b/core/notifications/src/androidMain/kotlin/com/metacto/core/notifications/NotificationChannel.kt new file mode 100644 index 00000000..66d68a62 --- /dev/null +++ b/core/notifications/src/androidMain/kotlin/com/metacto/core/notifications/NotificationChannel.kt @@ -0,0 +1,10 @@ +package com.metacto.core.notifications + +import com.metacto.kmm.core.CommonParcelable +import com.metacto.kmm.core.CommonParcelize + +@CommonParcelize +data class NotificationChannel( + val id: String, + val name: String, +) : CommonParcelable \ No newline at end of file diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/notification/NotificationManager.kt b/core/notifications/src/androidMain/kotlin/com/metacto/core/notifications/NotificationManager.kt similarity index 93% rename from coreapp/src/androidMain/kotlin/com/metacto/core/utils/notification/NotificationManager.kt rename to core/notifications/src/androidMain/kotlin/com/metacto/core/notifications/NotificationManager.kt index dd4ed231..457999af 100644 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/notification/NotificationManager.kt +++ b/core/notifications/src/androidMain/kotlin/com/metacto/core/notifications/NotificationManager.kt @@ -1,4 +1,4 @@ -package com.metacto.core.utils.notification +package com.metacto.core.notifications import android.app.AlarmManager import android.app.NotificationChannel @@ -8,18 +8,16 @@ import android.content.Context import android.content.Intent import android.os.Build import androidx.core.app.NotificationCompat -import com.metacto.core.domain.CoreConstants -import com.metacto.core.utils.Date -import com.metacto.core.utils.extensions.getAppIconResId -import com.metacto.core.utils.extensions.getLauncherPendingIntent -import com.metacto.coreApp.R +import com.metacto.core.date.toMillis +import com.metacto.core.extensions.getAppIconResId +import com.metacto.core.extensions.getLauncherPendingIntent import com.mmk.kmpnotifier.extensions.onCreateOrOnNewIntent import com.mmk.kmpnotifier.notification.NotifierManager import com.mmk.kmpnotifier.notification.PayloadData import kotlinx.datetime.Clock +import kotlinx.datetime.LocalDateTime import java.util.Calendar import java.util.concurrent.TimeUnit -import android.app.Notification as PlatformNotification class NotificationManager( private val context: Context, @@ -56,7 +54,7 @@ class NotificationManager( val notificationId = notification.id ?: Clock.System.now().toEpochMilliseconds().toInt() val extras = mutableMapOf( - CoreConstants.KEY_NOTIFICATION_ID to notificationId + NotificationConstants.KEY_NOTIFICATION_ID to notificationId ) val pendingIntent = notification.pendingIntent ?: context.getLauncherPendingIntent(extras) @@ -87,7 +85,7 @@ class NotificationManager( return when { notificationService.getNotificationChannel(id) == null -> { val channel = NotificationChannel(id, name, priority).apply { - lockscreenVisibility = PlatformNotification.VISIBILITY_PUBLIC + lockscreenVisibility = android.app.Notification.VISIBILITY_PUBLIC } notificationService.createNotificationChannel(channel) channel @@ -101,7 +99,7 @@ class NotificationManager( notifier.onCreateOrOnNewIntent(intent) } - override fun schedule(notification: Notification, date: Date) { + override fun schedule(notification: Notification, date: LocalDateTime) { // Prepare the notification id val notificationId = notification.id ?: Clock.System.now().toEpochMilliseconds().toInt() @@ -119,7 +117,7 @@ class NotificationManager( ) // Start the alarm - alarmService.set(AlarmManager.RTC_WAKEUP, date.time, pendingIntent) + alarmService.set(AlarmManager.RTC_WAKEUP, date.toMillis(), pendingIntent) } override fun scheduleRepeating( diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/notification/NotificationsReceiver.kt b/core/notifications/src/androidMain/kotlin/com/metacto/core/notifications/NotificationsReceiver.kt similarity index 85% rename from coreapp/src/androidMain/kotlin/com/metacto/core/utils/notification/NotificationsReceiver.kt rename to core/notifications/src/androidMain/kotlin/com/metacto/core/notifications/NotificationsReceiver.kt index f28c5493..abac6e83 100644 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/notification/NotificationsReceiver.kt +++ b/core/notifications/src/androidMain/kotlin/com/metacto/core/notifications/NotificationsReceiver.kt @@ -1,9 +1,9 @@ -package com.metacto.core.utils.notification +package com.metacto.core.notifications import android.content.BroadcastReceiver import android.content.Context import android.content.Intent -import com.metacto.core.utils.extensions.getParcelable +import com.metacto.core.extensions.getParcelable import org.koin.core.component.KoinComponent import org.koin.core.component.inject diff --git a/core/notifications/src/androidMain/kotlin/com/metacto/core/notifications/di/Di.android.kt b/core/notifications/src/androidMain/kotlin/com/metacto/core/notifications/di/Di.android.kt new file mode 100644 index 00000000..42772969 --- /dev/null +++ b/core/notifications/src/androidMain/kotlin/com/metacto/core/notifications/di/Di.android.kt @@ -0,0 +1,33 @@ +package com.metacto.core.notifications.di + +import com.metacto.core.notifications.INotificationManager +import com.metacto.core.notifications.NotificationManager +import com.metacto.core.notifications.NotificationsConfigs +import com.metacto.core.notifications.R +import com.mmk.kmpnotifier.notification.NotifierManager +import com.mmk.kmpnotifier.notification.configuration.NotificationPlatformConfiguration +import org.koin.android.ext.koin.androidContext +import org.koin.dsl.module + +internal actual fun platformModule() = module { + // Add Android specific dependencies here + single { + val configs = get() + NotifierManager.apply { + initialize( + configuration = NotificationPlatformConfiguration.Android( + showPushNotification = configs.showNotifications, + notificationChannelData = NotificationPlatformConfiguration.Android.NotificationChannelData(), + notificationIconResId = configs.androidNotificationIcon ?: R.drawable.ic_default_notifications_icon, + ) + ) + } + } + + single { + NotificationManager( + context = androidContext(), + notifier = get() + ) + } +} \ No newline at end of file diff --git a/coreapp/src/androidMain/res/drawable/ic_default_notifications_icon.xml b/core/notifications/src/androidMain/res/drawable/ic_default_notifications_icon.xml similarity index 100% rename from coreapp/src/androidMain/res/drawable/ic_default_notifications_icon.xml rename to core/notifications/src/androidMain/res/drawable/ic_default_notifications_icon.xml diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/notification/INotificationManager.kt b/core/notifications/src/commonMain/kotlin/com/metacto/core/notifications/INotificationManager.kt similarity index 85% rename from coreapp/src/commonMain/kotlin/com/metacto/core/utils/notification/INotificationManager.kt rename to core/notifications/src/commonMain/kotlin/com/metacto/core/notifications/INotificationManager.kt index fae6a1b8..82cc8932 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/notification/INotificationManager.kt +++ b/core/notifications/src/commonMain/kotlin/com/metacto/core/notifications/INotificationManager.kt @@ -1,9 +1,9 @@ -package com.metacto.core.utils.notification +package com.metacto.core.notifications -import com.metacto.core.utils.Date +import kotlinx.datetime.LocalDateTime expect interface INotificationManager { - fun schedule(notification: Notification, date: Date) + fun schedule(notification: Notification, date: LocalDateTime) fun scheduleRepeating(notification: Notification, hourOfDay: Int, minute: Int) diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/notification/Notification.kt b/core/notifications/src/commonMain/kotlin/com/metacto/core/notifications/Notification.kt similarity index 87% rename from coreapp/src/commonMain/kotlin/com/metacto/core/utils/notification/Notification.kt rename to core/notifications/src/commonMain/kotlin/com/metacto/core/notifications/Notification.kt index b8eb2f4c..2577130b 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/notification/Notification.kt +++ b/core/notifications/src/commonMain/kotlin/com/metacto/core/notifications/Notification.kt @@ -1,4 +1,4 @@ -package com.metacto.core.utils.notification +package com.metacto.core.notifications expect class Notification { val id: Int? diff --git a/core/notifications/src/commonMain/kotlin/com/metacto/core/notifications/NotificationConstants.kt b/core/notifications/src/commonMain/kotlin/com/metacto/core/notifications/NotificationConstants.kt new file mode 100644 index 00000000..fbc7aafd --- /dev/null +++ b/core/notifications/src/commonMain/kotlin/com/metacto/core/notifications/NotificationConstants.kt @@ -0,0 +1,5 @@ +package com.metacto.core.notifications + +object NotificationConstants { + const val KEY_NOTIFICATION_ID = "KEY_NOTIFICATION_ID" +} \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/notification/NotificationPayload.kt b/core/notifications/src/commonMain/kotlin/com/metacto/core/notifications/NotificationPayload.kt similarity index 51% rename from coreapp/src/commonMain/kotlin/com/metacto/core/utils/notification/NotificationPayload.kt rename to core/notifications/src/commonMain/kotlin/com/metacto/core/notifications/NotificationPayload.kt index d51ede05..208f32e6 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/notification/NotificationPayload.kt +++ b/core/notifications/src/commonMain/kotlin/com/metacto/core/notifications/NotificationPayload.kt @@ -1,3 +1,3 @@ -package com.metacto.core.utils.notification +package com.metacto.core.notifications typealias NotificationPayload = Map \ No newline at end of file diff --git a/core/notifications/src/commonMain/kotlin/com/metacto/core/notifications/NotificationsConfigs.kt b/core/notifications/src/commonMain/kotlin/com/metacto/core/notifications/NotificationsConfigs.kt new file mode 100644 index 00000000..6256be00 --- /dev/null +++ b/core/notifications/src/commonMain/kotlin/com/metacto/core/notifications/NotificationsConfigs.kt @@ -0,0 +1,7 @@ +package com.metacto.core.notifications + +data class NotificationsConfigs( + val androidNotificationIcon: Int? = null, + val showNotifications: Boolean = false, + val askNotificationPermissionOnStart: Boolean = false, +) diff --git a/core/notifications/src/commonMain/kotlin/com/metacto/core/notifications/di/Di.kt b/core/notifications/src/commonMain/kotlin/com/metacto/core/notifications/di/Di.kt new file mode 100644 index 00000000..6ec57ef2 --- /dev/null +++ b/core/notifications/src/commonMain/kotlin/com/metacto/core/notifications/di/Di.kt @@ -0,0 +1,15 @@ +package com.metacto.core.notifications.di + +import com.metacto.core.notifications.NotificationsConfigs +import org.koin.core.module.Module +import org.koin.dsl.module + +fun notificationsModule(configs: NotificationsConfigs) = module { + // Common dependencies can be added here + + includes(platformModule()) + + single { configs } +} + +internal expect fun platformModule(): Module \ No newline at end of file diff --git a/coreapp/src/iosMain/kotlin/com/metacto/core/utils/notification/INotificationManager.kt b/core/notifications/src/iosMain/kotlin/com/metacto/core/notifications/INotificationManager.kt similarity index 87% rename from coreapp/src/iosMain/kotlin/com/metacto/core/utils/notification/INotificationManager.kt rename to core/notifications/src/iosMain/kotlin/com/metacto/core/notifications/INotificationManager.kt index ef38b96c..cf2baab8 100644 --- a/coreapp/src/iosMain/kotlin/com/metacto/core/utils/notification/INotificationManager.kt +++ b/core/notifications/src/iosMain/kotlin/com/metacto/core/notifications/INotificationManager.kt @@ -1,6 +1,6 @@ -package com.metacto.core.utils.notification +package com.metacto.core.notifications -import com.metacto.core.utils.Date +import kotlinx.datetime.LocalDateTime val Class = INotificationManager::class @@ -8,7 +8,7 @@ actual interface INotificationManager { fun onApplicationDidReceiveRemoteNotification(userInfo: Map) - actual fun schedule(notification: Notification, date: Date) + actual fun schedule(notification: Notification, date: LocalDateTime) actual fun scheduleRepeating(notification: Notification, hourOfDay: Int, minute: Int) diff --git a/coreapp/src/iosMain/kotlin/com/metacto/core/utils/notification/Notification.kt b/core/notifications/src/iosMain/kotlin/com/metacto/core/notifications/Notification.kt similarity index 91% rename from coreapp/src/iosMain/kotlin/com/metacto/core/utils/notification/Notification.kt rename to core/notifications/src/iosMain/kotlin/com/metacto/core/notifications/Notification.kt index b73648ad..316ec77e 100644 --- a/coreapp/src/iosMain/kotlin/com/metacto/core/utils/notification/Notification.kt +++ b/core/notifications/src/iosMain/kotlin/com/metacto/core/notifications/Notification.kt @@ -1,4 +1,4 @@ -package com.metacto.core.utils.notification +package com.metacto.core.notifications actual data class Notification( actual val id: Int? = null, diff --git a/coreapp/src/iosMain/kotlin/com/metacto/core/utils/notification/NotificationManager.kt b/core/notifications/src/iosMain/kotlin/com/metacto/core/notifications/NotificationManager.kt similarity index 93% rename from coreapp/src/iosMain/kotlin/com/metacto/core/utils/notification/NotificationManager.kt rename to core/notifications/src/iosMain/kotlin/com/metacto/core/notifications/NotificationManager.kt index 42f438b8..5c3ed2d0 100644 --- a/coreapp/src/iosMain/kotlin/com/metacto/core/utils/notification/NotificationManager.kt +++ b/core/notifications/src/iosMain/kotlin/com/metacto/core/notifications/NotificationManager.kt @@ -1,12 +1,11 @@ -package com.metacto.core.utils.notification +package com.metacto.core.notifications -import com.metacto.core.domain.CoreConstants -import com.metacto.core.utils.Date -import com.metacto.core.utils.toDateComponents import com.mmk.kmpnotifier.extensions.onApplicationDidReceiveRemoteNotification import com.mmk.kmpnotifier.notification.NotifierManager import com.mmk.kmpnotifier.notification.PayloadData import kotlinx.datetime.Clock +import kotlinx.datetime.LocalDateTime +import kotlinx.datetime.toNSDateComponents import platform.Foundation.NSDateComponents import platform.UIKit.UIApplication import platform.UserNotifications.UNCalendarNotificationTrigger @@ -35,9 +34,9 @@ class NotificationManager( notifier.onApplicationDidReceiveRemoteNotification(userInfo) } - override fun schedule(notification: Notification, date: Date) { + override fun schedule(notification: Notification, date: LocalDateTime) { val trigger = UNCalendarNotificationTrigger.triggerWithDateMatchingComponents( - dateComponents = date.toDateComponents(), + dateComponents = date.toNSDateComponents(), repeats = false ) @@ -85,7 +84,7 @@ class NotificationManager( setBody(it) } - setUserInfo(mapOf(CoreConstants.KEY_NOTIFICATION_ID to notificationId.toString())) + setUserInfo(mapOf(NotificationConstants.KEY_NOTIFICATION_ID to notificationId.toString())) } val notificationRequest = UNNotificationRequest.requestWithIdentifier( identifier = notificationId.toString(), diff --git a/core/notifications/src/iosMain/kotlin/com/metacto/core/notifications/di/Di.ios.kt b/core/notifications/src/iosMain/kotlin/com/metacto/core/notifications/di/Di.ios.kt new file mode 100644 index 00000000..5f3e6b0d --- /dev/null +++ b/core/notifications/src/iosMain/kotlin/com/metacto/core/notifications/di/Di.ios.kt @@ -0,0 +1,32 @@ +package com.metacto.core.notifications.di + +import com.metacto.core.notifications.INotificationManager +import com.metacto.core.notifications.NotificationManager +import com.metacto.core.notifications.NotificationsConfigs +import com.mmk.kmpnotifier.notification.NotifierManager +import com.mmk.kmpnotifier.notification.configuration.NotificationPlatformConfiguration +import org.koin.dsl.module +import platform.UserNotifications.UNUserNotificationCenter + +internal actual fun platformModule() = module { + // Add iOS specific dependencies here + + single { + val configs = get() + NotifierManager.apply { + initialize( + NotificationPlatformConfiguration.Ios( + showPushNotification = configs.showNotifications, + askNotificationPermissionOnStart = configs.askNotificationPermissionOnStart + ) + ) + } + } + + single { + NotificationManager( + notificationCenter = UNUserNotificationCenter.currentNotificationCenter(), + notifier = get() + ) + } +} \ No newline at end of file diff --git a/core/phone-core/build.gradle.kts b/core/phone-core/build.gradle.kts new file mode 100644 index 00000000..26f71eaf --- /dev/null +++ b/core/phone-core/build.gradle.kts @@ -0,0 +1,129 @@ +import com.android.build.gradle.internal.cxx.configure.gradleLocalProperties +import org.jetbrains.kotlin.gradle.plugin.mpp.apple.XCFramework +import org.jetbrains.kotlin.konan.properties.Properties +import java.io.FileInputStream +import java.io.FileOutputStream + +plugins { + alias(libs.plugins.multiplatform) + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.parcelize) + alias(libs.plugins.maven.publish) + alias(libs.plugins.signing) +} + +private val versionProperties = Properties().apply { + load(FileInputStream(File(rootProject.rootDir, Configs.VERSIONS_PROPERTIES))) +} + +private val currentVersion = versionProperties.getProperty(Configs.PUBLISH_VERSION) as String +private val libName = "phone-core" +private val libNamespace = "com.metacto.core.phone" + +version = currentVersion +group = Configs.GROUP_ID + +kotlin { + androidTarget { + compilerOptions { + freeCompilerArgs.addAll("-P", "plugin:org.jetbrains.kotlin.parcelize:additionalAnnotation=com.metacto.kmm.core.CommonParcelize") + } + compilations.all { + kotlinOptions { + jvmTarget = libs.versions.jvm.get() + } + } + publishLibraryVariants("debug", "release") + } + + val xcf = XCFramework() + listOf( + iosX64(), + iosArm64(), + iosSimulatorArm64() + ).forEach { + it.binaries.framework(libName) { + baseName = libName + xcf.add(this) + isStatic = true + } + } + + metadata { + compilations.matching { it.name == "iosMain" }.all { + compileTaskProvider.configure { enabled = false } + } + } + + sourceSets { + commonMain.dependencies { + implementation(project(":core:core")) + api(libs.libphonenumber) + } + + androidMain.dependencies { + // ANDROID ANDROID DEPENDENCIES + } + + iosMain.dependencies { + // IOS DEPENDENCIES + } + } + + task("testClasses") +} + +android { + namespace = libNamespace + compileSdk = libs.versions.compileSdk.get().toInt() + + sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml") + sourceSets["main"].res.srcDirs("src/androidMain/res") + sourceSets["main"].resources.srcDirs("src/commonMain/resources") + sourceSets["main"].res.srcDirs("src/androidMain/res", "src/commonMain/resources") + + defaultConfig { + minSdk = libs.versions.minSdk.get().toInt() + targetSdk = libs.versions.targetSdk.get().toInt() + consumerProguardFiles("consumer-rules.pro") + } + compileOptions { + sourceCompatibility = JavaVersion.toVersion(libs.versions.jvm.get()) + targetCompatibility = JavaVersion.toVersion(libs.versions.jvm.get()) + } +} + +publishing { + repositories { + val localProperties = gradleLocalProperties(rootDir, providers) + var publishUserRepo = localProperties.getProperty(Configs.PUBLISH_REPO_USER) + var publishTokenRepo = localProperties.getProperty(Configs.PUBLISH_REPO_TOKEN) + + if (publishUserRepo.isNullOrEmpty()) { + publishUserRepo = "" + localProperties.setProperty(Configs.PUBLISH_REPO_USER, publishUserRepo) + } + + if (publishTokenRepo.isNullOrEmpty()) { + publishTokenRepo = "" + localProperties.setProperty(Configs.PUBLISH_REPO_TOKEN, publishTokenRepo) + } + + if (publishUserRepo.isEmpty() || publishTokenRepo.isEmpty()) { + localProperties.store( + FileOutputStream(File(rootDir, Configs.LOCAL_PROPERTIES)), null + ) + } + + repositories { + maven(Configs.MAVEN_URL) { + name = Configs.PUBLISH_MAVEN_REPO_NAME + credentials { + username = publishUserRepo + password = publishTokenRepo + } + } + } + } +} + diff --git a/core/phone-core/src/androidMain/kotlin/com/metacto/core/phone/di/Di.android.kt b/core/phone-core/src/androidMain/kotlin/com/metacto/core/phone/di/Di.android.kt new file mode 100644 index 00000000..76448bf1 --- /dev/null +++ b/core/phone-core/src/androidMain/kotlin/com/metacto/core/phone/di/Di.android.kt @@ -0,0 +1,14 @@ +package com.metacto.core.phone.di + +import io.michaelrocks.libphonenumber.kotlin.MetadataLoader +import io.michaelrocks.libphonenumber.kotlin.metadata.source.AssetsMetadataLoader +import org.koin.android.ext.koin.androidApplication +import org.koin.dsl.module + +internal actual fun platformModule() = module { + // Add Android specific dependencies here + + single { + AssetsMetadataLoader(androidApplication().assets) + } +} \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/phoneNumber/IPhoneNumberManager.kt b/core/phone-core/src/commonMain/kotlin/com/metacto/core/phone/IPhoneNumberManager.kt similarity index 91% rename from coreapp/src/commonMain/kotlin/com/metacto/core/utils/phoneNumber/IPhoneNumberManager.kt rename to core/phone-core/src/commonMain/kotlin/com/metacto/core/phone/IPhoneNumberManager.kt index 754c3b5f..f10ba387 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/phoneNumber/IPhoneNumberManager.kt +++ b/core/phone-core/src/commonMain/kotlin/com/metacto/core/phone/IPhoneNumberManager.kt @@ -1,4 +1,4 @@ -package com.metacto.core.utils.phoneNumber +package com.metacto.core.phone val Class = IPhoneNumberManager::class diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/phoneNumber/PhoneNumberManager.kt b/core/phone-core/src/commonMain/kotlin/com/metacto/core/phone/PhoneNumberManager.kt similarity index 98% rename from coreapp/src/commonMain/kotlin/com/metacto/core/utils/phoneNumber/PhoneNumberManager.kt rename to core/phone-core/src/commonMain/kotlin/com/metacto/core/phone/PhoneNumberManager.kt index dd32b4e7..6f4b290d 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/phoneNumber/PhoneNumberManager.kt +++ b/core/phone-core/src/commonMain/kotlin/com/metacto/core/phone/PhoneNumberManager.kt @@ -1,4 +1,4 @@ -package com.metacto.core.utils.phoneNumber +package com.metacto.core.phone import io.michaelrocks.libphonenumber.kotlin.PhoneNumberUtil import io.michaelrocks.libphonenumber.kotlin.Phonenumber diff --git a/core/phone-core/src/commonMain/kotlin/com/metacto/core/phone/di/Di.kt b/core/phone-core/src/commonMain/kotlin/com/metacto/core/phone/di/Di.kt new file mode 100644 index 00000000..202934a4 --- /dev/null +++ b/core/phone-core/src/commonMain/kotlin/com/metacto/core/phone/di/Di.kt @@ -0,0 +1,23 @@ +package com.metacto.core.phone.di + +import com.metacto.core.phone.IPhoneNumberManager +import com.metacto.core.phone.PhoneNumberManager +import io.michaelrocks.libphonenumber.kotlin.PhoneNumberUtil +import org.koin.core.module.Module +import org.koin.dsl.module + +fun phoneCoreModule() = module { + // Common dependencies can be added here + + includes(platformModule()) + + single { + PhoneNumberManager(get()) + } + + single { + PhoneNumberUtil.createInstance(get()) + } +} + +internal expect fun platformModule(): Module \ No newline at end of file diff --git a/core/phone-core/src/iosMain/kotlin/com/metacto/core/phone/di/Di.ios.kt b/core/phone-core/src/iosMain/kotlin/com/metacto/core/phone/di/Di.ios.kt new file mode 100644 index 00000000..257e7ea5 --- /dev/null +++ b/core/phone-core/src/iosMain/kotlin/com/metacto/core/phone/di/Di.ios.kt @@ -0,0 +1,13 @@ +package com.metacto.core.phone.di + +import io.michaelrocks.libphonenumber.kotlin.MetadataLoader +import io.michaelrocks.libphonenumber.kotlin.metadata.init.ComposeResourceMetadataLoader +import org.koin.dsl.module + +internal actual fun platformModule() = module { + // Add iOS specific dependencies here + + single { + ComposeResourceMetadataLoader() + } +} \ No newline at end of file diff --git a/core/sample/build.gradle.kts b/core/sample/build.gradle.kts new file mode 100644 index 00000000..f10ff3fc --- /dev/null +++ b/core/sample/build.gradle.kts @@ -0,0 +1,129 @@ +import com.android.build.gradle.internal.cxx.configure.gradleLocalProperties +import org.jetbrains.kotlin.gradle.plugin.mpp.apple.XCFramework +import org.jetbrains.kotlin.konan.properties.Properties +import java.io.FileInputStream +import java.io.FileOutputStream + +plugins { + alias(libs.plugins.multiplatform) + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.parcelize) + alias(libs.plugins.maven.publish) + alias(libs.plugins.signing) +} + +private val versionProperties = Properties().apply { + load(FileInputStream(File(rootProject.rootDir, Configs.VERSIONS_PROPERTIES))) +} + +private val currentVersion = versionProperties.getProperty(Configs.PUBLISH_VERSION) as String +private val libName = "sample-core" +private val libNamespace = "com.metacto.core.sample" + +version = currentVersion +group = Configs.GROUP_ID + +kotlin { + androidTarget { + compilerOptions { + freeCompilerArgs.addAll("-P", "plugin:org.jetbrains.kotlin.parcelize:additionalAnnotation=com.metacto.kmm.core.CommonParcelize") + } + compilations.all { + kotlinOptions { + jvmTarget = libs.versions.jvm.get() + } + } + publishLibraryVariants("debug", "release") + } + + val xcf = XCFramework() + listOf( + iosX64(), + iosArm64(), + iosSimulatorArm64() + ).forEach { + it.binaries.framework(libName) { + baseName = libName + xcf.add(this) + isStatic = true + } + } + + metadata { + compilations.matching { it.name == "iosMain" }.all { + compileTaskProvider.configure { enabled = false } + } + } + + sourceSets { + commonMain.dependencies { + // Core + implementation(project(":core:core")) + } + + androidMain.dependencies { + // ANDROID ANDROID DEPENDENCIES + } + + iosMain.dependencies { + // IOS DEPENDENCIES + } + } + + task("testClasses") +} + +android { + namespace = libNamespace + compileSdk = libs.versions.compileSdk.get().toInt() + + sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml") + sourceSets["main"].res.srcDirs("src/androidMain/res") + sourceSets["main"].resources.srcDirs("src/commonMain/resources") + sourceSets["main"].res.srcDirs("src/androidMain/res", "src/commonMain/resources") + + defaultConfig { + minSdk = libs.versions.minSdk.get().toInt() + targetSdk = libs.versions.targetSdk.get().toInt() + consumerProguardFiles("consumer-rules.pro") + } + compileOptions { + sourceCompatibility = JavaVersion.toVersion(libs.versions.jvm.get()) + targetCompatibility = JavaVersion.toVersion(libs.versions.jvm.get()) + } +} + +//publishing { +// repositories { +// val localProperties = gradleLocalProperties(rootDir, providers) +// var publishUserRepo = localProperties.getProperty(Configs.PUBLISH_REPO_USER) +// var publishTokenRepo = localProperties.getProperty(Configs.PUBLISH_REPO_TOKEN) +// +// if (publishUserRepo.isNullOrEmpty()) { +// publishUserRepo = "" +// localProperties.setProperty(Configs.PUBLISH_REPO_USER, publishUserRepo) +// } +// +// if (publishTokenRepo.isNullOrEmpty()) { +// publishTokenRepo = "" +// localProperties.setProperty(Configs.PUBLISH_REPO_TOKEN, publishTokenRepo) +// } +// +// if (publishUserRepo.isEmpty() || publishTokenRepo.isEmpty()) { +// localProperties.store( +// FileOutputStream(File(rootDir, Configs.LOCAL_PROPERTIES)), null +// ) +// } +// +// repositories { +// maven(Configs.MAVEN_URL) { +// name = Configs.PUBLISH_MAVEN_REPO_NAME +// credentials { +// username = publishUserRepo +// password = publishTokenRepo +// } +// } +// } +// } +//} + diff --git a/core/sample/src/androidMain/kotlin/com/metacto/core/sample/di/Di.android.kt b/core/sample/src/androidMain/kotlin/com/metacto/core/sample/di/Di.android.kt new file mode 100644 index 00000000..2bada701 --- /dev/null +++ b/core/sample/src/androidMain/kotlin/com/metacto/core/sample/di/Di.android.kt @@ -0,0 +1,7 @@ +package com.metacto.core.sample.di + +import org.koin.dsl.module + +internal actual fun platformModule() = module { + // Add Android specific dependencies here +} \ No newline at end of file diff --git a/core/sample/src/commonMain/kotlin/com/metacto/core/sample/di/Di.kt b/core/sample/src/commonMain/kotlin/com/metacto/core/sample/di/Di.kt new file mode 100644 index 00000000..56456bd6 --- /dev/null +++ b/core/sample/src/commonMain/kotlin/com/metacto/core/sample/di/Di.kt @@ -0,0 +1,12 @@ +package com.metacto.core.sample.di + +import org.koin.core.module.Module +import org.koin.dsl.module + +fun sampleModule() = module { + // Common dependencies can be added here + + includes(platformModule()) +} + +internal expect fun platformModule(): Module \ No newline at end of file diff --git a/core/sample/src/iosMain/kotlin/com/metacto/core/sample/di/Di.ios.kt b/core/sample/src/iosMain/kotlin/com/metacto/core/sample/di/Di.ios.kt new file mode 100644 index 00000000..07e06489 --- /dev/null +++ b/core/sample/src/iosMain/kotlin/com/metacto/core/sample/di/Di.ios.kt @@ -0,0 +1,7 @@ +package com.metacto.core.sample.di + +import org.koin.dsl.module + +internal actual fun platformModule() = module { + // Add iOS specific dependencies here +} \ No newline at end of file diff --git a/coreapp/build.gradle.kts b/coreapp/build.gradle.kts deleted file mode 100644 index 3fdd6f4d..00000000 --- a/coreapp/build.gradle.kts +++ /dev/null @@ -1,234 +0,0 @@ -@file:Suppress("OPT_IN_USAGE") - -import com.android.build.gradle.internal.cxx.configure.gradleLocalProperties -import org.jetbrains.kotlin.gradle.dsl.JvmTarget - -plugins { - kotlin(Plugins.MULTIPLATFORM_PLUGIN) - id(Plugins.ANDROID_LIBRARY_PLUGIN) - id(Plugins.COMPOSE_PLUGIN) version Versions.COMPOSE - id(Plugins.COMPOSE_COMPILER_PLUGIN) version Versions.KOTLIN - id(Plugins.SERIALIZATION_PLUGIN) - id(Plugins.PARCELIZE_PLUGIN) - id(Plugins.SWIFT_KLIB) version Versions.SWIFT_KLIB - id(Plugins.MAVEN_PUBLISH) - id(Plugins.SIGNING) -} - -kotlin { - targetHierarchy.default() - - iosX64() - iosArm64() - iosSimulatorArm64() - - androidTarget { - compilerOptions { - jvmTarget.value(JvmTarget.JVM_17) - freeCompilerArgs.addAll("-P", "plugin:org.jetbrains.kotlin.parcelize:additionalAnnotation=com.metacto.core.utils.CommonParcelize") - } - - publishAllLibraryVariants() - publishLibraryVariantsGroupedByFlavor = true - } - - metadata { - compilations.matching { it.name == "iosMain" }.all { - compileTaskProvider.configure { enabled = false } - } - } - - sourceSets { - val commonMain by getting { - dependencies { - // Compose - api(Dependencies.Compose.RUNTIME) - api(Dependencies.Compose.FOUNDATION) - api(Dependencies.Compose.MATERIAL) - api(Dependencies.Compose.MATERIAL3) - api(Dependencies.Compose.ANIMATION) - api(Dependencies.Compose.ANIMATION_GRAPHICS) - api(Dependencies.Compose.EXTENDED_ICONS) - api(Dependencies.Compose.RESOURCES) - - // Voyager - api(Dependencies.Voyager.NAVIGATOR) - api(Dependencies.Voyager.BOTTOM_SHEET) - api(Dependencies.Voyager.TAB_NAVIGATOR) - api(Dependencies.Voyager.SCREEN_MODEL) - - // Koin - api(Dependencies.Koin.CORE) - api(Dependencies.Koin.COMPOSE) - - // Kotlin - api(Dependencies.Kotlin.DATE_TIME) - - // Coil - api(Dependencies.Coil.CORE) - api(Dependencies.Coil.COMPOSE) - api(Dependencies.Coil.NETWORK) - api(Dependencies.Coil.SVG) - - // GitLive - api(Dependencies.GitLive.CONFIG) - - // Others - api(Dependencies.STRAPI_KMM) - api(Dependencies.LIB_PHONE_NUMBER) - api(Dependencies.COMPOTTIE) - api(Dependencies.WEBVIEW) - api(Dependencies.SHIMMER) - implementation(Dependencies.KMP_NOTIFIER) - implementation("com.benasher44:uuid:0.8.4") // Needed for KmpNotifier (https://github.com/mirzemehdi/KMPNotifier/issues/30) - implementation(Dependencies.STATELY_COMMON) // Needed for KmpNotifier (https://github.com/mirzemehdi/KMPNotifier/issues/30) - } - } - - val androidMain by getting { - dependsOn(commonMain) - dependencies { - // Compose - api(Dependencies.Compose.UI_TOOLING) - - // Android X - api(Dependencies.AndroidX.ACTIVITY_COMPOSE) - api(Dependencies.AndroidX.APP_COMPAT) - api(Dependencies.AndroidX.CORE_KTS) - api(Dependencies.AndroidX.SECURITY_CRYPTO) - api(Dependencies.AndroidX.SPLASH_SCREEN) - - // Firebase - api(project.dependencies.platform(Dependencies.Firebase.BOM)) - api(Dependencies.Firebase.DYNAMIC_LINKS) - api(Dependencies.Firebase.CRASHLYTICS) - api(Dependencies.Firebase.ANALYTICS) - api(Dependencies.Firebase.MESSAGING) - api(Dependencies.Firebase.PLAY_SERVICES_AUTH) - - // Koin - api(Dependencies.Koin.ANDROID) - api(Dependencies.Koin.ANDROID_COMPOSE) - - // Voyager - api(Dependencies.Voyager.KOIN) - - // Exo Player - api(Dependencies.ExoPlayer.PLAYER) - api(Dependencies.ExoPlayer.HLS) - api(Dependencies.ExoPlayer.UI) - api(Dependencies.ExoPlayer.SESSION) - - // Youtube Player - api(Dependencies.YoutubePlayer.CORE) - api(Dependencies.YoutubePlayer.CUSTOM_UI) - - // Camera X - api(Dependencies.Camera.CAMERA_VIEW) - api(Dependencies.Camera.CAMERA2) - api(Dependencies.Camera.CORE) - api(Dependencies.Camera.LIFECYCLE) - api(Dependencies.Camera.VIDEO) - - // Others - api(Dependencies.ANDROID_IMAGE_PICKER) - api(Dependencies.ANDROID_CROPPER) - } - } - - val iosX64Main by getting - val iosArm64Main by getting - val iosSimulatorArm64Main by getting - val iosMain by getting { - dependsOn(commonMain) - iosX64Main.dependsOn(this) - iosArm64Main.dependsOn(this) - iosSimulatorArm64Main.dependsOn(this) - dependencies { - api(Dependencies.Compose.MATERIAL) - } - } - } -} - -android { - namespace = Configs.CORE_APP_ID - compileSdk = Configs.COMPILE_SDK_VERSION - - sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml") - sourceSets["main"].res.srcDirs("src/androidMain/res") - sourceSets["main"].resources.srcDirs("src/commonMain/resources") - sourceSets["main"].res.srcDirs("src/androidMain/res", "src/commonMain/resources") - - defaultConfig { - minSdk = Configs.MIN_SDK_VERSION - } - - compileOptions { - sourceCompatibility = Versions.JVM - targetCompatibility = Versions.JVM - } - - kotlin { - jvmToolchain(Versions.JVM.toString().toInt()) - } -} - -compose.resources { - publicResClass = false - packageOfResClass = "${Configs.CORE_APP_ID}.resources" - generateResClass = always -} - -val javadocJar by tasks.registering(Jar::class) { - archiveClassifier.set("javadoc") -} - -publishing { - repositories { - repositories { - maven("https://maven.pkg.github.com/Meta-CTO/CoreApp") { - name = "Github" - credentials { - username = gradleLocalProperties(rootDir, providers).getProperty("PUBLISH_REPO_USER") as String - password = gradleLocalProperties(rootDir, providers).getProperty("PUBLISH_REPO_TOKEN") as String - } - } - } - } - - publications.withType { - artifact(javadocJar) - groupId = "com.metacto" - version = gradleLocalProperties(rootDir, providers).getProperty("PUBLISH_VERSION") as String - - pom { - name.set("coreApp") - description.set("Compose Multiplatform library for MetaCTO core app module") - url.set("https://github.com/Meta-CTO/CoreApp") - - licenses { - license { - name.set("MIT") - url.set("https://opensource.org/licenses/MIT") - } - } - developers { - developer { - id.set("ahmedsalemelzeiny") - name.set("Ahmed Salem Elzeiny") - email.set("ahmedsalemelzeiny2013@gmail.com") - } - } - scm { - url.set("https://github.com/Meta-CTO/CoreApp") - } - } - } -} - -tasks.withType { - kotlinOptions { - jvmTarget = "17" - } -} \ No newline at end of file diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/auth/Auth.kt b/coreapp/src/androidMain/kotlin/com/metacto/core/auth/Auth.kt deleted file mode 100644 index 4fb98e1a..00000000 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/auth/Auth.kt +++ /dev/null @@ -1,84 +0,0 @@ -package com.metacto.core.auth - -import android.app.Activity -import android.content.Context -import android.content.Intent -import androidx.activity.compose.ManagedActivityResultLauncher -import androidx.activity.compose.rememberLauncherForActivityResult -import androidx.activity.result.ActivityResult -import androidx.activity.result.contract.ActivityResultContracts -import androidx.compose.runtime.Composable -import androidx.compose.runtime.remember -import androidx.compose.ui.platform.LocalContext -import com.metacto.core.utils.extensions.getActivity -import com.metacto.strapikmm.auth.AuthOptions -import dev.gitlive.firebase.auth.PhoneVerificationProvider -import java.util.concurrent.TimeUnit - -actual class AuthOptionsFactory( - private val context: Context, - private val launcher: ManagedActivityResultLauncher -) { - private var currentAuthOptions: AuthOptions? = null - - actual fun createAuthOptions(onCancelled: () -> Unit): AuthOptions { - currentAuthOptions = AuthOptions( - activity = context.getActivity()!!, - launcher = launcher, - onCanceled = { - onCancelled.invoke() - } - ) - - return currentAuthOptions!! - } - - internal fun onResult(result: ActivityResult) { - currentAuthOptions?.onResult?.invoke(result) - } -} - -@Composable -actual fun rememberAuthOptionsFactory(): AuthOptionsFactory { - // Init the factory - var factory: AuthOptionsFactory? = null - val context = LocalContext.current - - // Create the activity launcher - val launcher = rememberLauncherForActivityResult( - contract = ActivityResultContracts.StartActivityForResult(), - onResult = { - factory?.onResult(it) - } - ) - - // Create or get the factory - factory = remember { - AuthOptionsFactory( - context = context, - launcher = launcher - ) - } - - // Then return it - return factory -} - -@Composable -actual fun rememberPhoneVerificationProvider(): PhoneVerificationProvider { - val activity = LocalContext.current.getActivity()!! - return remember { - object : PhoneVerificationProvider { - override val activity: Activity = activity - override val timeout: Long = 60 - override val unit: TimeUnit = TimeUnit.SECONDS - - override fun onCodeSent(verificationId: String, triggerResend: () -> Unit) { - } - - override suspend fun getVerificationCode(): String { - return "" - } - } - } -} \ No newline at end of file diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/di/CorePlatformModule.kt b/coreapp/src/androidMain/kotlin/com/metacto/core/di/CorePlatformModule.kt deleted file mode 100644 index 73e94d6b..00000000 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/di/CorePlatformModule.kt +++ /dev/null @@ -1,175 +0,0 @@ -package com.metacto.core.di - -import com.metacto.core.CoreEnvironment -import com.metacto.core.domain.DiQualifiers -import com.metacto.core.domain.repos.RepositoriesFactory -import com.metacto.core.domain.repos.forceUpdate.ForceUpdateRepository -import com.metacto.core.permissions.IPermissionManager -import com.metacto.core.permissions.PermissionManager -import com.metacto.core.presentation.base.CommonViewModel -import com.metacto.core.presentation.camera.CameraController -import com.metacto.core.presentation.camera.CameraEngine -import com.metacto.core.presentation.camera.models.CameraLens -import com.metacto.core.presentation.components.audioPlayer.AudioPlayerManager -import com.metacto.core.presentation.components.videoPlayer.VideoPlayerManager -import com.metacto.core.presentation.itemPicker.NativeItemPicker -import com.metacto.core.utils.calendar.CalendarManager -import com.metacto.core.utils.calendar.ICalendarManager -import com.metacto.core.utils.eventBroadcaster.EventBroadcaster -import com.metacto.core.utils.file.FileManager -import com.metacto.core.utils.file.IFileManager -import com.metacto.core.utils.imagePreloader.IPreloader -import com.metacto.core.utils.imagePreloader.Preloader -import com.metacto.core.utils.language.ILanguageManager -import com.metacto.core.utils.language.LanguageManager -import com.metacto.core.utils.launchers.IIntentLauncher -import com.metacto.core.utils.launchers.IntentLauncher -import com.metacto.core.utils.media.IMediaManager -import com.metacto.core.utils.media.MediaManager -import com.metacto.core.utils.notification.INotificationManager -import com.metacto.core.utils.notification.NotificationManager -import com.metacto.coreApp.R -import com.metacto.strapikmm.errorhandling.SerializableNetworkError -import com.metacto.strapikmm.repos.AppConfigurationRepository -import com.mmk.kmpnotifier.notification.NotifierManager -import com.mmk.kmpnotifier.notification.configuration.NotificationPlatformConfiguration -import dev.gitlive.firebase.Firebase -import dev.gitlive.firebase.remoteconfig.remoteConfig -import io.michaelrocks.libphonenumber.kotlin.MetadataLoader -import io.michaelrocks.libphonenumber.kotlin.metadata.source.AssetsMetadataLoader -import org.koin.android.ext.koin.androidApplication -import org.koin.android.ext.koin.androidContext -import org.koin.androidx.viewmodel.dsl.viewModel -import org.koin.core.definition.Definition -import org.koin.core.definition.KoinDefinition -import org.koin.core.module.Module -import org.koin.core.qualifier.Qualifier -import org.koin.dsl.module -import kotlin.reflect.KClass - -actual fun corePlatformModule( - appStorageName: String, - coreEnvironment: CoreEnvironment, - shouldShowActualErrorMessages: Boolean, - errorClass: KClass -) = module { - single { - RepositoriesFactory( - context = androidContext(), - environment = get(), - appStorageName = appStorageName, - shouldShowActualErrorMessages = shouldShowActualErrorMessages, - errorClass = errorClass - ) - } - - single { - Preloader( - context = androidContext().applicationContext - ) - } - - single { - EventBroadcaster - } - - single { - Firebase.remoteConfig - } - - single { - NotificationManager( - context = androidContext(), - notifier = get() - ) - } - - single { - PermissionManager(androidContext()) - } - - single { - IntentLauncher(androidContext(), get()) - } - - single { - CalendarManager(androidContext(), get()) - } - - single { - LanguageManager(get()) - } - - single { - AssetsMetadataLoader(androidApplication().assets) - } - - single { - AppConfigurationRepository( - applicationContext = androidContext(), - appConfigurationService = get(), - sharedPreference = get(), - appConfigurationExpirationInMinutes = coreEnvironment.appConfigurationExpirationInMinutes - ) - } - - single { - ForceUpdateRepository( - appEnvironment = get(), - applicationContext = androidContext(), - appConfigurationRepository = get(), - remoteConfigs = get(), - ) - } - - single>(DiQualifiers.videoPlayerManagers) { - mutableMapOf() - } - - single>(DiQualifiers.audioPlayerManagers) { - mutableMapOf() - } - - single { - NotifierManager.apply { - initialize( - configuration = NotificationPlatformConfiguration.Android( - showPushNotification = coreEnvironment.showRemoteNotifications, - notificationChannelData = NotificationPlatformConfiguration.Android.NotificationChannelData(), - notificationIconResId = coreEnvironment.androidRemoteNotificationIcon - ?: R.drawable.ic_default_notifications_icon, - ) - ) - } - } - - single { - FileManager() - } - - single { - MediaManager() - } - - factory { (defaultCamera: CameraLens?) -> - val cameraEngine = CameraEngine( - context = androidContext(), - defaultCamera = defaultCamera ?: CameraLens.BACK - ) - CameraController( - permissionManager = get(), - cameraEngine = cameraEngine - ) - } - - single { - NativeItemPicker() - } -} - -actual inline fun Module.commonViewModel( - qualifier: Qualifier?, - noinline definition: Definition -): KoinDefinition { - return viewModel(qualifier, definition) -} \ No newline at end of file diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/DateHelper.android.kt b/coreapp/src/androidMain/kotlin/com/metacto/core/utils/DateHelper.android.kt deleted file mode 100644 index 04b0df60..00000000 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/DateHelper.android.kt +++ /dev/null @@ -1,137 +0,0 @@ -package com.metacto.core.utils - -import android.icu.text.SimpleDateFormat -import android.text.format.DateUtils -import kotlinx.datetime.Clock -import kotlinx.datetime.DayOfWeek -import kotlinx.datetime.Instant -import kotlinx.datetime.LocalDate -import kotlinx.datetime.TimeZone -import java.util.Calendar -import java.util.Locale -import java.util.TimeZone as JavaTimeZone - -actual typealias Date = java.util.Date - -actual fun Date.toMillis(): Long = this.time - -actual fun dateFromTimestamp(timestamp: Long): Date { - return Date(timestamp) -} - -@Deprecated("Use com.metacto.core.utils.date.DateTimeUtils instead", ReplaceWith("DateTimeUtils")) -actual object DateHelper { - actual fun format(instant: Instant, format: String): String { - val timestamp = instant.toEpochMilliseconds() - val date = Date(timestamp) - - val dateFormat = SimpleDateFormat(format, Locale.getDefault()) - return dateFormat.format(date) - } - - @Throws(Throwable::class) - actual fun stringToDate( - string: String, - format: String - ): Date { - val sdf = java.text.SimpleDateFormat(format, Locale.getDefault()) - return sdf.parse(string) ?: throw Throwable("Can't parse $string") - } - - @Throws(Throwable::class) - actual fun utcStringToDate( - string: String, - format: String - ): Date { - val sdf = java.text.SimpleDateFormat(format, Locale.getDefault()).apply { - timeZone = JavaTimeZone.getTimeZone("UTC") - } - - return sdf.parse(string) ?: throw Throwable("Can't convert $string using format ($format)") - } - - @Throws(Throwable::class) - actual fun dateToString( - date: Date, - format: String - ): String { - val sdf = java.text.SimpleDateFormat(format, Locale.getDefault()) - return sdf.format(date) - } - - @Throws(Throwable::class) - actual fun convertDateFormat( - date: String, - fromFormat: String, - toFormat: String - ): String { - val parsedDate = stringToDate(string = date, format = fromFormat) - return dateToString(date = parsedDate, format = toFormat) - } - - @Throws(Throwable::class) - actual fun dateToUTCString(date: Date, format: String): String { - val sdf = java.text.SimpleDateFormat(format, Locale.getDefault()).apply { - timeZone = JavaTimeZone.getTimeZone("UTC") - } - - return sdf.format(date) - } - - @Throws(Throwable::class) - actual fun daysInMonth(year: Int, month: Int): Int { - val calendar = Calendar.getInstance().apply { - // Reset the calendar day to the first day of the month to avoid rolling over to the next month - set(Calendar.DAY_OF_MONTH, 1) - set(Calendar.MONTH, month) - set(Calendar.YEAR, year) - } - - return calendar.getActualMaximum(Calendar.DATE) - } - - @Throws(Throwable::class) - actual fun timestampToReadableDate(timestamp: Long): String { - val now = java.util.Date().time - val difference = now - timestamp - - return when { - difference < DateUtils.MINUTE_IN_MILLIS -> "Just now" - else -> DateUtils - .getRelativeTimeSpanString(timestamp, now, DateUtils.MINUTE_IN_MILLIS) - .toString() - } - } - - @Throws(Throwable::class) - actual fun getDayOfMonthSuffix(date: Date): String { - return when (dateToString(date, "d").toIntOrNull()) { - 1 -> "st" - 2 -> "nd" - 3 -> "rd" - else -> "th" - } - } - - @Throws(Throwable::class) - actual fun getElapsedYears(date: Date): Int { - val millisInYear = 31536000000L - val millisDiff = Date().toMillis() - date.toMillis() - return (millisDiff.toDouble() / millisInYear.toDouble()).toInt() - } - - @Throws(Throwable::class) - actual fun getCurrentLocalDate(timeZone: TimeZone): LocalDate { - return Clock.System.getCurrentLocalDate(timeZone) - } - - @Throws(Throwable::class) - actual fun getMondayOfWeek(date: LocalDate): LocalDate { - return date.getDayOfWeek(DayOfWeek.MONDAY) - } - - @Throws(Throwable::class) - actual fun getSundayOfWeek(date: LocalDate): LocalDate { - return date.getDayOfWeek(DayOfWeek.SUNDAY) - } -} \ No newline at end of file diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/Serialization.kt b/coreapp/src/androidMain/kotlin/com/metacto/core/utils/Serialization.kt deleted file mode 100644 index 2b6590f1..00000000 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/Serialization.kt +++ /dev/null @@ -1,7 +0,0 @@ -package com.metacto.core.utils - -import android.os.Parcelable - -actual typealias CommonSerializable = java.io.Serializable - -actual typealias CommonParcelable = Parcelable \ No newline at end of file diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/calendar/CalendarManager.kt b/coreapp/src/androidMain/kotlin/com/metacto/core/utils/calendar/CalendarManager.kt deleted file mode 100644 index 2a3c117c..00000000 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/calendar/CalendarManager.kt +++ /dev/null @@ -1,122 +0,0 @@ -package com.metacto.core.utils.calendar - -import android.content.ContentValues -import android.content.Context -import android.content.Intent -import android.database.Cursor -import android.net.Uri -import android.provider.CalendarContract -import android.provider.CalendarContract.Events -import com.metacto.core.permissions.IPermissionManager -import com.metacto.core.permissions.enums.Permission -import com.metacto.core.utils.extensions.orOne -import kotlinx.coroutines.delay -import kotlinx.datetime.TimeZone - -class CalendarManager( - private val context: Context, - private val permissionManager: IPermissionManager -) : ICalendarManager { - - companion object { - // The indices for the projection array above. - private val CALENDER_PROJECTION = arrayOf( - CalendarContract.Calendars._ID, - CalendarContract.Calendars.VISIBLE, - ) - private const val PROJECTION_ID_INDEX = 0 - private const val PROJECTION_VISIBLE_INDEX = 1 - - } - - override suspend fun addEventToCalender( - eventTitle: String, - eventDescription: String, - eventStartTime: Long, - eventEndTime: Long, - onEventAdded: () -> Unit, - onEventError: (error: String) -> Unit, - ) { - - // request permission first if the permission granted it will add the event - permissionManager.requestPermission(Permission.CALENDER) - - // get the active calender id - val calenderId = getActiveCalender().orOne() - // add the event to calender - sendEventToCalender( - calenderId, - eventTitle, - eventDescription, - eventStartTime, - eventEndTime - ) - // need couple of second of wait to calender sync with the new event added - delay(2000) - onEventAdded.invoke() - - } - - private fun getActiveCalender(): Long? { - val uri: Uri = CalendarContract.Calendars.CONTENT_URI - val contentResolver = context.contentResolver - val selection = "" - val selectionArgs = emptyArray() - val cursor: Cursor? = - contentResolver.query(uri, CALENDER_PROJECTION, selection, selectionArgs, null) - - var calenderId: Long? = null - while (cursor?.moveToNext() == true) { - // Get the field values - val visible = cursor.getInt(PROJECTION_VISIBLE_INDEX) - - // check if the calender is visible or not - if (visible == 1) { - // return the calender id - calenderId = cursor.getLong(PROJECTION_ID_INDEX) - break - } - } - return calenderId - } - - private fun sendEventToCalender( - calenderId: Long, - title: String, - description: String, - startTime: Long, - endTime: Long - ) { - val contentResolver = context.contentResolver - -// Use the cursor to step through the returned records - val values = ContentValues().apply { - // The new display name for the calendar - put(Events.DTSTART, startTime) - put(Events.DTEND, endTime) - put(Events.TITLE, title) - put(Events.DESCRIPTION, description) - put(Events.CALENDAR_ID, calenderId) - put(Events.EVENT_TIMEZONE, TimeZone.currentSystemDefault().id) - } - val updateUri: Uri? = contentResolver.insert(Events.CONTENT_URI, values) - } - - private fun openCalenderEventIntent( - title: String, - description: String, - startTime: Long, - endTime: Long - ) { - val intent = Intent(Intent.ACTION_EDIT).apply { - setType("vnd.android.cursor.item/event") - putExtra(Events.TITLE, title) - putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, startTime) - putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endTime) - putExtra(Events.ALL_DAY, false)// periodicity - putExtra(Events.DESCRIPTION, description) - setFlags(Intent.FLAG_ACTIVITY_NEW_TASK) - } - context.startActivity(intent) - } -} \ No newline at end of file diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/contacts/ContactsCollectorOptions.kt b/coreapp/src/androidMain/kotlin/com/metacto/core/utils/contacts/ContactsCollectorOptions.kt deleted file mode 100644 index 5102afea..00000000 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/contacts/ContactsCollectorOptions.kt +++ /dev/null @@ -1,57 +0,0 @@ -package com.metacto.core.utils.contacts - -import android.content.Context -import androidx.activity.compose.rememberLauncherForActivityResult -import androidx.activity.result.ActivityResultLauncher -import androidx.activity.result.contract.ActivityResultContracts -import androidx.compose.runtime.Composable -import androidx.compose.runtime.remember -import androidx.compose.ui.platform.LocalContext -import com.metacto.core.utils.extensions.getActivity -import com.metacto.strapikmm.contact.ContactsDataCollectorOptions - -actual class ContactsCollectorOptionsFactory( - private val context: Context, - private val launcher: ActivityResultLauncher -) { - private var currentOptions: ContactsDataCollectorOptions? = null - - actual fun createOptions(): ContactsDataCollectorOptions { - currentOptions = ContactsDataCollectorOptions( - context = context.getActivity()!!, - launcher = launcher - ) - - return currentOptions!! - } - - internal fun onResult(result: Boolean) { - currentOptions?.onResult?.invoke(result) - } -} - -@Composable -actual fun rememberContactsCollectorOptionsFactory(): ContactsCollectorOptionsFactory { - // Init the factory - var factory: ContactsCollectorOptionsFactory? = null - val context = LocalContext.current - - // Create the activity launcher - val launcher = rememberLauncherForActivityResult( - contract = ActivityResultContracts.RequestPermission(), - onResult = { - factory?.onResult(it) - } - ) - - // Create or get the factory - factory = remember { - ContactsCollectorOptionsFactory( - context = context, - launcher = launcher - ) - } - - // Then return it - return factory -} \ No newline at end of file diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/deepLink/DynamicLinkProcessor.kt b/coreapp/src/androidMain/kotlin/com/metacto/core/utils/deepLink/DynamicLinkProcessor.kt deleted file mode 100644 index 13e8c383..00000000 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/deepLink/DynamicLinkProcessor.kt +++ /dev/null @@ -1,23 +0,0 @@ -package com.metacto.core.utils.deepLink - -import android.net.Uri -import com.google.firebase.dynamiclinks.ktx.dynamicLinks -import com.google.firebase.ktx.Firebase - -internal actual object DynamicLinkProcessor { - actual fun process( - url: String, - onSuccess: (String) -> Unit - ) { - Firebase.dynamicLinks - .getDynamicLink(Uri.parse(url)) - .addOnSuccessListener { - val deepLink = it?.link?.toString() - if (deepLink != null) { - onSuccess.invoke(it.toString()) - } - }.addOnFailureListener { - println("DynamicLinkProcessor:onFailure $it") - } - } -} \ No newline at end of file diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/extensions/ImageExtensions.kt b/coreapp/src/androidMain/kotlin/com/metacto/core/utils/extensions/ImageExtensions.kt deleted file mode 100644 index 2d0d51d8..00000000 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/extensions/ImageExtensions.kt +++ /dev/null @@ -1,24 +0,0 @@ -package com.metacto.core.utils.extensions - -import android.content.Context -import android.graphics.Bitmap -import coil3.ImageLoader -import coil3.annotation.ExperimentalCoilApi -import coil3.request.ImageRequest -import coil3.request.SuccessResult -import coil3.request.allowHardware -import coil3.toBitmap - -@OptIn(ExperimentalCoilApi::class) -suspend fun String.downloadBitmap(context: Context): Bitmap? { - val loader = ImageLoader(context) - val request = ImageRequest.Builder(context) - .data(this) - .allowHardware(false) - .build() - - return when (val result = loader.execute(request)) { - is SuccessResult -> result.image.toBitmap() - else -> null - } -} \ No newline at end of file diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/file/FileManager.kt b/coreapp/src/androidMain/kotlin/com/metacto/core/utils/file/FileManager.kt deleted file mode 100644 index 6b025e27..00000000 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/file/FileManager.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.metacto.core.utils.file - -import java.io.File - -class FileManager : IFileManager { - - override fun readFile(filePath: String): ByteArray { - return File(filePath).readBytes() - } - - override fun clearFolder(folderPath: String): Boolean { - return File(folderPath).deleteRecursively() - } - - override fun deleteFile(filePath: String): Boolean { - return File(filePath).delete() - } -} \ No newline at end of file diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/notification/NotificationChannel.kt b/coreapp/src/androidMain/kotlin/com/metacto/core/utils/notification/NotificationChannel.kt deleted file mode 100644 index 56c0a426..00000000 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/notification/NotificationChannel.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.metacto.core.utils.notification - -import com.metacto.core.utils.CommonParcelable -import com.metacto.core.utils.CommonParcelize - -@CommonParcelize -data class NotificationChannel( - val id: String, - val name: String, -) : CommonParcelable \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/CoreEnvironment.kt b/coreapp/src/commonMain/kotlin/com/metacto/core/CoreEnvironment.kt deleted file mode 100644 index 7ca4b5dc..00000000 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/CoreEnvironment.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.metacto.core - -import com.metacto.strapikmm.datasource.network.NetworkLogLevel - -open class CoreEnvironment( - open val title: String, - open val baseUrl: String, - open val networkLogLevel: NetworkLogLevel, - open val iosAppStoreId: String, - open val androidAppId: String, - open val forceUpdateRemoteConfigKey: String? = null, - open val currentAppConfigurationVersion: Int, - open val appConfigurationExpirationInMinutes: Long, - open val androidRemoteNotificationIcon: Int? = null, - open val showRemoteNotifications: Boolean = false, - open val askRemoteNotificationPermissionOnStart: Boolean = false, - open val enableSwipeToGoBack: Boolean = false -) \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/auth/Auth.kt b/coreapp/src/commonMain/kotlin/com/metacto/core/auth/Auth.kt deleted file mode 100644 index 129e3f44..00000000 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/auth/Auth.kt +++ /dev/null @@ -1,15 +0,0 @@ -package com.metacto.core.auth - -import androidx.compose.runtime.Composable -import com.metacto.strapikmm.auth.AuthOptions -import dev.gitlive.firebase.auth.PhoneVerificationProvider - -expect class AuthOptionsFactory { - fun createAuthOptions(onCancelled: () -> Unit): AuthOptions -} - -@Composable -expect fun rememberAuthOptionsFactory(): AuthOptionsFactory - -@Composable -expect fun rememberPhoneVerificationProvider(): PhoneVerificationProvider \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/di/CoreModule.kt b/coreapp/src/commonMain/kotlin/com/metacto/core/di/CoreModule.kt deleted file mode 100644 index de1e2aa5..00000000 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/di/CoreModule.kt +++ /dev/null @@ -1,133 +0,0 @@ -package com.metacto.core.di - -import com.metacto.core.CoreEnvironment -import com.metacto.core.domain.repos.RepositoriesFactory -import com.metacto.core.domain.repos.UploadRepository -import com.metacto.core.navigation.NavManager -import com.metacto.core.utils.DateHelper -import com.metacto.core.utils.deepLink.DeepLinkManager -import com.metacto.core.utils.deepLink.DeepLinkParser -import com.metacto.core.utils.deepLink.IDeepLinkManager -import com.metacto.core.utils.phoneNumber.IPhoneNumberManager -import com.metacto.core.utils.phoneNumber.PhoneNumberManager -import com.metacto.core.utils.remoteConfigs.FirebaseRemoteConfigs -import com.metacto.core.utils.remoteConfigs.IRemoteConfigs -import com.metacto.core.utils.resources.IResourceProvider -import com.metacto.core.utils.resources.ResourceProvider -import com.metacto.strapikmm.auth.Authenticator -import com.metacto.strapikmm.auth.FirebaseAuthenticator -import com.metacto.strapikmm.errorhandling.SerializableNetworkError -import com.metacto.strapikmm.repos.LogoutUseCase -import com.metacto.strapikmm.util.Logger -import dev.gitlive.firebase.Firebase -import dev.gitlive.firebase.auth.ActionCodeSettings -import dev.gitlive.firebase.auth.auth -import io.michaelrocks.libphonenumber.kotlin.PhoneNumberUtil -import org.koin.dsl.module -import kotlin.reflect.KClass -import com.metacto.strapikmm.repos.AuthRepository as StrapiAuthRepository -import com.metacto.strapikmm.repos.UserRepository as StrapiUserRepository - -fun coreModule( - environment: CoreEnvironment, - actionCodeSettings: ActionCodeSettings, - appStorageName: String, - shouldShowActualErrorMessages: Boolean, - errorClass: KClass, - deepLinkParsers: Map = emptyMap() -) = module { - - includes( - corePlatformModule( - appStorageName, - environment, - shouldShowActualErrorMessages, - errorClass, - ) - ) - - includes(coreViewModelsModule) - - single { - environment - } - - single { - NavManager() - } - - single { - Firebase.auth - } - - single { - LogoutUseCase(get()) - } - - single { - get>().strapiService - } - - single { - get>().sharedPreference - } - - single { - StrapiUserRepository(get(), get(), get()) - } - - single { - FirebaseAuthenticator( - actionCodeSettings = actionCodeSettings, - sharedPreference = get() - ) - } - - single { - StrapiAuthRepository( - authService = get(), - userRepository = get(), - sharedPreference = get(), - logoutUseCase = get(), - authenticator = get(), - ) - } - - single { - PhoneNumberManager(get()) - } - - single { - PhoneNumberUtil.createInstance(get()) - } - - single { - FirebaseRemoteConfigs( - kmmPreference = get(), - firebaseConfigs = get() - ) - } - - single { - Logger("") - } - - single { - DateHelper - } - - single { - DeepLinkManager( - appLogger = get(), - parsers = deepLinkParsers - ) - } - - single { - ResourceProvider - } - - single { - UploadRepository(get(), get(), get()) - } -} \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/di/CorePlatformModule.kt b/coreapp/src/commonMain/kotlin/com/metacto/core/di/CorePlatformModule.kt deleted file mode 100644 index 10d44e1b..00000000 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/di/CorePlatformModule.kt +++ /dev/null @@ -1,22 +0,0 @@ -package com.metacto.core.di - -import com.metacto.core.CoreEnvironment -import com.metacto.core.presentation.base.CommonViewModel -import com.metacto.strapikmm.errorhandling.SerializableNetworkError -import org.koin.core.definition.Definition -import org.koin.core.definition.KoinDefinition -import org.koin.core.module.Module -import org.koin.core.qualifier.Qualifier -import kotlin.reflect.KClass - -expect fun corePlatformModule( - appStorageName: String, - coreEnvironment: CoreEnvironment, - shouldShowActualErrorMessages: Boolean, - errorClass: KClass -): Module - -expect inline fun Module.commonViewModel( - qualifier: Qualifier? = null, - noinline definition: Definition -): KoinDefinition \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/di/CoreViewModelsModule.kt b/coreapp/src/commonMain/kotlin/com/metacto/core/di/CoreViewModelsModule.kt deleted file mode 100644 index 4c69448a..00000000 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/di/CoreViewModelsModule.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.metacto.core.di - -import com.metacto.core.presentation.imagePicker.ImagePickerViewModel -import com.metacto.core.presentation.itemPicker.ItemPickerViewModel -import com.metacto.core.presentation.options.OptionsViewModel -import com.metacto.core.presentation.youtube.YoutubeViewModel -import org.koin.dsl.module - -internal val coreViewModelsModule = module { - commonViewModel { ImagePickerViewModel() } - commonViewModel { OptionsViewModel() } - commonViewModel { ItemPickerViewModel() } - commonViewModel { YoutubeViewModel() } -} \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/domain/repos/RepositoriesFactory.kt b/coreapp/src/commonMain/kotlin/com/metacto/core/domain/repos/RepositoriesFactory.kt deleted file mode 100644 index 343ae511..00000000 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/domain/repos/RepositoriesFactory.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.metacto.core.domain.repos - -import com.metacto.core.CoreEnvironment -import com.metacto.strapikmm.datasource.network.services.strapi.StrapiService -import com.metacto.strapikmm.errorhandling.SerializableNetworkError -import com.metacto.strapikmm.sharedpreference.KmmPreference -import kotlin.reflect.KClass - -expect open class RepositoriesFactory { - val sharedPreference: KmmPreference - val strapiService: StrapiService - val environment: CoreEnvironment - val appStorageName: String - val shouldShowActualErrorMessages: Boolean - val errorClass: KClass -} \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/domain/repos/forceUpdate/AppUpdateSource.kt b/coreapp/src/commonMain/kotlin/com/metacto/core/domain/repos/forceUpdate/AppUpdateSource.kt deleted file mode 100644 index f3a106b5..00000000 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/domain/repos/forceUpdate/AppUpdateSource.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.metacto.core.domain.repos.forceUpdate - -enum class AppUpdateSource { - REMOTE_CONFIGS, - STRAPI_CONFIGS -} \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/domain/repos/forceUpdate/ForceUpdateRepository.kt b/coreapp/src/commonMain/kotlin/com/metacto/core/domain/repos/forceUpdate/ForceUpdateRepository.kt deleted file mode 100644 index c3181316..00000000 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/domain/repos/forceUpdate/ForceUpdateRepository.kt +++ /dev/null @@ -1,64 +0,0 @@ -package com.metacto.core.domain.repos.forceUpdate - -import com.metacto.core.CoreEnvironment -import com.metacto.core.domain.repos.forceUpdate.AppUpdateSource.REMOTE_CONFIGS -import com.metacto.core.domain.repos.forceUpdate.AppUpdateSource.STRAPI_CONFIGS -import com.metacto.core.presentation.base.getStoreId -import com.metacto.core.utils.remoteConfigs.IRemoteConfigs -import com.metacto.strapikmm.appconfigversion.AppConfigurationVersion -import com.metacto.strapikmm.appconfigversion.AppVersion -import com.metacto.strapikmm.appconfigversion.AppVersionValidator -import com.metacto.strapikmm.appconfigversion.UpdateType -import com.metacto.strapikmm.repos.AppConfigurationRepository -import kotlinx.serialization.json.Json - -class ForceUpdateRepository( - private val appEnvironment: CoreEnvironment, - private val appConfigurationRepository: AppConfigurationRepository, - private val remoteConfigs: IRemoteConfigs, - private val applicationContext: Any? = null, -) { - @Throws(Throwable::class) - suspend fun checkForceUpdate(appUpdateSource: AppUpdateSource): ForceUpdateResponse? { - val appUpdateResult = when (appUpdateSource) { - REMOTE_CONFIGS -> { - // fetch the remote config - val forceUpdateRemoteConfig = remoteConfigs.forceGetString( - appEnvironment.forceUpdateRemoteConfigKey.orEmpty() - ) - - // start handle the force update from remote config - val forceUpdate = forceUpdateRemoteConfig?.let { - Json.decodeFromString>(it) - } - - // return the validation - AppVersionValidator.checkRequiredUpdate(forceUpdate.orEmpty(), applicationContext) - } - - STRAPI_CONFIGS -> { - appConfigurationRepository.checkAppUpdates( - appConfigurationQueryBuilder = { populate("*") }, - currentAppConfigurationVersion = appEnvironment.currentAppConfigurationVersion - ) - } - } - - // Check the force update type and return the required action - return when (appUpdateResult.updateType) { - UpdateType.REQUIRED, - UpdateType.OPTIONAL -> { - val isRequired = appUpdateResult.updateType == UpdateType.REQUIRED - ForceUpdateResponse( - appUpdateResult.message, - isRequired, - appEnvironment.getStoreId() - ) - } - - UpdateType.NONE -> { - null - } - } - } -} \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/domain/repos/forceUpdate/ForceUpdateResponse.kt b/coreapp/src/commonMain/kotlin/com/metacto/core/domain/repos/forceUpdate/ForceUpdateResponse.kt deleted file mode 100644 index 3fcc8064..00000000 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/domain/repos/forceUpdate/ForceUpdateResponse.kt +++ /dev/null @@ -1,7 +0,0 @@ -package com.metacto.core.domain.repos.forceUpdate - -data class ForceUpdateResponse( - val message: String, - val isRequired: Boolean, - val appId: String -) \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/navigation/NavDestination.kt b/coreapp/src/commonMain/kotlin/com/metacto/core/navigation/NavDestination.kt deleted file mode 100644 index ae014451..00000000 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/navigation/NavDestination.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.metacto.core.navigation - -import com.metacto.core.presentation.base.BaseScreen - -typealias NavDestination = BaseScreen<*> \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/navigation/NavEffect.kt b/coreapp/src/commonMain/kotlin/com/metacto/core/navigation/NavEffect.kt deleted file mode 100644 index dc22b002..00000000 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/navigation/NavEffect.kt +++ /dev/null @@ -1,45 +0,0 @@ -package com.metacto.core.navigation - -import kotlinx.coroutines.CompletableDeferred -import kotlin.reflect.KClass - -sealed class NavEffect { - data class NavigateTo( - val destination: NavDestination, - val behaviour: NavigateBehaviour - ) : NavEffect() - - data class ClearAndNavigateTo(val destination: NavDestination) : NavEffect() - - data class PopToExclusive(val destClass: KClass) : NavEffect() - - data class PopToInclusive(val destClass: KClass) : NavEffect() - - data class PopByCount(val popCount: Int) : NavEffect() - - data class NavigateAndPopCurrent(val destination: NavDestination) : NavEffect() - - data class NavigateAndPopToExclusive( - val navToDest: NavDestination, - val popToDestClass: KClass - ) : NavEffect() - - data class NavigateAndPopToInclusive( - val navToDest: NavDestination, - val popToDestClass: KClass - ) : NavEffect() - - data class NavigateToBottomSheet(val destination: NavDestination) : NavEffect() - - data class CheckScreenByTag( - val tag: String, - val result: CompletableDeferred - ) : NavEffect() - - data class CheckScreenByClass( - val clazz: KClass, - val result: CompletableDeferred - ) : NavEffect() - - data object GoBack : NavEffect() -} \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/navigation/NavigateBehaviour.kt b/coreapp/src/commonMain/kotlin/com/metacto/core/navigation/NavigateBehaviour.kt deleted file mode 100644 index dd95dd89..00000000 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/navigation/NavigateBehaviour.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.metacto.core.navigation - -import com.metacto.core.utils.CommonParcelable -import com.metacto.core.utils.CommonParcelize -import com.metacto.core.utils.CommonSerializable - -@CommonParcelize -enum class NavigateBehaviour : CommonParcelable, CommonSerializable { - Normal, - ReplaceIfCurrent, - KeepIfCurrent -} \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/base/BaseSheet.kt b/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/base/BaseSheet.kt deleted file mode 100644 index 20b1296b..00000000 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/base/BaseSheet.kt +++ /dev/null @@ -1,9 +0,0 @@ -package com.metacto.core.presentation.base - -import androidx.compose.runtime.Composable - -abstract class BaseSheet> : BaseScreen() { - - @Composable - override fun Content() {} -} \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/base/BaseTabScreen.kt b/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/base/BaseTabScreen.kt deleted file mode 100644 index f949bfa6..00000000 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/base/BaseTabScreen.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.metacto.core.presentation.base - -import androidx.compose.ui.graphics.vector.ImageVector - -abstract class BaseTabScreen> : BaseScreen() { - open val tabTitle: String = "" - open val tabIconRes: String? = null - open val tabIconVector: ImageVector? = null - - open fun onDisplayed() { - } - - open fun onHidden() { - } - - open fun onNavBarTabClicked() { - } -} diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/camera/models/CameraLens.kt b/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/camera/models/CameraLens.kt deleted file mode 100644 index 8ee1351d..00000000 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/camera/models/CameraLens.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.metacto.core.presentation.camera.models - -enum class CameraLens { - FRONT, - BACK -} \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/BaseButton.kt b/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/BaseButton.kt deleted file mode 100644 index 412fa93f..00000000 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/BaseButton.kt +++ /dev/null @@ -1,164 +0,0 @@ -package com.metacto.core.presentation.components.buttons - -import androidx.compose.foundation.BorderStroke -import androidx.compose.foundation.Image -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.PaddingValues -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.heightIn -import androidx.compose.foundation.layout.size -import androidx.compose.material3.Button -import androidx.compose.material3.ButtonDefaults -import androidx.compose.material3.CircularProgressIndicator -import androidx.compose.material3.ProgressIndicatorDefaults -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.Shape -import androidx.compose.ui.graphics.painter.Painter -import androidx.compose.ui.graphics.vector.ImageVector -import androidx.compose.ui.layout.ContentScale -import androidx.compose.ui.text.TextStyle -import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.components.visibilities.FadeVisibility -import com.metacto.core.presentation.theme.CoreTheme.shapes -import com.metacto.core.presentation.theme.CoreTheme.spacings -import com.metacto.core.presentation.theme.CoreTheme.typography -import com.metacto.core.utils.extensions.orZero -import com.metacto.core.utils.extensions.tintIfNotNull - -@Composable -fun BaseButton( - modifier: Modifier = Modifier, - text: String? = null, - textStyle: TextStyle = typography.btnLabelMedium, - textColor: Color, - shape: Shape = shapes.small, - minHeight: Dp = spacings.btnMinHeightNormal, - backgroundColor: Color, - disabledBackgroundColor: Color = backgroundColor.copy(alpha = 0.3f), - border: BorderStroke? = null, - iconSize: Dp = spacings.iconLarge, - iconColor: Color?, - startIconPainter: Painter? = null, - startIconVector: ImageVector? = null, - endIconPainter: Painter? = null, - endIconVector: ImageVector? = null, - isEnabled: Boolean = true, - isDimmed: Boolean = false, - isLoading: Boolean = false, - loadingColor: Color = ProgressIndicatorDefaults.circularColor, - contentSpacing: Dp = spacings.paddingXLarge, - elevation: Dp = spacings.btnElevation, - contentAlignment: Alignment.Horizontal = Alignment.CenterHorizontally, - padding: PaddingValues = PaddingValues( - vertical = spacings.btnPaddingVertical, - horizontal = spacings.btnPaddingHorizontal - ), - onClick: () -> Unit = {} -) { - // Prepare real values - val realIsEnabled = isEnabled && isLoading.not() - val realDisabledBgColor = if (isLoading) backgroundColor else disabledBackgroundColor - val realBgColor = if (isDimmed) disabledBackgroundColor else backgroundColor - - // Render button - Button( - modifier = modifier.heightIn(min = minHeight + border?.width.orZero()), - shape = shape, - border = border, - enabled = realIsEnabled, - onClick = onClick, - colors = ButtonDefaults.buttonColors( - containerColor = realBgColor, - disabledContainerColor = realDisabledBgColor - ), - elevation = ButtonDefaults.buttonElevation( - defaultElevation = elevation, - pressedElevation = elevation, - hoveredElevation = elevation - ), - contentPadding = padding - ) { - // Container box - Box( - contentAlignment = Alignment.Center - ) { - // Loading indicator - FadeVisibility(visible = isLoading) { - CircularProgressIndicator( - color = loadingColor, - strokeWidth = spacings.btnLoadingStroke, - modifier = Modifier.size(spacings.btnLoadingSize) - ) - } - - // Content row - Row( - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.spacedBy( - space = contentSpacing, - alignment = contentAlignment - ) - ) { - // Render start icon if required - if (startIconVector != null) { - Image( - imageVector = startIconVector, - colorFilter = tintIfNotNull(iconColor), - contentDescription = null, - contentScale = ContentScale.Fit, - modifier = Modifier.size(iconSize) - ) - } else if (startIconPainter != null) { - Image( - painter = startIconPainter, - colorFilter = tintIfNotNull(iconColor), - contentDescription = null, - contentScale = ContentScale.Fit, - modifier = Modifier.size(iconSize) - ) - } - - // Render text - FadeVisibility( - visible = isLoading.not(), - modifier = Modifier.weight( - weight = 1f, - fill = false - ) - ) { - Text( - text = text.orEmpty(), - textAlign = TextAlign.Center, - color = textColor, - style = textStyle - ) - } - - // Render end icon if required - if (endIconVector != null) { - Image( - imageVector = endIconVector, - colorFilter = tintIfNotNull(iconColor), - contentDescription = null, - contentScale = ContentScale.Fit, - modifier = Modifier.size(iconSize) - ) - } else if (endIconPainter != null) { - Image( - painter = endIconPainter, - colorFilter = tintIfNotNull(iconColor), - contentDescription = null, - contentScale = ContentScale.Fit, - modifier = Modifier.size(iconSize) - ) - } - } - } - } -} \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/imagePicker/ImagePicker.kt b/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/imagePicker/ImagePicker.kt deleted file mode 100644 index 93a656c7..00000000 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/imagePicker/ImagePicker.kt +++ /dev/null @@ -1,23 +0,0 @@ -package com.metacto.core.presentation.components.imagePicker - -import androidx.compose.runtime.Composable - -expect class ImagePicker { - val enableCropping: Boolean - val aspectRatioX: Int? - val aspectRatioY: Int? - - @Composable - fun registerPicker(onImagePicked: (ByteArray) -> Unit) - - fun pickFromGallery() - - fun captureUsingCamera() -} - -@Composable -expect fun rememberImagePicker( - enableCropping: Boolean, - aspectRatioX: Int?, - aspectRatioY: Int? -): ImagePicker \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/YouTubeVideoId.kt b/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/YouTubeVideoId.kt deleted file mode 100644 index 5e9fc461..00000000 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/YouTubeVideoId.kt +++ /dev/null @@ -1,3 +0,0 @@ -package com.metacto.core.presentation.components.youtubePlayer - -internal data class YouTubeVideoId(val id: String) \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/itemPicker/models/PickerItem.kt b/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/itemPicker/models/PickerItem.kt deleted file mode 100644 index ac3a751f..00000000 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/itemPicker/models/PickerItem.kt +++ /dev/null @@ -1,9 +0,0 @@ -package com.metacto.core.presentation.itemPicker.models - -import com.metacto.core.utils.CommonParcelable -import com.metacto.core.utils.CommonSerializable - -interface PickerItem : CommonParcelable, CommonSerializable { - val key: String - val title: String -} \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/options/OptionsSheet.kt b/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/options/OptionsSheet.kt deleted file mode 100644 index bf465f80..00000000 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/options/OptionsSheet.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.metacto.core.presentation.options - -import com.metacto.core.presentation.base.BaseSheet -import com.metacto.core.presentation.options.models.OptionUIModel - -expect class OptionsSheet( - options: List -) : BaseSheet { - - val options: List -} \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/DateHelper.kt b/coreapp/src/commonMain/kotlin/com/metacto/core/utils/DateHelper.kt deleted file mode 100644 index c5958479..00000000 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/DateHelper.kt +++ /dev/null @@ -1,174 +0,0 @@ -package com.metacto.core.utils - -import com.metacto.core.domain.CoreConstants -import com.metacto.strapikmm.util.DatetimeUtil -import com.metacto.strapikmm.util.minusDays -import com.metacto.strapikmm.util.plusDays -import com.metacto.strapikmm.util.toLocalDate -import kotlinx.datetime.Clock -import kotlinx.datetime.DayOfWeek -import kotlinx.datetime.Instant -import kotlinx.datetime.LocalDate -import kotlinx.datetime.LocalDateTime -import kotlinx.datetime.LocalTime -import kotlinx.datetime.TimeZone -import kotlinx.datetime.atStartOfDayIn -import kotlinx.datetime.atTime -import kotlinx.datetime.isoDayNumber -import kotlinx.datetime.toInstant -import kotlinx.datetime.toLocalDateTime - -@Deprecated("Use com.metacto.core.utils.date.DateTimeUtils instead", ReplaceWith("DateTimeUtils")) -expect object DateHelper { - fun format(instant: Instant, format: String): String - - @Throws(Throwable::class) - fun stringToDate(string: String, format: String): Date - - @Throws(Throwable::class) - fun utcStringToDate(string: String, format: String): Date - - @Throws(Throwable::class) - fun dateToString(date: Date, format: String): String - - @Throws(Throwable::class) - fun convertDateFormat(date: String, fromFormat: String, toFormat: String): String - - @Throws(Throwable::class) - fun dateToUTCString(date: Date, format: String): String - - @Throws(Throwable::class) - fun daysInMonth(year: Int, month: Int): Int - - @Throws(Throwable::class) - fun timestampToReadableDate(timestamp: Long): String - - @Throws(Throwable::class) - fun getDayOfMonthSuffix(date: Date): String - - @Throws(Throwable::class) - fun getElapsedYears(date: Date): Int - - @Throws(Throwable::class) - fun getCurrentLocalDate(timeZone: TimeZone = TimeZone.currentSystemDefault()): LocalDate - - @Throws(Throwable::class) - fun getMondayOfWeek(date: LocalDate): LocalDate - - @Throws(Throwable::class) - fun getSundayOfWeek(date: LocalDate): LocalDate -} - -expect class Date() - -expect fun Date.toMillis(): Long - -expect fun dateFromTimestamp(timestamp: Long): Date - -fun getCurrentDate(): LocalDate { - return DatetimeUtil.now().toLocalDate() -} - -fun getCurrentTime(timeZone: TimeZone = TimeZone.currentSystemDefault()): LocalTime { - return Clock.System.now().toLocalDateTime(timeZone).time -} - -fun LocalTime.get12FormatHour(): Int { - val validHour = hour.mod(12) - return if (validHour == 0) 12 else validHour -} - -fun LocalTime.isAM(): Boolean { - return hour in 0 until 12 -} - -fun LocalTime.isPM(): Boolean { - return hour in 12 until 24 -} - -fun LocalTime.to12FormatString(): String { - val hour = (hour % 12).toString().padStart(2, '0') - val period = if (this.hour < 12) "AM" else "PM" - val minute = minute.toString().padStart(2, '0') - return "$hour:$minute $period" -} - -fun LocalDate.mergeWith(localTime: LocalTime): LocalDateTime { - return atTime(localTime) -} - -fun LocalDateTime.toInstant(): Instant { - return this.toInstant(TimeZone.currentSystemDefault()) -} - -fun LocalDate.toLocalDateTime(): LocalDateTime { - return LocalDateTime( - date = this, - time = LocalTime(0, 0) - ) -} - -fun LocalDate.toInstant(): Instant { - return this.toLocalDateTime().toInstant() -} - -fun LocalDate.toEpochMilliseconds(): Long { - return this.atStartOfDayIn(TimeZone.UTC).toEpochMilliseconds() -} - -fun Long.toLocalDate(): LocalDate { - return this.toLocalDate().toLocalDate() -} - -fun nowInstant(): Instant { - return DatetimeUtil.now().toInstant(TimeZone.currentSystemDefault()) -} - -fun LocalDate.toFormattedDate(format: String): String { - return DateHelper.format( - instant = this.toInstant(), - format = format - ) -} - -fun LocalDate.toServerDate(): String { - return this.toFormattedDate(CoreConstants.SERVER_DATE_FORMAT) -} - - -fun String.parseServerDate(): LocalDate? { - return try { - DateHelper.stringToDate( - string = this, - format = CoreConstants.SERVER_DATE_FORMAT - ).toMillis().toLocalDate().date - } catch (_: Throwable) { - null - } -} - -fun String.parseDate(format: String): LocalDate? { - return try { - DateHelper.stringToDate( - string = this, - format = format - ).toMillis().toLocalDate().date - } catch (_: Throwable) { - null - } -} - -fun Clock.getCurrentLocalDate(timeZone: TimeZone = TimeZone.currentSystemDefault()): LocalDate { - return this.now().toLocalDateTime(timeZone).date -} - -fun LocalDate.getDayOfWeek(dayOfWeek: DayOfWeek): LocalDate { - val currentDayOfWeek = this.dayOfWeek - return this.plusDays(dayOfWeek.isoDayNumber - currentDayOfWeek.isoDayNumber) -} - -fun getCurrentWeekDates(timeZone: TimeZone = TimeZone.currentSystemDefault()): List { - val currentDate = Clock.System.now().toLocalDateTime(timeZone).date - val startOfWeek = currentDate.minusDays(currentDate.dayOfWeek.isoDayNumber % 7) - return (0..6).map { startOfWeek.plusDays(it) } -} \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/ReactiveEvents.kt b/coreapp/src/commonMain/kotlin/com/metacto/core/utils/ReactiveEvents.kt deleted file mode 100644 index e530f8a2..00000000 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/ReactiveEvents.kt +++ /dev/null @@ -1,29 +0,0 @@ -@file:OptIn(DelicateCoroutinesApi::class) - -package com.metacto.core.utils - -import kotlinx.coroutines.DelicateCoroutinesApi -import kotlinx.coroutines.GlobalScope -import kotlinx.coroutines.flow.MutableSharedFlow -import kotlinx.coroutines.flow.asSharedFlow -import kotlinx.coroutines.flow.collectLatest -import kotlinx.coroutines.flow.filter -import kotlinx.coroutines.launch - -class ReactiveEvents { - private val _events = MutableSharedFlow() - private val events = _events.asSharedFlow() - - fun invokeEvent(event: AppEvent) { - GlobalScope.launch { - _events.emit(event) - } - } - - suspend fun subscribeToEvent( - event: AppEvent, - onReceived: () -> Unit - ) = events.filter { appEvent -> appEvent == event }.collectLatest { onReceived.invoke() } -} - -open class AppEvent diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/Serialization.kt b/coreapp/src/commonMain/kotlin/com/metacto/core/utils/Serialization.kt deleted file mode 100644 index 0c1b022e..00000000 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/Serialization.kt +++ /dev/null @@ -1,7 +0,0 @@ -package com.metacto.core.utils - -expect interface CommonSerializable - -expect interface CommonParcelable - -annotation class CommonParcelize \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/calendar/ICalendarManager.kt b/coreapp/src/commonMain/kotlin/com/metacto/core/utils/calendar/ICalendarManager.kt deleted file mode 100644 index 04083edb..00000000 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/calendar/ICalendarManager.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.metacto.core.utils.calendar - -interface ICalendarManager { - - suspend fun addEventToCalender( - eventTitle: String, - eventDescription: String, - eventStartTime: Long, - eventEndTime: Long, - onEventAdded: () -> Unit, - onEventError: (error: String) -> Unit, - ) -} \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/contacts/ContactsCollectorOptions.kt b/coreapp/src/commonMain/kotlin/com/metacto/core/utils/contacts/ContactsCollectorOptions.kt deleted file mode 100644 index 23d4884c..00000000 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/contacts/ContactsCollectorOptions.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.metacto.core.utils.contacts - -import androidx.compose.runtime.Composable -import com.metacto.strapikmm.contact.ContactsDataCollectorOptions - -expect class ContactsCollectorOptionsFactory { - fun createOptions(): ContactsDataCollectorOptions -} - -@Composable -expect fun rememberContactsCollectorOptionsFactory(): ContactsCollectorOptionsFactory \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/deepLink/DeepLink.kt b/coreapp/src/commonMain/kotlin/com/metacto/core/utils/deepLink/DeepLink.kt deleted file mode 100644 index 2728bc18..00000000 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/deepLink/DeepLink.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.metacto.core.utils.deepLink - -import com.metacto.core.utils.CommonSerializable - -open class DeepLink : CommonSerializable \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/deepLink/DynamicLinkProcessor.kt b/coreapp/src/commonMain/kotlin/com/metacto/core/utils/deepLink/DynamicLinkProcessor.kt deleted file mode 100644 index b7e1a0a9..00000000 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/deepLink/DynamicLinkProcessor.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.metacto.core.utils.deepLink - -internal expect object DynamicLinkProcessor { - fun process( - url: String, - onSuccess: (String) -> Unit - ) -} \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/extensions/KmmPreferenceExtensions.kt b/coreapp/src/commonMain/kotlin/com/metacto/core/utils/extensions/KmmPreferenceExtensions.kt deleted file mode 100644 index be46cd69..00000000 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/extensions/KmmPreferenceExtensions.kt +++ /dev/null @@ -1,19 +0,0 @@ -package com.metacto.core.utils.extensions - -import com.metacto.strapikmm.sharedpreference.KmmPreference -import kotlinx.serialization.encodeToString -import kotlinx.serialization.json.Json - -inline fun KmmPreference.getObject(key: String): T? { - return try { - val serializedObj = getString(key) - serializedObj?.let { Json.decodeFromString(it) } - } catch (_: Throwable) { - null - } -} - -inline fun KmmPreference.putObject(key: String, value: T) { - val serializedObj = Json.encodeToString(value) - putString(key, serializedObj) -} \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/language/Language.kt b/coreapp/src/commonMain/kotlin/com/metacto/core/utils/language/Language.kt deleted file mode 100644 index 48cdafe6..00000000 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/language/Language.kt +++ /dev/null @@ -1,23 +0,0 @@ -package com.metacto.core.utils.language - -import com.metacto.core.presentation.itemPicker.models.PickerItem -import com.metacto.core.utils.CommonParcelize -import kotlinx.serialization.Serializable - -@CommonParcelize -@Serializable -data class Language( - val code: String = "", - val name: String = "", - val isRtl: Boolean = false -) : PickerItem { - override val key = code - override val title = name -} - -val Language.Companion.English: Language - get() = Language( - code = "en", - name = "English", - isRtl = false - ) \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/remoteConfigs/FirebaseRemoteConfigs.kt b/coreapp/src/commonMain/kotlin/com/metacto/core/utils/remoteConfigs/FirebaseRemoteConfigs.kt deleted file mode 100644 index 2bd5d2dc..00000000 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/remoteConfigs/FirebaseRemoteConfigs.kt +++ /dev/null @@ -1,151 +0,0 @@ -package com.metacto.core.utils.remoteConfigs - -import com.metacto.core.domain.CoreConstants.CACHED_REMOTE_CONFIGS -import com.metacto.core.utils.extensions.putObject -import com.metacto.core.utils.extensions.toJsonObject -import com.metacto.core.utils.extensions.toPairs -import com.metacto.strapikmm.sharedpreference.KmmPreference -import com.metacto.strapikmm.util.Logger -import dev.gitlive.firebase.remoteconfig.FirebaseRemoteConfig -import dev.gitlive.firebase.remoteconfig.get -import kotlinx.serialization.json.Json -import kotlinx.serialization.json.jsonObject - -class FirebaseRemoteConfigs( - private val kmmPreference: KmmPreference, - private val firebaseConfigs: FirebaseRemoteConfig -) : IRemoteConfigs { - - private val logger = Logger(LOG_TAG) - - override suspend fun init(minFetchIntervalSeconds: Long) { - setSettings(minFetchIntervalSeconds) - loadDefaults() - fetchConfigsFromRemote() - } - - private suspend fun setSettings(minimumFetchIntervalSeconds: Long) { - try { - firebaseConfigs.settings { - this.minimumFetchIntervalInSeconds = minimumFetchIntervalSeconds - } - logger.log("Updated settings") - } catch (e: Throwable) { - logger.log("Error: (${e.message})") - } - } - - private suspend fun loadDefaults() { - try { - // Get and validate cached configs - val cachedConfigs = kmmPreference.getString(CACHED_REMOTE_CONFIGS) ?: return - val configsObject = Json.parseToJsonElement(cachedConfigs).jsonObject - - // Set defaults - firebaseConfigs.setDefaults( - *configsObject.toPairs().toTypedArray() - ) - - logger.log("Loaded defaults ($cachedConfigs)") - } catch (e: Throwable) { - logger.log("Error: (${e.message})") - } - } - - private suspend fun fetchConfigsFromRemote() { - try { - // Fetch - firebaseConfigs.fetchAndActivate() - val updatedConfigs = firebaseConfigs.all - .map { (key, value) -> key to value.asString() } - .toMap() - .toJsonObject() - - // Then cache it - kmmPreference.putObject(CACHED_REMOTE_CONFIGS, updatedConfigs) - - logger.log("Updated configs from remote ($updatedConfigs)") - } catch (e: Throwable) { - logger.log("Error: (${e.message})") - } - } - - override fun getString(key: String): String? { - return firebaseConfigs.get(key) - } - - @Throws(Throwable::class) - override suspend fun forceGetString(key: String): String? { - val value = getString(key) - if (value == null || value == DEF_STRING_VALUE) { - fetchConfigsFromRemote() - } - - return getString(key) - } - - override fun getBoolean(key: String): Boolean? { - return firebaseConfigs[key] - } - - @Throws(Throwable::class) - override suspend fun forceGetBoolean(key: String): Boolean? { - val value = getBoolean(key) - if (value == null || value == DEF_BOOL_VALUE) { - fetchConfigsFromRemote() - } - - return getBoolean(key) - } - - override fun getDouble(key: String): Double? { - return firebaseConfigs[key] - } - - @Throws(Throwable::class) - override suspend fun forceGetDouble(key: String): Double? { - val value = getDouble(key) - if (value == null || value == DEF_DOUBLE_VALUE) { - fetchConfigsFromRemote() - } - - return getDouble(key) - } - - override fun getLong(key: String): Long? { - return firebaseConfigs[key] - } - - @Throws(Throwable::class) - override suspend fun forceGetLong(key: String): Long? { - val value = getLong(key) - if (value == null || value == DEF_LONG_VALUE) { - fetchConfigsFromRemote() - } - - return getLong(key) - } - - override fun getInt(key: String): Int? { - return firebaseConfigs[key] - } - - @Throws(Throwable::class) - override suspend fun forceGetInt(key: String): Int? { - val value = getInt(key) - if (value == null || value == DEF_INT_VALUE) { - fetchConfigsFromRemote() - } - - return getInt(key) - } - - companion object { - private const val LOG_TAG = "RemoteConfigs" - private const val DEF_STRING_VALUE = "" - private const val DEF_BOOL_VALUE = false - private const val DEF_DOUBLE_VALUE = 0.0 - private const val DEF_LONG_VALUE = 0L - private val DEF_INT_VALUE: Int? = null - } -} diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/remoteConfigs/IRemoteConfigs.kt b/coreapp/src/commonMain/kotlin/com/metacto/core/utils/remoteConfigs/IRemoteConfigs.kt deleted file mode 100644 index 40fcdb60..00000000 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/remoteConfigs/IRemoteConfigs.kt +++ /dev/null @@ -1,36 +0,0 @@ -package com.metacto.core.utils.remoteConfigs - -val Class = IRemoteConfigs::class - -interface IRemoteConfigs { - suspend fun init(minFetchIntervalSeconds: Long = DEFAULT_MIN_FETCH_INTERVAL_SECONDS) - - fun getString(key: String): String? - - @Throws(Throwable::class) - suspend fun forceGetString(key: String): String? - - fun getBoolean(key: String): Boolean? - - @Throws(Throwable::class) - suspend fun forceGetBoolean(key: String): Boolean? - - fun getDouble(key: String): Double? - - @Throws(Throwable::class) - suspend fun forceGetDouble(key: String): Double? - - fun getLong(key: String): Long? - - @Throws(Throwable::class) - suspend fun forceGetLong(key: String): Long? - - fun getInt(key: String): Int? - - @Throws(Throwable::class) - suspend fun forceGetInt(key: String): Int? - - companion object { - private const val DEFAULT_MIN_FETCH_INTERVAL_SECONDS = 0L - } -} diff --git a/coreapp/src/iosMain/kotlin/com/metacto/core/auth/Auth.kt b/coreapp/src/iosMain/kotlin/com/metacto/core/auth/Auth.kt deleted file mode 100644 index c6649419..00000000 --- a/coreapp/src/iosMain/kotlin/com/metacto/core/auth/Auth.kt +++ /dev/null @@ -1,36 +0,0 @@ -package com.metacto.core.auth - -import androidx.compose.runtime.Composable -import com.metacto.strapikmm.auth.AuthOptions -import androidx.compose.runtime.remember -import androidx.compose.ui.interop.LocalUIViewController -import dev.gitlive.firebase.auth.PhoneVerificationProvider -import platform.UIKit.UIViewController - -actual class AuthOptionsFactory( - private val viewController: UIViewController -) { - actual fun createAuthOptions(onCancelled: () -> Unit): AuthOptions { - return AuthOptions( - presentingViewController = viewController - ) - } -} - -@Composable -actual fun rememberAuthOptionsFactory(): AuthOptionsFactory { - val currentViewController = LocalUIViewController.current - return remember(currentViewController) { - AuthOptionsFactory( - viewController = currentViewController - ) - } -} - -@Composable -actual fun rememberPhoneVerificationProvider(): PhoneVerificationProvider { - return remember { - object : PhoneVerificationProvider { - } - } -} \ No newline at end of file diff --git a/coreapp/src/iosMain/kotlin/com/metacto/core/di/CorePlatformModule.kt b/coreapp/src/iosMain/kotlin/com/metacto/core/di/CorePlatformModule.kt deleted file mode 100644 index bec3be22..00000000 --- a/coreapp/src/iosMain/kotlin/com/metacto/core/di/CorePlatformModule.kt +++ /dev/null @@ -1,164 +0,0 @@ -package com.metacto.core.di - -import coil3.PlatformContext -import com.metacto.core.CoreEnvironment -import com.metacto.core.domain.DiQualifiers -import com.metacto.core.domain.repos.RepositoriesFactory -import com.metacto.core.domain.repos.forceUpdate.ForceUpdateRepository -import com.metacto.core.permissions.IPermissionManager -import com.metacto.core.permissions.PermissionManager -import com.metacto.core.presentation.base.CommonViewModel -import com.metacto.core.presentation.camera.CameraController -import com.metacto.core.presentation.camera.CameraEngine -import com.metacto.core.presentation.camera.models.CameraLens -import com.metacto.core.presentation.components.videoPlayer.VideoPlayerManager -import com.metacto.core.presentation.itemPicker.NativeItemPicker -import com.metacto.core.utils.calendar.CalendarManager -import com.metacto.core.utils.calendar.ICalendarManager -import com.metacto.core.utils.eventBroadcaster.EventBroadcaster -import com.metacto.core.utils.file.FileManager -import com.metacto.core.utils.file.IFileManager -import com.metacto.core.utils.imagePreloader.IPreloader -import com.metacto.core.utils.imagePreloader.Preloader -import com.metacto.core.utils.language.ILanguageManager -import com.metacto.core.utils.language.LanguageManager -import com.metacto.core.utils.launchers.IIntentLauncher -import com.metacto.core.utils.launchers.IntentLauncher -import com.metacto.core.utils.media.IMediaManager -import com.metacto.core.utils.media.MediaManager -import com.metacto.core.utils.notification.INotificationManager -import com.metacto.core.utils.notification.NotificationManager -import com.metacto.strapikmm.errorhandling.SerializableNetworkError -import com.metacto.strapikmm.repos.AppConfigurationRepository -import com.mmk.kmpnotifier.notification.NotifierManager -import com.mmk.kmpnotifier.notification.configuration.NotificationPlatformConfiguration -import dev.gitlive.firebase.Firebase -import dev.gitlive.firebase.remoteconfig.remoteConfig -import io.michaelrocks.libphonenumber.kotlin.MetadataLoader -import io.michaelrocks.libphonenumber.kotlin.metadata.init.ComposeResourceMetadataLoader -import org.koin.core.definition.Definition -import org.koin.core.definition.KoinDefinition -import org.koin.core.module.Module -import org.koin.core.qualifier.Qualifier -import org.koin.dsl.module -import platform.UserNotifications.UNUserNotificationCenter -import kotlin.reflect.KClass - -actual fun corePlatformModule( - appStorageName: String, - coreEnvironment: CoreEnvironment, - shouldShowActualErrorMessages: Boolean, - errorClass: KClass -) = module { - single { - RepositoriesFactory( - environment = get(), - appStorageName = appStorageName, - shouldShowActualErrorMessages = shouldShowActualErrorMessages, - errorClass = errorClass - ) - } - - single { - Preloader( - context = PlatformContext.INSTANCE - ) - } - - single { - EventBroadcaster - } - - single { - Firebase.remoteConfig - } - - single { - NotificationManager( - notificationCenter = UNUserNotificationCenter.currentNotificationCenter(), - notifier = get() - ) - } - - single>(DiQualifiers.videoPlayerManagers) { - mutableMapOf() - } - - single { - PermissionManager( - delegateFactory = get() - ) - } - - single { - IntentLauncher() - } - - single { - LanguageManager(get()) - } - - single { - ComposeResourceMetadataLoader() - } - - single { - CalendarManager() - } - - single { - AppConfigurationRepository( - appConfigurationService = get(), - sharedPreference = get(), - appConfigurationExpirationInMinutes = coreEnvironment.appConfigurationExpirationInMinutes - ) - } - - single { - ForceUpdateRepository( - appEnvironment = get(), - appConfigurationRepository = get(), - remoteConfigs = get(), - ) - } - - single { - NotifierManager.apply { - initialize( - NotificationPlatformConfiguration.Ios( - showPushNotification = coreEnvironment.showRemoteNotifications, - askNotificationPermissionOnStart = coreEnvironment.askRemoteNotificationPermissionOnStart - ) - ) - } - } - - single { - FileManager() - } - - single { - MediaManager() - } - - factory { (defaultCamera: CameraLens?) -> - val cameraEngine = CameraEngine( - defaultCamera = defaultCamera ?: CameraLens.BACK - ) - CameraController( - permissionManager = get(), - cameraEngine = cameraEngine - ) - } - - single { - NativeItemPicker(get()) - } -} - -actual inline fun Module.commonViewModel( - qualifier: Qualifier?, - noinline definition: Definition -): KoinDefinition { - return factory(qualifier, definition) -} \ No newline at end of file diff --git a/coreapp/src/iosMain/kotlin/com/metacto/core/di/DiProvider.kt b/coreapp/src/iosMain/kotlin/com/metacto/core/di/DiProvider.kt deleted file mode 100644 index cca2040a..00000000 --- a/coreapp/src/iosMain/kotlin/com/metacto/core/di/DiProvider.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.metacto.core.di - -import org.koin.core.component.KoinComponent -import kotlin.reflect.KClass - - -object DiProvider : KoinComponent { - private val koin = getKoin() - - fun getDependency(clazz: KClass<*>): Any { - return koin.get(clazz, null, null) - } -} \ No newline at end of file diff --git a/coreapp/src/iosMain/kotlin/com/metacto/core/presentation/base/CommonViewModel.kt b/coreapp/src/iosMain/kotlin/com/metacto/core/presentation/base/CommonViewModel.kt deleted file mode 100644 index 1f8a55d3..00000000 --- a/coreapp/src/iosMain/kotlin/com/metacto/core/presentation/base/CommonViewModel.kt +++ /dev/null @@ -1,3 +0,0 @@ -package com.metacto.core.presentation.base - -actual open class CommonViewModel \ No newline at end of file diff --git a/coreapp/src/iosMain/kotlin/com/metacto/core/presentation/components/imagePicker/ImagePicker.kt b/coreapp/src/iosMain/kotlin/com/metacto/core/presentation/components/imagePicker/ImagePicker.kt deleted file mode 100644 index 686cb8af..00000000 --- a/coreapp/src/iosMain/kotlin/com/metacto/core/presentation/components/imagePicker/ImagePicker.kt +++ /dev/null @@ -1,91 +0,0 @@ -package com.metacto.core.presentation.components.imagePicker - -import androidx.compose.runtime.Composable -import androidx.compose.runtime.remember -import androidx.compose.ui.interop.LocalUIViewController -import com.metacto.core.utils.extensions.normalizedImage -import com.metacto.core.utils.extensions.toByteArray -import platform.UIKit.UIImage -import platform.UIKit.UIImagePickerController -import platform.UIKit.UIImagePickerControllerDelegateProtocol -import platform.UIKit.UIImagePickerControllerSourceType -import platform.UIKit.UIModalPresentationFullScreen -import platform.UIKit.UINavigationControllerDelegateProtocol -import platform.UIKit.UIViewController -import platform.darwin.NSObject - -actual class ImagePicker( - private val rootController: UIViewController, - actual val enableCropping: Boolean, - actual val aspectRatioX: Int?, - actual val aspectRatioY: Int? -) { - private val imagePickerController = UIImagePickerController() - private var onImagePicked: (ByteArray) -> Unit = {} - - private val delegate = object : NSObject(), UIImagePickerControllerDelegateProtocol, - UINavigationControllerDelegateProtocol { - - override fun imagePickerController( - picker: UIImagePickerController, - didFinishPickingImage: UIImage, - editingInfo: Map? - ) { - // Get picked image bytes - val imageBytes = didFinishPickingImage.normalizedImage().toByteArray() ?: return - - // Dismiss the picker controller - picker.dismissViewControllerAnimated(true, null) - - // And notify image picked - onImagePicked(imageBytes) - } - - override fun imagePickerControllerDidCancel(picker: UIImagePickerController) { - picker.dismissViewControllerAnimated(true, null) - } - } - - @Composable - actual fun registerPicker(onImagePicked: (ByteArray) -> Unit) { - this.onImagePicked = onImagePicked - } - - actual fun pickFromGallery() { - pickImage( - UIImagePickerControllerSourceType.UIImagePickerControllerSourceTypePhotoLibrary - ) - } - - actual fun captureUsingCamera() { - pickImage( - UIImagePickerControllerSourceType.UIImagePickerControllerSourceTypeCamera - ) - } - - private fun pickImage(source: UIImagePickerControllerSourceType) { - imagePickerController.sourceType = source - imagePickerController.allowsImageEditing = enableCropping - imagePickerController.setModalPresentationStyle(UIModalPresentationFullScreen) - rootController.presentViewController(imagePickerController, true) { - imagePickerController.delegate = delegate - } - } -} - -@Composable -actual fun rememberImagePicker( - enableCropping: Boolean, - aspectRatioX: Int?, - aspectRatioY: Int? -): ImagePicker { - val rootController = LocalUIViewController.current - return remember(enableCropping, aspectRatioX, aspectRatioY) { - ImagePicker( - rootController = rootController, - enableCropping = enableCropping, - aspectRatioX = aspectRatioX, - aspectRatioY = aspectRatioY - ) - } -} \ No newline at end of file diff --git a/coreapp/src/iosMain/kotlin/com/metacto/core/utils/DateHelper.ios.kt b/coreapp/src/iosMain/kotlin/com/metacto/core/utils/DateHelper.ios.kt deleted file mode 100644 index d2f063e6..00000000 --- a/coreapp/src/iosMain/kotlin/com/metacto/core/utils/DateHelper.ios.kt +++ /dev/null @@ -1,235 +0,0 @@ -package com.metacto.core.utils - -import kotlinx.cinterop.ExperimentalForeignApi -import kotlinx.cinterop.convert -import kotlinx.datetime.Clock -import kotlinx.datetime.DayOfWeek -import kotlinx.datetime.Instant -import kotlinx.datetime.LocalDate -import kotlinx.datetime.TimeZone -import platform.Foundation.NSCalendar -import platform.Foundation.NSCalendarIdentifierISO8601 -import platform.Foundation.NSCalendarOptions -import platform.Foundation.NSCalendarUnitDay -import platform.Foundation.NSCalendarUnitHour -import platform.Foundation.NSCalendarUnitMinute -import platform.Foundation.NSCalendarUnitMonth -import platform.Foundation.NSCalendarUnitSecond -import platform.Foundation.NSCalendarUnitWeekOfMonth -import platform.Foundation.NSCalendarUnitYear -import platform.Foundation.NSDate -import platform.Foundation.NSDateComponents -import platform.Foundation.NSDateComponentsFormatter -import platform.Foundation.NSDateComponentsFormatterUnitsStyleAbbreviated -import platform.Foundation.NSDateComponentsFormatterZeroFormattingBehaviorDropAll -import platform.Foundation.NSDateFormatter -import platform.Foundation.NSLocale -import platform.Foundation.NSTimeZone -import platform.Foundation.currentLocale -import platform.Foundation.dateWithTimeIntervalSince1970 -import platform.Foundation.localTimeZone -import platform.Foundation.timeIntervalSince1970 -import platform.Foundation.timeZoneWithAbbreviation - -actual typealias Date = NSDate - -actual fun Date.toMillis(): Long { - return (timeIntervalSince1970 * 1000).toLong() -} - -actual fun dateFromTimestamp(timestamp: Long): Date { - return NSDate.dateWithTimeIntervalSince1970(timestamp.div(1000).toDouble()) -} - -fun NSDate.toDateComponents(): NSDateComponents { - // Create a calendar instance - val calendar = NSCalendar.currentCalendar - - // Extract date components from the NSDate - return calendar.components( - NSCalendarUnitYear or NSCalendarUnitMonth or NSCalendarUnitDay or - NSCalendarUnitHour or NSCalendarUnitMinute or NSCalendarUnitSecond, - this - ) -} - -@Deprecated("Use com.metacto.core.utils.date.DateTimeUtils instead", ReplaceWith("DateTimeUtils")) -actual object DateHelper { - private val timeFormatter = NSDateComponentsFormatter().apply { - unitsStyle = NSDateComponentsFormatterUnitsStyleAbbreviated - zeroFormattingBehavior = NSDateComponentsFormatterZeroFormattingBehaviorDropAll - maximumUnitCount = 1 - allowedUnits = ( - NSCalendarUnitYear - or NSCalendarUnitMonth - or NSCalendarUnitWeekOfMonth - or NSCalendarUnitDay - or NSCalendarUnitHour - or NSCalendarUnitMinute - ) - includesApproximationPhrase = false - } - - private val dateFormatter = NSDateFormatter().apply { - locale = NSLocale.currentLocale - lenient = true - calendar = NSCalendar(calendarIdentifier = NSCalendarIdentifierISO8601) - } - - private val utcTimeZone: NSTimeZone - get() = NSTimeZone.timeZoneWithAbbreviation("UTC") - ?: throw Throwable("Unable to construct UTC TimeZone") - - private val localTimeZone: NSTimeZone - get() = NSTimeZone.localTimeZone - - actual fun format(instant: Instant, format: String): String { - return formatInstantToiOSDateTime(instant.toEpochMilliseconds(), format) - } - - private fun formatInstantToiOSDateTime(instant: Long, format: String): String { - val timestamp = instant / 1000.0 // Convert from milliseconds to seconds - val date = NSDate.dateWithTimeIntervalSince1970(timestamp) - - val dateFormatter = NSDateFormatter().apply { - setLocale(NSLocale(localeIdentifier = "en_US")) - setDateFormat(format) - } - - return dateFormatter.stringFromDate(date) - } - - @Throws(Throwable::class) - actual fun stringToDate( - string: String, - format: String - ): Date { - dateFormatter.dateFormat = format - dateFormatter.timeZone = localTimeZone - return dateFormatter.dateFromString(string) ?: NSDate() - } - - @Throws(Throwable::class) - actual fun dateToString( - date: Date, - format: String - ): String { - dateFormatter.dateFormat = format - dateFormatter.timeZone = localTimeZone - return dateFormatter.stringFromDate(date) - } - - @Throws(Throwable::class) - actual fun convertDateFormat( - date: String, - fromFormat: String, - toFormat: String - ): String { - val formattedDate = stringToDate(date, fromFormat) - return dateToString(formattedDate, toFormat) - } - - @Throws(Throwable::class) - actual fun dateToUTCString( - date: Date, - format: String - ): String { - dateFormatter.dateFormat = format - dateFormatter.timeZone = utcTimeZone - return dateFormatter.stringFromDate(date) - } - - @Throws(Throwable::class) - actual fun utcStringToDate( - string: String, - format: String - ): Date { - dateFormatter.dateFormat = format - dateFormatter.timeZone = utcTimeZone - - val date = dateFormatter.dateFromString(string) - ?: throw Throwable("Unable to convert $string to date with format $format") - val dateString = dateToString(date, format) - - dateFormatter.timeZone = localTimeZone - return dateFormatter.dateFromString(dateString) - ?: throw Throwable("Unable to convert $dateString to date with $format") - } - - @OptIn(ExperimentalForeignApi::class) - @Throws(Throwable::class) - actual fun daysInMonth(year: Int, month: Int): Int { - val calendar = NSCalendar.currentCalendar - val components = NSDateComponents().apply { - // Reset the calendar day to the first day of the month to avoid rolling over to the next month - this.day = 1.convert() - this.month = month.convert() - this.year = year.convert() - } - - val date = calendar.dateFromComponents(components) ?: return 0 - val range = calendar.rangeOfUnit(NSCalendarUnitDay, NSCalendarUnitMonth, date) - return range.size - } - - @Throws(Throwable::class) - actual fun timestampToReadableDate(timestamp: Long): String { - // Prepare timestamp seconds - val timestampSeconds = timestamp.div(1000).toDouble() - - // Create dates - val now = NSDate() - val date = dateFromTimestamp(timestamp) - - // Check and return - return when { - (now.timeIntervalSince1970 - timestampSeconds) <= 59 -> { - // Less than one minute - "Just Now" - } - - else -> { - // Or convert to readable date - timeFormatter.stringFromDate(startDate = date, toDate = now).orEmpty() - } - } - } - - @Throws(Throwable::class) - actual fun getDayOfMonthSuffix(date: Date): String { - return when (dateToString(date, "d").toIntOrNull()) { - 1 -> "st" - 2 -> "nd" - 3 -> "rd" - else -> "th" - } - } - - @Throws(Throwable::class) - actual fun getElapsedYears(date: Date): Int { - val calendar = NSCalendar.currentCalendar - val components = calendar.components( - NSCalendarUnitYear, - fromDate = date, - toDate = NSDate(), - options = NSCalendarOptions.MAX_VALUE - ) - - return components.year.toInt() - } - - @Throws(Throwable::class) - actual fun getCurrentLocalDate(timeZone: TimeZone): LocalDate { - return Clock.System.getCurrentLocalDate(timeZone) - } - - @Throws(Throwable::class) - actual fun getMondayOfWeek(date: LocalDate): LocalDate { - return date.getDayOfWeek(DayOfWeek.MONDAY) - } - - @Throws(Throwable::class) - actual fun getSundayOfWeek(date: LocalDate): LocalDate { - return date.getDayOfWeek(DayOfWeek.SUNDAY) - } -} \ No newline at end of file diff --git a/coreapp/src/iosMain/kotlin/com/metacto/core/utils/Serialization.kt b/coreapp/src/iosMain/kotlin/com/metacto/core/utils/Serialization.kt deleted file mode 100644 index a94db9cf..00000000 --- a/coreapp/src/iosMain/kotlin/com/metacto/core/utils/Serialization.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.metacto.core.utils - -actual interface CommonSerializable - -actual interface CommonParcelable diff --git a/coreapp/src/iosMain/kotlin/com/metacto/core/utils/calendar/CalendarManager.kt b/coreapp/src/iosMain/kotlin/com/metacto/core/utils/calendar/CalendarManager.kt deleted file mode 100644 index 15cc8f0a..00000000 --- a/coreapp/src/iosMain/kotlin/com/metacto/core/utils/calendar/CalendarManager.kt +++ /dev/null @@ -1,70 +0,0 @@ -package com.metacto.core.utils.calendar - -import com.metacto.core.utils.dateFromTimestamp -import com.metacto.core.utils.extensions.contains -import com.metacto.core.utils.extensions.openAppSettings -import kotlinx.cinterop.ExperimentalForeignApi -import platform.EventKit.EKEntityType -import platform.EventKit.EKEvent -import platform.EventKit.EKEventStore -import platform.EventKit.EKSpan - -class CalendarManager : ICalendarManager { - - @OptIn(ExperimentalForeignApi::class) - override suspend fun addEventToCalender( - eventTitle: String, - eventDescription: String, - eventStartTime: Long, - eventEndTime: Long, - onEventAdded: () -> Unit, - onEventError: (error: String) -> Unit, - ) { - val eventStore = EKEventStore() - - eventStore.requestAccessToEntityType(EKEntityType.EKEntityTypeEvent, - completion = { success, error -> - // check if access guranteed - if (success) { - // TODO will check the calender previous events to prevent duplication - // prepare the event date - val event = EKEvent.eventWithEventStore(eventStore).apply { - title = eventTitle - startDate = dateFromTimestamp(eventStartTime) - endDate = dateFromTimestamp(eventEndTime) - notes = eventDescription - calendar = eventStore.defaultCalendarForNewEvents - } - - // add the event - eventStore.saveEvent( - event = event, - span = EKSpan.EKSpanThisEvent, - error = null - ) - onEventAdded.invoke() - } else { - openAppSettings() - } - }) - } - - private fun isEventExist( - eventStore: EKEventStore, - title: String, - startTime: Long, - endTime: Long - ): Boolean { - // What about Calendar entries? - val startDate = dateFromTimestamp(startTime) - val endDate = dateFromTimestamp(endTime) - val predicate = eventStore.predicateForEventsWithStartDate( - startDate, endDate = endDate, calendars = null - ) - // fetching the whole events list - val events: List = eventStore.eventsMatchingPredicate(predicate) as List - - // check if the event already exists - return events.contains { it.title.equals(title, ignoreCase = true) } - } -} \ No newline at end of file diff --git a/coreapp/src/iosMain/kotlin/com/metacto/core/utils/contacts/ContactsCollectorOptions.kt b/coreapp/src/iosMain/kotlin/com/metacto/core/utils/contacts/ContactsCollectorOptions.kt deleted file mode 100644 index 72a6767f..00000000 --- a/coreapp/src/iosMain/kotlin/com/metacto/core/utils/contacts/ContactsCollectorOptions.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.metacto.core.utils.contacts - -import androidx.compose.runtime.Composable -import androidx.compose.runtime.remember -import com.metacto.strapikmm.contact.ContactsDataCollectorOptions - -actual class ContactsCollectorOptionsFactory { - actual fun createOptions(): ContactsDataCollectorOptions { - return ContactsDataCollectorOptions() - } -} - -@Composable -actual fun rememberContactsCollectorOptionsFactory(): ContactsCollectorOptionsFactory { - return remember { - ContactsCollectorOptionsFactory() - } -} \ No newline at end of file diff --git a/coreapp/src/iosMain/kotlin/com/metacto/core/utils/deepLink/DynamicLinkProcessor.kt b/coreapp/src/iosMain/kotlin/com/metacto/core/utils/deepLink/DynamicLinkProcessor.kt deleted file mode 100644 index 77476622..00000000 --- a/coreapp/src/iosMain/kotlin/com/metacto/core/utils/deepLink/DynamicLinkProcessor.kt +++ /dev/null @@ -1,25 +0,0 @@ -package com.metacto.core.utils.deepLink - -import cocoapods.FirebaseDynamicLinks.FIRDynamicLinks -import kotlinx.cinterop.ExperimentalForeignApi -import platform.Foundation.NSURL - -internal actual object DynamicLinkProcessor { - @OptIn(ExperimentalForeignApi::class) - actual fun process( - url: String, - onSuccess: (String) -> Unit - ) { - FIRDynamicLinks.dynamicLinks() - .handleUniversalLink(NSURL(string = url)) { dynamicLink, error -> - if (error != null) { - println("DynamicLinkProcessor:onFailure $error") - } else { - val deepLink = dynamicLink?.url?.absoluteString - if (deepLink != null) { - onSuccess.invoke(deepLink) - } - } - } - } -} \ No newline at end of file diff --git a/coreapp/src/iosMain/kotlin/com/metacto/core/utils/file/FileManager.kt b/coreapp/src/iosMain/kotlin/com/metacto/core/utils/file/FileManager.kt deleted file mode 100644 index 9aef5c12..00000000 --- a/coreapp/src/iosMain/kotlin/com/metacto/core/utils/file/FileManager.kt +++ /dev/null @@ -1,49 +0,0 @@ -package com.metacto.core.utils.file - -import dev.gitlive.firebase.remoteconfig.toByteArray -import kotlinx.cinterop.ExperimentalForeignApi -import platform.Foundation.NSData -import platform.Foundation.NSFileManager -import platform.Foundation.NSString -import platform.Foundation.dataWithContentsOfFile -import platform.Foundation.stringByAppendingPathComponent - -class FileManager : IFileManager { - - override fun readFile(filePath: String): ByteArray { - val nsData = NSData.dataWithContentsOfFile(filePath) - requireNotNull(nsData) { "Can't access file at: $filePath" } - - return nsData.toByteArray() - } - - @OptIn(ExperimentalForeignApi::class) - override fun clearFolder(folderPath: String): Boolean { - val fileManager = NSFileManager.defaultManager - - return try { - // Get the list of files in the directory - val files = fileManager.contentsOfDirectoryAtPath(folderPath, null) - files?.forEach { file -> - val filePath = (folderPath as NSString).stringByAppendingPathComponent(file as String) - fileManager.removeItemAtPath(filePath, null) - } - true - } catch (e: Exception) { - println("Could not clear folder at $folderPath, Error: $e") - false - } - } - - @OptIn(ExperimentalForeignApi::class) - override fun deleteFile(filePath: String): Boolean { - return try { - // Attempt to remove the file at the given path - NSFileManager.defaultManager.removeItemAtPath(filePath, null) - true - } catch (e: Exception) { - println("Could not delete file at: $filePath, Error: $e") - false - } - } -} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index ac21053b..96d05511 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,7 @@ #Gradle org.gradle.jvmargs=-Xmx4096M -Dkotlin.daemon.jvm.options\="-Xmx4096M" +org.gradle.parallel=true +org.gradle.caching=true #Kotlin kotlin.code.style=official diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml new file mode 100644 index 00000000..fa216e31 --- /dev/null +++ b/gradle/libs.versions.toml @@ -0,0 +1,209 @@ +[versions] +compileSdk = "35" +targetSdk = "35" +minSdk = "26" +jvm = "17" +gradle = "8.7.1" +kotlin = "2.1.10" +compose = "1.7.0" +swift-klib = "0.6.4" +compose-android = "1.7.4" +date-time = "0.4.0" +coroutines = "1.10.2" +serialization-json = "1.6.0" +strapi-kmm = "10.0.158" +core-network = "2.0.61" +metacto-core = "0.2.102-alpha" +metacto-inspektify = "1.0.0-beta09-meta-2" +metacto-downloadmanager = "0.0.4-alpha" +metacto-firebase = "1.0.36" +metacto-analytics = "0.0.21" +koin = "4.0.0" +koin-compose = "1.1.0" +voyager = "1.1.0-beta02" +activity-compose = "1.8.0" +app-compat = "1.6.1" +core-kts = "1.12.0" +security-crypto = "1.0.0" +play-services-auth = "20.7.0" +splash-screen = "1.1.0-alpha02" +firebase = "34.1.0" +serialization = "2.1.10" +play-services-plugin = "4.3.14" +crashlytics-plugin = "2.9.4" +android-image-picker = "2.1" +lib-phone-number = "0.1.3-metacto-3" +android-cropper = "4.5.0" +coil = "3.0.0-alpha10" +compottie = "1.1.0" +webview = "1.9.40-alpha04" +exo-player = "1.3.1" +youtube-player = "12.1.0" +shimmer = "1.3.1" +kmp-notifier = "1.3.0" +stately-common = "2.0.5" +uuid = "0.8.4" +camera-x = "1.5.0" +calendar = "2.6.2" +pdfviewer = "2.1.1" +desugar = "2.0.4" +sendbird-chat = "4.19.3" +sendbird-chat-ktx = "4.19.0" +sendbird-uikit = "3.+" +recyclerview = "1.3.1" +revenuecat = "1.7.5+13.28.1" +location-services = "21.3.0" +facebook-sdk = "18.0.3" +play-store-review = "2.0.1" +work-manager = "2.9.1" + + +[plugins] +multiplatform = { id = "org.jetbrains.kotlin.multiplatform" } +android-library = { id = "com.android.library" } +android-application = { id = "com.android.application" } +compose = { id = "org.jetbrains.compose", version.ref = "compose" } +kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization" } +kotlin-parcelize = { id = "org.jetbrains.kotlin.plugin.parcelize" } +kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } +google-services = { id = "com.google.gms.google-services" } +firebase-crashlytics = { id = "com.google.firebase.crashlytics" } +swiftklib = { id = "io.github.ttypic.swiftklib", version.ref = "swift-klib" } +maven-publish = { id = "maven-publish" } +version-catalog = { id = "version-catalog" } +signing = { id = "signing" } + + +[libraries] +# Plugin classpaths +classpath-androidgradle = { module = "com.android.tools.build:gradle", version.ref = "gradle" } +classpath-kotlingradle = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } +classpath-serialization = { module = "org.jetbrains.kotlin:kotlin-serialization", version.ref = "serialization" } +classpath-googleservices = { module = "com.google.gms:google-services", version.ref = "play-services-plugin" } +classpath-crashlytics = { module = "com.google.firebase:firebase-crashlytics-gradle", version.ref = "crashlytics-plugin" } + +# Compose +compose-runtime = { module = "org.jetbrains.compose.runtime:runtime", version.ref = "compose" } +compose-foundation = { module = "org.jetbrains.compose.foundation:foundation", version.ref = "compose" } +compose-material = { module = "org.jetbrains.compose.material:material", version.ref = "compose" } +compose-material3 = { module = "org.jetbrains.compose.material3:material3", version.ref = "compose" } +compose-animation = { module = "org.jetbrains.compose.animation:animation", version.ref = "compose" } +compose-animationgraphics = { module = "org.jetbrains.compose.animation:animation-graphics", version.ref = "compose" } +compose-icons = { module = "org.jetbrains.compose.material:material-icons-extended", version.ref = "compose" } +compose-resources = { module = "org.jetbrains.compose.components:components-resources", version.ref = "compose" } + +# Kotlin +kotlin-datetime = { module = "org.jetbrains.kotlinx:kotlinx-datetime", version.ref = "date-time" } +kotlin-coroutines = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutines" } +kotlin-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "serialization-json" } + +# Koin +koin-core = { module = "io.insert-koin:koin-core", version.ref = "koin" } +koin-compose = { module = "io.insert-koin:koin-compose", version.ref = "koin-compose" } +koin-android = { module = "io.insert-koin:koin-android", version.ref = "koin" } +koin-androidcompose = { module = "io.insert-koin:koin-androidx-compose", version.ref = "koin" } + +# Voyager +voyager-navigator = { module = "cafe.adriel.voyager:voyager-navigator", version.ref = "voyager" } +voyager-bottomsheet = { module = "cafe.adriel.voyager:voyager-bottom-sheet-navigator", version.ref = "voyager" } +voyager-screenmodel = { module = "cafe.adriel.voyager:voyager-screenmodel", version.ref = "voyager" } +voyager-koin = { module = "cafe.adriel.voyager:voyager-koin", version.ref = "voyager" } + +# AndroidX +android-activitycompose = { module = "androidx.activity:activity-compose", version.ref = "activity-compose" } +android-appcompat = { module = "androidx.appcompat:appcompat", version.ref = "app-compat" } +android-corektx = { module = "androidx.core:core-ktx", version.ref = "core-kts" } +android-securitycrypto = { module = "androidx.security:security-crypto", version.ref = "security-crypto" } +android-splashscreen = { module = "androidx.core:core-splashscreen", version.ref = "splash-screen" } + +# Firebase +firebase-bom = { module = "com.google.firebase:firebase-bom", version.ref = "firebase" } +firebase-dynamiclinks = { module = "com.google.firebase:firebase-dynamic-links-ktx" } +firebase-crashlytics = { module = "com.google.firebase:firebase-crashlytics" } +firebase-analytics = { module = "com.google.firebase:firebase-analytics" } +firebase-messaging = { module = "com.google.firebase:firebase-messaging" } + +# Google Play Services +playservices-auth = { module = "com.google.android.gms:play-services-auth", version.ref = "play-services-auth" } + +# Coil +coil = { module = "io.coil-kt.coil3:coil", version.ref = "coil" } +coil-compose = { module = "io.coil-kt.coil3:coil-compose", version.ref = "coil" } +coil-network = { module = "io.coil-kt.coil3:coil-network-ktor3", version.ref = "coil" } +coil-svg = { module = "io.coil-kt.coil3:coil-svg", version.ref = "coil" } + +# ExoPlayer +exo-player = { module = "androidx.media3:media3-exoplayer", version.ref = "exo-player" } +exo-hls = { module = "androidx.media3:media3-exoplayer-hls", version.ref = "exo-player" } +exo-ui = { module = "androidx.media3:media3-ui", version.ref = "exo-player" } +exo-session = { module = "androidx.media3:media3-session", version.ref = "exo-player" } +exo-common = { module = "androidx.media3:media3-common", version.ref = "exo-player" } + +# YouTube Player +youtube-core = { module = "com.pierfrancescosoffritti.androidyoutubeplayer:core", version.ref = "youtube-player" } +youtube-customui = { module = "com.pierfrancescosoffritti.androidyoutubeplayer:custom-ui", version.ref = "youtube-player" } + +# CameraX +camera-view = { module = "androidx.camera:camera-view", version.ref = "camera-x" } +camera-camera2 = { module = "androidx.camera:camera-camera2", version.ref = "camera-x" } +camera-core = { module = "androidx.camera:camera-core", version.ref = "camera-x" } +camera-lifecycle = { module = "androidx.camera:camera-lifecycle", version.ref = "camera-x" } +camera-video = { module = "androidx.camera:camera-video", version.ref = "camera-x" } + +# Notifications +kmpnotifier = { module = "io.github.mirzemehdi:kmpnotifier", version.ref = "kmp-notifier" } +statelycommon = { module = "co.touchlab:stately-common", version.ref = "stately-common" } +uuid = { module = "com.benasher44:uuid", version.ref = "uuid" } + +#MetaCto +metacto-core = { module = "com.metacto.kmm:core", version.ref = "metacto-core" } +metacto-coreui = { module = "com.metacto.kmm:core-ui", version.ref = "metacto-core" } +metacto-files = { module = "com.metacto.kmm:files", version.ref = "metacto-core" } +metacto-notifications = { module = "com.metacto.kmm:notifications", version.ref = "metacto-core" } +metacto-phonecore = { module = "com.metacto.kmm:phone-core", version.ref = "metacto-core" } +metacto-mediaplayers = { module = "com.metacto.kmm:media-players", version.ref = "metacto-core" } +metacto-camera = { module = "com.metacto.kmm:camera", version.ref = "metacto-core" } +metacto-youtube = { module = "com.metacto.kmm:youtube", version.ref = "metacto-core" } +metacto-phoneui = { module = "com.metacto.kmm:phone-ui", version.ref = "metacto-core" } +metacto-imagepicker = { module = "com.metacto.kmm:image-picker", version.ref = "metacto-core" } +metacto-auth-common = { module = "com.metacto.kmm:auth-common", version.ref = "metacto-firebase" } +metacto-auth-firebase = { module = "com.metacto.kmm:firebase-auth-extensions", version.ref = "metacto-firebase" } +metacto-remoteconfigs-common = { module = "com.metacto.kmm:remote-config-common", version.ref = "metacto-firebase" } +metacto-remoteconfigs-firebase = { module = "com.metacto.kmm:firebase-config-extensions", version.ref = "metacto-firebase" } +metacto-strapikmm = { module = "com.metacto:strapi", version.ref = "strapi-kmm" } +metacto-network = { module = "com.metacto:network-core", version.ref = "core-network" } +metacto-inspektify = { module = "com.metacto:inspektify", version.ref = "metacto-inspektify" } +metacto-downloadmanager = { module = "com.metacto:downloadmanager", version.ref = "metacto-downloadmanager" } +metacto-analytics-core = { module = "com.metacto.kmm.analytics:core", version.ref = "metacto-analytics" } +metacto-analytics-hightouch = { module = "com.metacto.kmm.analytics:hightouch", version.ref = "metacto-analytics" } +metacto-analytics-clevertap = { module = "com.metacto.kmm.analytics:clevertap", version.ref = "metacto-analytics" } +metacto-analytics-appsflyer = { module = "com.metacto.kmm.analytics:appsflyer", version.ref = "metacto-analytics" } +metacto-analytics-amplitude = { module = "com.metacto.kmm.analytics:amplitude", version.ref = "metacto-analytics" } + +# Sendbird +sendbird-chat = {module = "com.sendbird.sdk:sendbird-chat", version.ref = "sendbird-chat" } +sendbird-chat-ktx = {module = "com.sendbird.sdk:sendbird-chat-ktx", version.ref = "sendbird-chat-ktx" } +sendbird-uikit = {module = "com.sendbird.sdk:uikit", version.ref = "sendbird-uikit" } + +# RevenueCat +revenuecat-purchases-core = { module = "com.revenuecat.purchases:purchases-kmp-core", version.ref = "revenuecat" } +revenuecat-purchases-ui = { module = "com.revenuecat.purchases:purchases-kmp-ui", version.ref = "revenuecat" } +revenuecat-purchases-result = { module = "com.revenuecat.purchases:purchases-kmp-result", version.ref = "revenuecat" } + +# Google Play Services & Android +location-services = { module = "com.google.android.gms:play-services-location", version.ref = "location-services" } +play-store-review = { module = "com.google.android.play:review", version.ref = "play-store-review" } +work-manager = { module = "androidx.work:work-runtime-ktx", version.ref = "work-manager" } + +# Others +libphonenumber = { module = "io.github.luca992.libphonenumber-kotlin:libphonenumber", version.ref = "lib-phone-number" } +imagepicker = { module = "com.github.dhaval2404:imagepicker", version.ref = "android-image-picker" } +imagecropper = { module = "com.vanniktech:android-image-cropper", version.ref = "android-cropper" } +compottie = { module = "io.github.alexzhirkevich:compottie", version.ref = "compottie" } +webview = { module = "io.github.kevinnzou:compose-webview-multiplatform", version.ref = "webview" } +shimmer = { module = "com.valentinilk.shimmer:compose-shimmer", version.ref = "shimmer" } +calendar = { module = "com.kizitonwose.calendar:compose-multiplatform", version.ref = "calendar" } +pdfviewer = { module = "io.github.afreakyelf:Pdf-Viewer", version.ref = "pdfviewer" } +android-desugar = { module = "com.android.tools:desugar_jdk_libs", version.ref = "desugar" } +recyclerview = { module = "androidx.recyclerview:recyclerview", version.ref = "recyclerview" } +facebook-sdk = { module = "com.facebook.android:facebook-android-sdk", version.ref = "facebook-sdk" } diff --git a/iosApp/Podfile b/iosApp/Podfile deleted file mode 100644 index d554efe4..00000000 --- a/iosApp/Podfile +++ /dev/null @@ -1,6 +0,0 @@ -source 'https://github.com/CocoaPods/Specs.git' -target 'iosApp' do - use_frameworks! - platform :ios, '14.1' - pod 'sampleAppShared', :path => '../sampleAppShared' -end diff --git a/iosApp/iosApp.xcworkspace/contents.xcworkspacedata b/iosApp/iosApp.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index c009e7d7..00000000 --- a/iosApp/iosApp.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/iosApp/iosApp/AvoidDisposeViewController.swift b/iosApp/iosApp/AvoidDisposeViewController.swift deleted file mode 100644 index 080ae3dc..00000000 --- a/iosApp/iosApp/AvoidDisposeViewController.swift +++ /dev/null @@ -1,71 +0,0 @@ -// -// AvoidDisposeViewController.swift -// iosApp -// -// Created by Clem on 27.10.22. -// Copyright © 2022 orgName. All rights reserved. -// - -import UIKit -import SwiftUI - -struct AvoidDisposeViewControllerRepresentable: UIViewControllerRepresentable { - let composeController: UIViewController - - func makeUIViewController(context: Context) -> UIViewController { - return AvoidDisposeViewController(composeController) - } - - func updateUIViewController(_ uiViewController: UIViewController, context: Context) {} -} - - -class AvoidDisposeViewController: UIViewController { - let controller: UIViewController - - init(_ controller: UIViewController) { - self.controller = controller - super.init(nibName: nil, bundle: nil) - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - override func viewWillAppear(_ animated: Bool) { - super.viewWillAppear(animated) - addChild(controller) - view.addSubview(controller.view) - } - - override func viewDidAppear(_ animated: Bool) { - super.viewDidAppear(animated) - } - - override func viewDidDisappear(_ animated: Bool) { - super.viewDidDisappear(animated) - controller.removeFromParent() - controller.view.removeFromSuperview() - } - - override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { - super.viewWillTransition(to: size, with: coordinator) - skiaRefresh() - } - - override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) { - super.traitCollectionDidChange(previousTraitCollection) - skiaRefresh() - } - - override func viewSafeAreaInsetsDidChange() { - super.viewSafeAreaInsetsDidChange() - skiaRefresh() - } - - private func skiaRefresh() { - controller.view.frame = view.bounds - controller.viewWillAppear(false) - controller.view.touchesCancelled([UITouch()], with: UIEvent()) - } -} diff --git a/iosApp/iosApp/ContentView.swift b/iosApp/iosApp/ContentView.swift deleted file mode 100644 index fea1b92a..00000000 --- a/iosApp/iosApp/ContentView.swift +++ /dev/null @@ -1,12 +0,0 @@ -import SwiftUI -import sampleAppShared - -struct ContentView: View { - var body: some View { - VStack { - AvoidDisposeViewControllerRepresentable( - composeController: Main_iosKt.MainViewController() - ).ignoresSafeArea(.all) - } - } -} diff --git a/iosApp/iosApp/Extensions/DiProvider+Extensions.swift b/iosApp/iosApp/Extensions/DiProvider+Extensions.swift deleted file mode 100644 index 2d4ed637..00000000 --- a/iosApp/iosApp/Extensions/DiProvider+Extensions.swift +++ /dev/null @@ -1,17 +0,0 @@ -// -// DiProvider+Extensions.swift -// iosApp -// -// Created by Mahmoud Elshamy on 03/09/2024. -// Copyright © 2024 orgName. All rights reserved. -// - -import Foundation -import sampleAppShared - -extension DiProvider { - - func get(clazz: KotlinKClass) -> T { - return getDependency(clazz: clazz) as! T - } -} diff --git a/iosApp/iosApp/iOSApp.swift b/iosApp/iosApp/iOSApp.swift deleted file mode 100644 index de9f60cb..00000000 --- a/iosApp/iosApp/iOSApp.swift +++ /dev/null @@ -1,74 +0,0 @@ -import SwiftUI -import FirebaseCore -import GoogleSignIn -import FirebaseAuth -import AVFAudio -import FirebaseMessaging - -import sampleAppShared - -class AppDelegate: NSObject, UIApplicationDelegate { - private let notificationManager = DiProvider().get(clazz: INotificationManagerKt.Class) as INotificationManager - - func application( - _ application: UIApplication, - didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil - ) -> Bool { - requestPIPBackgroundMode() - FirebaseApp.configure() - return true - } - - private func requestPIPBackgroundMode() { - let session = AVAudioSession.sharedInstance() - do { - try session.setCategory(.playback, mode: .moviePlayback) - } catch let error { - print(error.localizedDescription) - } - } - - func application( - _ application: UIApplication, - didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data - ) { - Messaging.messaging().apnsToken = deviceToken - } - - func application( - _ application: UIApplication, - didReceiveRemoteNotification userInfo: [AnyHashable : Any] - ) async -> UIBackgroundFetchResult { - if Auth.auth().canHandleNotification(userInfo) {} - notificationManager.onApplicationDidReceiveRemoteNotification(userInfo: userInfo) - return UIBackgroundFetchResult.newData - } -} - -@main -struct iOSApp: App { - @UIApplicationDelegateAdaptor(AppDelegate.self) private var appDelegate: AppDelegate - private let deepLinkManager: IDeepLinkManager - - init() { - KoinKt.doInitKoin( - environment: AppEnvironment().dev() - ) - - // Then inject deep link manager - deepLinkManager = DiProvider().get(clazz: IDeepLinkManagerKt.Class) as IDeepLinkManager - } - - var body: some Scene { - WindowGroup { - ContentView() - .onOpenURL { url in - deepLinkManager.emitDeepLink(link: url.absoluteString) - }.onContinueUserActivity(NSUserActivityTypeBrowsingWeb) { activity in - if let url = activity.webpageURL?.absoluteString { - deepLinkManager.emitDeepLink(link: url) - } - } - } - } -} diff --git a/pod_install.sh b/pod_install.sh deleted file mode 100755 index 383b96c3..00000000 --- a/pod_install.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -cd iosApp -pod cache clean --all -arch -x86_64 pod install \ No newline at end of file diff --git a/pull_mains.sh b/pull_mains.sh deleted file mode 100755 index 6c2fbd91..00000000 --- a/pull_mains.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -git pull origin develop -git pull origin staging -git pull origin release \ No newline at end of file diff --git a/sampleAppShared/build.gradle.kts b/sampleAppShared/build.gradle.kts deleted file mode 100644 index 6638acf7..00000000 --- a/sampleAppShared/build.gradle.kts +++ /dev/null @@ -1,146 +0,0 @@ -@file:Suppress("OPT_IN_USAGE") - -import org.jetbrains.kotlin.gradle.dsl.JvmTarget -import org.jetbrains.kotlin.gradle.plugin.mpp.NativeBuildType - -plugins { - kotlin(Plugins.MULTIPLATFORM_PLUGIN) - kotlin(Plugins.COCOAPODS_PLUGIN) - id(Plugins.ANDROID_LIBRARY_PLUGIN) - id(Plugins.COMPOSE_PLUGIN) version Versions.COMPOSE - id(Plugins.COMPOSE_COMPILER_PLUGIN) version Versions.KOTLIN - id(Plugins.SERIALIZATION_PLUGIN) - id(Plugins.PARCELIZE_PLUGIN) -} - -kotlin { - targetHierarchy.default() - - iosX64() - iosArm64() - iosSimulatorArm64() - - androidTarget { - compilerOptions { - jvmTarget.value(JvmTarget.JVM_17) - freeCompilerArgs.addAll("-P", "plugin:org.jetbrains.kotlin.parcelize:additionalAnnotation=com.metacto.core.utils.CommonParcelize") - } - } - - cocoapods { - version = "1.0.0" - summary = "Sample app shared module" - homepage = "https://www.metacto.com/" - ios.deploymentTarget = Configs.IOS_DEPLOYMENT_TARGET - podfile = project.file("../iosApp/Podfile") - framework { - baseName = Configs.SAMPLE_APP_FRAMEWORK_NAME - isStatic = true - linkerOpts.add("-lsqlite3") - - if (System.getenv("XCODE_VERSION_MAJOR") == "1500") { - linkerOpts += "-ld64" - } - - export(project(Dependencies.Modules.CORE_APP)) - } - pod( - name = Dependencies.Pods.FIREBASE_AUTH, - linkOnly = true - ) - pod( - name = Dependencies.Pods.AMPLITUDE, - linkOnly = true - ) - pod(name = Dependencies.Pods.CleverTap.SDK) { - moduleName = Dependencies.Pods.CleverTap.MODULE - linkOnly = true - } - pod( - name = Dependencies.Pods.GOOGLE_SIGN_IN, - version = Versions.GOOGLE_SIGN_IN_POD, - linkOnly = true - ) - pod( - name = Dependencies.Pods.FIREBASE_DYNAMIC_LINKS, - linkOnly = true - ) - pod( - name = Dependencies.Pods.FIREBASE_CRASHLYTICS, - linkOnly = true - ) - pod( - name = Dependencies.Pods.FIREBASE_REMOTE_CONFIG, - linkOnly = true - ) - pod( - name = Dependencies.Pods.FIREBASE_MESSAGING, - linkOnly = true - ) - pod( - name = Dependencies.Pods.FIREBASE_ANALYTICS, - linkOnly = true - ) - pod( - name = Dependencies.Pods.APPS_FLYER, - linkOnly = true - ) - - xcodeConfigurationToNativeBuildType["Debug"] = NativeBuildType.RELEASE - } - - sourceSets { - val commonMain by getting { - dependencies { - api(project(Dependencies.Modules.CORE_APP)) - } - } - - val androidMain by getting { - dependsOn(commonMain) - dependencies { - } - } - - val iosX64Main by getting - val iosArm64Main by getting - val iosSimulatorArm64Main by getting - val iosMain by getting { - dependsOn(commonMain) - iosX64Main.dependsOn(this) - iosArm64Main.dependsOn(this) - iosSimulatorArm64Main.dependsOn(this) - dependencies { - } - } - } -} - -android { - namespace = Configs.SAMPLE_APP_NAMESPACE - compileSdk = Configs.COMPILE_SDK_VERSION - - sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml") - sourceSets["main"].res.srcDirs("src/androidMain/res") - sourceSets["main"].resources.srcDirs("src/commonMain/resources") - sourceSets["main"].res.srcDirs("src/androidMain/res", "src/commonMain/resources") - - defaultConfig { - minSdk = Configs.MIN_SDK_VERSION - } - - compileOptions { - sourceCompatibility = Versions.JVM - targetCompatibility = Versions.JVM - } - - kotlin { - jvmToolchain(Versions.JVM.majorVersion.toInt()) - } -} - -compose.resources { - publicResClass = true - packageOfResClass = "${Configs.SAMPLE_APP_NAMESPACE}.resources" - generateResClass = always -} \ No newline at end of file diff --git a/sampleAppShared/sampleAppShared.podspec b/sampleAppShared/sampleAppShared.podspec deleted file mode 100644 index 05ade2c6..00000000 --- a/sampleAppShared/sampleAppShared.podspec +++ /dev/null @@ -1,63 +0,0 @@ -Pod::Spec.new do |spec| - spec.name = 'sampleAppShared' - spec.version = '1.0.0' - spec.homepage = 'https://www.metacto.com/' - spec.source = { :http=> ''} - spec.authors = '' - spec.license = '' - spec.summary = 'Sample app shared module' - spec.vendored_frameworks = 'build/cocoapods/framework/sampleAppShared.framework' - spec.libraries = 'c++' - spec.ios.deployment_target = '14.1' - spec.dependency 'Amplitude' - spec.dependency 'AppsFlyerFramework' - spec.dependency 'CleverTap-iOS-SDK' - spec.dependency 'FirebaseAnalytics' - spec.dependency 'FirebaseAuth' - spec.dependency 'FirebaseCrashlytics' - spec.dependency 'FirebaseDynamicLinks' - spec.dependency 'FirebaseMessaging' - spec.dependency 'FirebaseRemoteConfig' - spec.dependency 'GoogleSignIn', '7.0.0' - - if !Dir.exist?('build/cocoapods/framework/sampleAppShared.framework') || Dir.empty?('build/cocoapods/framework/sampleAppShared.framework') - raise " - - Kotlin framework 'sampleAppShared' doesn't exist yet, so a proper Xcode project can't be generated. - 'pod install' should be executed after running ':generateDummyFramework' Gradle task: - - ./gradlew :sampleAppShared:generateDummyFramework - - Alternatively, proper pod installation is performed during Gradle sync in the IDE (if Podfile location is set)" - end - - spec.xcconfig = { - 'ENABLE_USER_SCRIPT_SANDBOXING' => 'NO', - } - - spec.pod_target_xcconfig = { - 'KOTLIN_PROJECT_PATH' => ':sampleAppShared', - 'PRODUCT_MODULE_NAME' => 'sampleAppShared', - } - - spec.script_phases = [ - { - :name => 'Build sampleAppShared', - :execution_position => :before_compile, - :shell_path => '/bin/sh', - :script => <<-SCRIPT - if [ "YES" = "$OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED" ]; then - echo "Skipping Gradle build task invocation due to OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED environment variable set to \"YES\"" - exit 0 - fi - set -ev - REPO_ROOT="$PODS_TARGET_SRCROOT" - "$REPO_ROOT/../gradlew" -p "$REPO_ROOT" $KOTLIN_PROJECT_PATH:syncFramework \ - -Pkotlin.native.cocoapods.platform=$PLATFORM_NAME \ - -Pkotlin.native.cocoapods.archs="$ARCHS" \ - -Pkotlin.native.cocoapods.configuration="$CONFIGURATION" - SCRIPT - } - ] - spec.resources = ['build/compose/cocoapods/compose-resources'] -end \ No newline at end of file diff --git a/sampleAppShared/src/androidMain/AndroidManifest.xml b/sampleAppShared/src/androidMain/AndroidManifest.xml deleted file mode 100644 index 56df6478..00000000 --- a/sampleAppShared/src/androidMain/AndroidManifest.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/sampleAppShared/src/androidMain/kotlin/com/sampleApp/app/presentation/main.android.kt b/sampleAppShared/src/androidMain/kotlin/com/sampleApp/app/presentation/main.android.kt deleted file mode 100644 index 543dab67..00000000 --- a/sampleAppShared/src/androidMain/kotlin/com/sampleApp/app/presentation/main.android.kt +++ /dev/null @@ -1,9 +0,0 @@ -package com.sampleApp.app.presentation - -import androidx.compose.runtime.Composable -import com.sampleApp.app.presentation.app.app.AppContent - -@Composable -fun MainView() { - AppContent() -} \ No newline at end of file diff --git a/sampleAppShared/src/commonMain/composeResources/font/fenwick-bold.ttf b/sampleAppShared/src/commonMain/composeResources/font/fenwick-bold.ttf deleted file mode 100644 index 405b58ef..00000000 Binary files a/sampleAppShared/src/commonMain/composeResources/font/fenwick-bold.ttf and /dev/null differ diff --git a/sampleAppShared/src/commonMain/composeResources/font/fenwick-light.ttf b/sampleAppShared/src/commonMain/composeResources/font/fenwick-light.ttf deleted file mode 100644 index 25c73046..00000000 Binary files a/sampleAppShared/src/commonMain/composeResources/font/fenwick-light.ttf and /dev/null differ diff --git a/sampleAppShared/src/commonMain/composeResources/font/fenwick-regular.ttf b/sampleAppShared/src/commonMain/composeResources/font/fenwick-regular.ttf deleted file mode 100644 index 29b28ed0..00000000 Binary files a/sampleAppShared/src/commonMain/composeResources/font/fenwick-regular.ttf and /dev/null differ diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/constants/AppEnvironment.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/constants/AppEnvironment.kt deleted file mode 100644 index 4f49e490..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/constants/AppEnvironment.kt +++ /dev/null @@ -1,31 +0,0 @@ -package com.sampleApp.app.constants - -import com.metacto.core.CoreEnvironment -import com.metacto.strapikmm.datasource.network.NetworkLogLevel - -object AppEnvironment { - fun dev() = CoreEnvironment( - baseUrl = "https://dev-api.satyadating.com/api", - title = "DEV", - networkLogLevel = NetworkLogLevel.ALL, - iosAppStoreId = "id310633997", - androidAppId = "com.sampleApp.app.dev", - forceUpdateRemoteConfigKey = "RECOMMENDED_APP_VERSIONS", - appConfigurationExpirationInMinutes = 1 * 60 * 24, - currentAppConfigurationVersion = 1, - askRemoteNotificationPermissionOnStart = true, - enableSwipeToGoBack = true - ) - - fun prod() = CoreEnvironment( - baseUrl = "https://dev-api.satyadating.com/api", - title = "PRODUCTION", - networkLogLevel = NetworkLogLevel.ALL, - iosAppStoreId = "id310633997", - androidAppId = "com.sampleApp.app.prod", - appConfigurationExpirationInMinutes = 1 * 60 * 24, - currentAppConfigurationVersion = 1, - askRemoteNotificationPermissionOnStart = true, - enableSwipeToGoBack = true - ) -} diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/di/AppModule.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/di/AppModule.kt deleted file mode 100644 index 52fd8e58..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/di/AppModule.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.sampleApp.app.di - -import com.metacto.core.presentation.globalState.ICoreGlobalState -import com.sampleApp.app.presentation.app.globalState.AppGlobalState -import com.sampleApp.app.presentation.app.globalState.IAppGlobalState -import org.koin.dsl.module - -val appModule = module { - single { - AppGlobalState() - } - - single { - get() - } -} \ No newline at end of file diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/di/Koin.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/di/Koin.kt deleted file mode 100644 index 5594b520..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/di/Koin.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.sampleApp.app.di - -import com.metacto.core.CoreEnvironment -import com.metacto.core.di.coreModule -import com.metacto.strapikmm.errorhandling.NetworkError -import com.sampleApp.app.constants.AppEnvironment -import com.sampleApp.app.deepLink.DEEP_LINK_PARSERS -import dev.gitlive.firebase.auth.ActionCodeSettings -import dev.gitlive.firebase.auth.AndroidPackageName -import org.koin.core.context.startKoin -import org.koin.dsl.KoinAppDeclaration - -fun initKoin( - environment: CoreEnvironment -) = initKoin( - environment = environment, - appDeclaration = {} -) - -fun initKoin( - environment: CoreEnvironment, - appDeclaration: KoinAppDeclaration = {} -) = startKoin { - appDeclaration() - modules( - createCoreModule(environment), - appModule, - platformModule, - viewModelsModule, - repositoriesModule - ) -} - -private fun createCoreModule(environment: CoreEnvironment) = coreModule( - environment = environment, - appStorageName = "SampleApp", - shouldShowActualErrorMessages = environment != AppEnvironment.prod(), - errorClass = NetworkError::class, - actionCodeSettings = ActionCodeSettings( - iOSBundleId = "com.sampleApp.app", - androidPackageName = AndroidPackageName( - packageName = "com.sampleApp.app", - installIfNotAvailable = true, - minimumVersion = "1" - ), - url = "", - canHandleCodeInApp = true, - dynamicLinkDomain = "links.sampleApp.com", - ), - deepLinkParsers = DEEP_LINK_PARSERS -) \ No newline at end of file diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/di/RepositoriesModule.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/di/RepositoriesModule.kt deleted file mode 100644 index e1f42b8b..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/di/RepositoriesModule.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.sampleApp.app.di - -import com.metacto.core.domain.repos.UploadRepository -import org.koin.dsl.module - -val repositoriesModule = module { - single { - UploadRepository(get(), get(), get()) - } -} \ No newline at end of file diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/di/ViewModelsModule.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/di/ViewModelsModule.kt deleted file mode 100644 index 6e40f1b0..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/di/ViewModelsModule.kt +++ /dev/null @@ -1,27 +0,0 @@ -package com.sampleApp.app.di - -// MARK: Add imports -import com.sampleApp.app.presentation.test2.test2.Test2ViewModel -import com.metacto.core.di.commonViewModel -import com.sampleApp.app.presentation.app.app.AppViewModel -import com.sampleApp.app.presentation.camera.CameraViewModel -import com.sampleApp.app.presentation.home.HomeViewModel -import com.sampleApp.app.presentation.main.MainViewModel -import com.sampleApp.app.presentation.profile.ProfileViewModel -import com.sampleApp.app.presentation.test.TestViewModel -import com.sampleApp.app.presentation.testsheet1.TestSheet1ViewModel -import com.sampleApp.app.presentation.testsheet2.TestSheet2ViewModel -import org.koin.dsl.module - -val viewModelsModule = module { - // MARK: Add view model definitions - commonViewModel { Test2ViewModel() } - commonViewModel { TestSheet2ViewModel() } - commonViewModel { TestSheet1ViewModel() } - commonViewModel { CameraViewModel() } - commonViewModel { TestViewModel() } - commonViewModel { ProfileViewModel() } - commonViewModel { HomeViewModel(get(),get(), get()) } - commonViewModel { MainViewModel() } - single { AppViewModel() } -} diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/domain/TestUserModel.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/domain/TestUserModel.kt deleted file mode 100644 index 19303d39..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/domain/TestUserModel.kt +++ /dev/null @@ -1,7 +0,0 @@ -package com.sampleApp.app.domain - -data class TestUserModel( - val name: String, - val id: Int, - val isMale: Boolean -) diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/domain/events/UserEvent.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/domain/events/UserEvent.kt deleted file mode 100644 index ddede05b..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/domain/events/UserEvent.kt +++ /dev/null @@ -1,23 +0,0 @@ -package com.sampleApp.app.domain.events - -import com.sampleApp.app.domain.TestUserModel - -sealed class UserEvent { - data class UserUpdated(val userName: String) : UserEvent() { - companion object { - val eventName = UserUpdated::class.simpleName.orEmpty() - } - } - - class UserDeleted : UserEvent() { - companion object { - val eventName = UserDeleted::class.simpleName.orEmpty() - } - } - - data class UserAdded(val user: TestUserModel) : UserEvent() { - companion object { - val eventName = UserAdded::class.simpleName.orEmpty() - } - } -} diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/app/app/AppContent.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/app/app/AppContent.kt deleted file mode 100644 index 4c50e6e9..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/app/app/AppContent.kt +++ /dev/null @@ -1,40 +0,0 @@ -package com.sampleApp.app.presentation.app.app - -import androidx.compose.foundation.background -import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.ui.Modifier -import com.metacto.core.navigation.NavManager -import com.metacto.core.presentation.app.CoreAppContent -import com.sampleApp.app.presentation.app.globalState.IAppGlobalState -import com.sampleApp.app.presentation.app.globalState.models.AppBackgroundType -import com.sampleApp.app.presentation.main.MainScreen -import com.sampleApp.app.presentation.theme.AppTheme -import com.sampleApp.app.presentation.theme.AppThemeContent -import org.koin.compose.koinInject - -@Composable -internal fun AppContent() { - // Get main objects - val globalState = koinInject() - val navManager = koinInject() - - // Get states - val backgroundType by globalState.appBgState - - // Prepare app background - val bgColor = when(backgroundType) { - AppBackgroundType.PRIMARY -> AppTheme.colors.miniPeach - AppBackgroundType.SECONDARY -> AppTheme.colors.lilac - } - - // Render core app content - AppThemeContent { - CoreAppContent( - modifier = Modifier.background(bgColor), - globalState = globalState, - navManager = navManager, - startScreen = MainScreen() - ) - } -} diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/app/app/AppContract.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/app/app/AppContract.kt deleted file mode 100644 index 83f86cb6..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/app/app/AppContract.kt +++ /dev/null @@ -1,15 +0,0 @@ -package com.sampleApp.app.presentation.app.app - -import com.metacto.core.presentation.base.ViewEvent -import com.metacto.core.presentation.base.ViewSideEffect -import com.metacto.core.presentation.base.ViewState - -class AppContract { - object State : ViewState - - sealed class Event : ViewEvent { - data object Init : Event() - } - - sealed class Effect : ViewSideEffect -} diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/app/globalState/AppGlobalState.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/app/globalState/AppGlobalState.kt deleted file mode 100644 index 6dab2c91..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/app/globalState/AppGlobalState.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.sampleApp.app.presentation.app.globalState - -import androidx.compose.runtime.mutableStateOf -import com.metacto.core.presentation.globalState.CoreGlobalState -import com.sampleApp.app.presentation.app.globalState.models.AppBackgroundType - -class AppGlobalState : CoreGlobalState(), IAppGlobalState { - override val appBgState = mutableStateOf(AppBackgroundType.PRIMARY) - - override fun updateAppBackground(type: AppBackgroundType) { - appBgState.value = type - } -} \ No newline at end of file diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/app/globalState/IAppGlobalState.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/app/globalState/IAppGlobalState.kt deleted file mode 100644 index 66c4d5a1..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/app/globalState/IAppGlobalState.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.sampleApp.app.presentation.app.globalState - -import androidx.compose.runtime.State -import com.metacto.core.presentation.globalState.ICoreGlobalState -import com.sampleApp.app.presentation.app.globalState.models.AppBackgroundType - -interface IAppGlobalState : ICoreGlobalState { - val appBgState: State - - fun updateAppBackground(type: AppBackgroundType) -} \ No newline at end of file diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/app/globalState/models/AppBackgroundType.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/app/globalState/models/AppBackgroundType.kt deleted file mode 100644 index ef17d022..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/app/globalState/models/AppBackgroundType.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.sampleApp.app.presentation.app.globalState.models - -enum class AppBackgroundType { - PRIMARY, - SECONDARY -} diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/base/BaseViewModel.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/base/BaseViewModel.kt deleted file mode 100644 index e482b5a3..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/base/BaseViewModel.kt +++ /dev/null @@ -1,20 +0,0 @@ -package com.sampleApp.app.presentation.base - -import com.metacto.core.presentation.base.CoreViewModel -import com.metacto.core.presentation.base.ErrorType -import com.metacto.core.presentation.base.ViewEvent -import com.metacto.core.presentation.base.ViewSideEffect -import com.metacto.core.presentation.base.ViewState -import com.metacto.core.presentation.globalState.models.LoadingType -import com.sampleApp.app.presentation.app.globalState.IAppGlobalState -import org.koin.core.component.inject - -abstract class BaseViewModel : - CoreViewModel() { - - protected val globalState by inject() - - override val defaultLoadingType: LoadingType = LoadingType.SecondaryCircularBlocking - override val defaultErrorType: ErrorType = ErrorType.SnackBar - -} \ No newline at end of file diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/camera/CameraContract.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/camera/CameraContract.kt deleted file mode 100644 index 00814372..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/camera/CameraContract.kt +++ /dev/null @@ -1,29 +0,0 @@ -package com.sampleApp.app.presentation.camera - -import com.metacto.core.presentation.base.ViewEvent -import com.metacto.core.presentation.base.ViewSideEffect -import com.metacto.core.presentation.base.ViewState -import com.metacto.core.presentation.camera.CameraController -import com.metacto.core.presentation.components.videoPlayer.VideoPlayerController - -class CameraContract { - - data class State( - val isInitialized: Boolean = false, - val cameraController: CameraController? = null, - val videoController: VideoPlayerController? = null, - val isRecording: Boolean = false, - val recordingFilePath: String? = null - ) : ViewState - - sealed class Event : ViewEvent { - data object Init : Event() - data object BackClicked : Event() - data object RetakeClicked : Event() - data object ToggleRecord : Event() - data object ToggleLens : Event() - data class VideoControllerCreated(val controller: VideoPlayerController) : Event() - } - - sealed class Effect : ViewSideEffect -} diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/camera/CameraScreen.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/camera/CameraScreen.kt deleted file mode 100644 index 92dff8e7..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/camera/CameraScreen.kt +++ /dev/null @@ -1,29 +0,0 @@ -package com.sampleApp.app.presentation.camera - -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import com.sampleApp.app.presentation.camera.CameraContract.Event -import com.sampleApp.app.presentation.camera.components.CameraContent -import com.metacto.core.presentation.base.BaseScreen -import com.metacto.core.presentation.base.SIDE_EFFECTS_KEY -import com.metacto.core.presentation.base.rememberViewModel - -internal object CameraScreen : BaseScreen() { - @Composable - override fun Content() { - // Get main objects - val viewModel = rememberViewModel() - // Init view model - LaunchedEffect(SIDE_EFFECTS_KEY) { - viewModel.setEvent( - Event.Init - ) - } - - // Render content - CameraContent( - state = viewModel.viewState.value, - onEvent = viewModel::setEvent - ) - } -} diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/camera/CameraViewModel.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/camera/CameraViewModel.kt deleted file mode 100644 index 590bd704..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/camera/CameraViewModel.kt +++ /dev/null @@ -1,124 +0,0 @@ -package com.sampleApp.app.presentation.camera - -import com.metacto.core.domain.repos.UploadRepository -import com.metacto.core.presentation.camera.CameraController -import com.metacto.core.presentation.camera.models.CameraLens -import com.metacto.core.presentation.camera.models.VideoRecordingParams -import com.metacto.core.presentation.components.videoPlayer.VideoPlayerController -import com.metacto.core.presentation.globalState.models.SnackBarParams -import com.metacto.core.presentation.globalState.models.SnackBarType -import com.metacto.core.utils.file.IFileManager -import com.metacto.core.utils.media.IMediaManager -import com.metacto.strapikmm.constants.SharedConstants -import com.metacto.strapikmm.sharedpreference.KmmPreference -import com.sampleApp.app.presentation.base.BaseViewModel -import com.sampleApp.app.presentation.camera.CameraContract.Effect -import com.sampleApp.app.presentation.camera.CameraContract.Event -import com.sampleApp.app.presentation.camera.CameraContract.State -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.IO -import org.koin.core.component.inject -import org.koin.core.parameter.parametersOf - -class CameraViewModel : BaseViewModel() { - private val uploadRepository by inject() - private val fileManager by inject() - private val sharedPreference by inject() - private val cameraController by inject() { - parametersOf(CameraLens.FRONT) - } - private val mediaManager by inject() - - override fun setInitialState() = State() - - override fun handleEvents(event: Event): Any = when (event) { - Event.Init -> init() - Event.BackClicked -> navManager.goBack() - Event.RetakeClicked -> handleRetakeClick() - Event.ToggleLens -> handleToggleLens() - Event.ToggleRecord -> handleToggleRecord() - is Event.VideoControllerCreated -> handleVideoControllerCreate(event.controller) - } - - private fun init() { - // Validate if already initialized - if (currentState.isInitialized) return - - // Init - setState { copy(cameraController = this@CameraViewModel.cameraController) } - - // Update the flag - setState { copy(isInitialized = true) } - } - - private fun handleToggleLens() { - currentState.cameraController?.toggleCameraLens() - } - - private fun handleRetakeClick() { - val deleteResult = fileManager.clearFolder(cameraController.getVideosDirPath()) - globalState.snackBar( - SnackBarParams( - message = "Delete result: $deleteResult", - type = SnackBarType.SUCCESS - ) - ) - - setState { - copy( - isRecording = false, - recordingFilePath = null - ) - } - } - - private fun handleToggleRecord() = executeCatching( - context = Dispatchers.IO, - block = { - println("Toggle record") - val cameraController = currentState.cameraController ?: return@executeCatching - if (currentState.isRecording) { - println("Stop recording") - val result = cameraController.stopRecording() - setState { - copy( - isRecording = false, - recordingFilePath = result.videoPath - ) - } - println("Stopped recording") - println("Video path: ${result.videoPath}") - currentState.videoController?.play() - - // Upload it - val videoBytes = fileManager.readFile(result.videoPath) - sharedPreference.putSecureString(SharedConstants.ACCESS_TOKEN, "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6OCwiaWF0IjoxNzMyNjUyMDM4LCJleHAiOjE3NjQxODgwMzh9.ao1t57DqoyA7OqwLUmU7EhssMWfe7Qb3egozpGFSutQ") - val uploadResult = uploadRepository.uploadVideo(videoBytes, previewUrl = "https://mahmoudelshamy.com/index-assets/images/profile-2-250x250.png") - println("Upload video result: $uploadResult") - - val previewBytes = mediaManager.getVideoPreview(result.videoPath) - - if (previewBytes != null) { - val uploadPreviewResult = uploadRepository.uploadImage(previewBytes) - println("Upload preview result: $uploadPreviewResult") - } else { - println("Failed to get video preview") - } - - } else { - println("Start recording") - cameraController.recordVideo( - params = VideoRecordingParams() - ) - setState { copy(isRecording = true) } - } - }, - onError = { throwable, msg -> - println("throwable: $throwable, msg: $msg") - } - ) - - private fun handleVideoControllerCreate(controller: VideoPlayerController) { - setState { copy(videoController = controller) } - } -} diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/camera/components/CameraContent.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/camera/components/CameraContent.kt deleted file mode 100644 index 3d56b090..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/camera/components/CameraContent.kt +++ /dev/null @@ -1,119 +0,0 @@ -package com.sampleApp.app.presentation.camera.components - -import androidx.compose.foundation.background -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.navigationBarsPadding -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.statusBarsPadding -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.unit.dp -import com.metacto.core.navigation.NavManager -import com.metacto.core.presentation.camera.CameraPreview -import com.metacto.core.presentation.components.buttons.PrimaryFilledButton -import com.metacto.core.presentation.components.videoPlayer.ControlsType -import com.metacto.core.presentation.components.videoPlayer.VideoPlayer -import com.sampleApp.app.presentation.camera.CameraContract.Event -import com.sampleApp.app.presentation.camera.CameraContract.State -import com.sampleApp.app.presentation.test.TestScreen -import com.sampleApp.app.presentation.theme.AppTheme.colors -import org.koin.compose.koinInject - -@Composable -internal fun CameraContent( - state: State, - onEvent: (Event) -> Unit -) { - val navManager = koinInject() - - // Container column - Box( - modifier = Modifier - .fillMaxSize() - .background(colors.black) - .statusBarsPadding() - .navigationBarsPadding() - ) { - if (state.cameraController != null) { - CameraPreview( - cameraController = state.cameraController, - modifier = Modifier - .fillMaxSize() - .background(colors.black) - ) - } - - if (state.recordingFilePath != null) { - VideoPlayer( - modifier = Modifier - .fillMaxSize() - .background(Color.Black), - videoUrl = state.recordingFilePath, - autoPlay = true, - enablePip = false, - controlsType = ControlsType.CustomControls, - enableMediaMetadata = false, - uniqueId = "camera-video-player" - ) - } - - Row( - horizontalArrangement = Arrangement.spacedBy(16.dp), - modifier = Modifier - .fillMaxWidth() - .padding(horizontal = 16.dp) - .align(Alignment.BottomCenter) - ) { - PrimaryFilledButton( - modifier = Modifier.weight(1f), - text = if (state.isRecording) "Stop" else "Record", - onClick = { - onEvent(Event.ToggleRecord) - } - ) - - PrimaryFilledButton( - modifier = Modifier.weight(1f), - text = "Lens", - onClick = { - onEvent(Event.ToggleLens) - } - ) - } - } - - PrimaryFilledButton( - modifier = Modifier.fillMaxWidth(), - text = "Nav to test screen", - onClick = { - navManager.navigate(TestScreen) - } - ) - - Row( - modifier = Modifier.fillMaxWidth().padding(top = 20.dp), - horizontalArrangement = Arrangement.spacedBy(20.dp) - ) { - PrimaryFilledButton( - modifier = Modifier.weight(1f), - text = "Go back", - onClick = { - onEvent(Event.BackClicked) - } - ) - - PrimaryFilledButton( - modifier = Modifier.weight(1f), - text = "Retake", - onClick = { - onEvent(Event.RetakeClicked) - } - ) - } -} diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/home/HomeContract.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/home/HomeContract.kt deleted file mode 100644 index 748b7b4d..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/home/HomeContract.kt +++ /dev/null @@ -1,60 +0,0 @@ -package com.sampleApp.app.presentation.home - -import coil3.request.ErrorResult -import com.metacto.core.permissions.enums.PermissionState -import com.metacto.core.presentation.base.ViewEvent -import com.metacto.core.presentation.base.ViewSideEffect -import com.metacto.core.presentation.base.ViewState -import com.metacto.core.presentation.components.videoPlayer.VideoPlayerController -import com.metacto.core.presentation.itemPicker.models.PickerItem -import com.metacto.core.presentation.itemPicker.models.PickerItemUIModel -import com.metacto.core.presentation.models.ImageUIModel -import com.sampleApp.app.presentation.models.VideoItemInfo - -class HomeContract { - - data class State( - val isInitialized: Boolean = false, - val isVideoPlaying: Boolean = true, - val currentVideo: VideoItemInfo = VIDEOS_LIST[0], - val videoController: VideoPlayerController? = null, - val pickedItem: PickerItemUIModel? = null, - val selectedNativePickerItem: PickerItem? = null, - val cameraPermState: PermissionState? = null, - val image: ImageUIModel?= null - ) : ViewState - - sealed class Event : ViewEvent { - data object Init : Event() - data object NavToYoutubeScreen : Event() - data object NavToTestScreen : Event() - data class ChangeCurrentVideo(val index: Int) : Event() - data class VideoPlayerControllerCreated(val controller: VideoPlayerController) : Event() - data object OpenPicker : Event() - data class ImageFailedLoading(val error: ErrorResult) : Event() - data object NavigateToCameraScreen : Event() - data object RequestCameraPermClicked : Event() - } - - sealed class Effect : ViewSideEffect - - companion object { - val VIDEOS_LIST = listOf( - VideoItemInfo( - url = "https://www.w3schools.com/tags/mov_bbb.mp4", - title = "Mahmoud Elshamy - Talking about the future of the world", - artist = "Mahmoud Elshamy", - artworkUrl = "https://mahmoudelshamy.com/index-assets/images/profile-2-250x250.png" - ), - VideoItemInfo( - url = "/data/user/0/com.sampleApp.app.prod/cache/videos/recorded_video.mp4", - title = "Talking about the future of the Compose multiplatform", - artist = "Ahmed Elzeiny", - artworkUrl = "https://www.hdwallpapers.in/download/car_in_fire_city_hq-normal.jpg" - ), - VideoItemInfo( - url = "/data/user/0/com.sampleApp.app.prod/cache/videos/recorded_video.mp4" - ) - ) - } -} diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/home/HomeTab.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/home/HomeTab.kt deleted file mode 100644 index a820bbe6..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/home/HomeTab.kt +++ /dev/null @@ -1,29 +0,0 @@ -package com.sampleApp.app.presentation.home - -import androidx.compose.runtime.Composable -import com.metacto.core.presentation.base.BaseTabScreen -import com.metacto.core.presentation.base.rememberViewModel -import com.sampleApp.app.presentation.home.HomeContract.Event -import com.sampleApp.app.presentation.home.components.HomeContent - -internal object HomeTab : BaseTabScreen() { - private var viewModel: HomeViewModel? = null - - @Composable - override fun Content() { - // Get the view model - val viewModel = rememberViewModel() - this.viewModel = viewModel - - // Render content - HomeContent( - state = viewModel.viewState.value, - onEvent = viewModel::setEvent - ) - } - - override fun onDisplayed() { - super.onDisplayed() - viewModel?.setEvent(Event.Init) - } -} diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/home/HomeViewModel.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/home/HomeViewModel.kt deleted file mode 100644 index 9f7d6b94..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/home/HomeViewModel.kt +++ /dev/null @@ -1,156 +0,0 @@ -package com.sampleApp.app.presentation.home - -import coil3.network.httpHeaders -import coil3.request.ErrorResult -import com.metacto.core.domain.repos.UploadRepository -import com.metacto.core.permissions.enums.Permission -import com.metacto.core.permissions.enums.PermissionState -import com.metacto.core.presentation.globalState.models.MessagePopupParams -import com.metacto.core.presentation.itemPicker.ItemPickerSheet -import com.metacto.core.presentation.itemPicker.models.PickerItemUIModel -import com.metacto.core.presentation.models.ImageUIModel -import com.metacto.core.presentation.models.copyOrCreate -import com.metacto.core.presentation.youtube.YoutubeScreen -import com.metacto.core.utils.date.formatToRelativeDate -import com.metacto.core.utils.deepLink.IDeepLinkManager -import com.metacto.core.utils.phoneNumber.IPhoneNumberManager -import com.sampleApp.app.presentation.base.BaseViewModel -import com.sampleApp.app.presentation.home.HomeContract.Companion.VIDEOS_LIST -import com.sampleApp.app.presentation.home.HomeContract.Effect -import com.sampleApp.app.presentation.home.HomeContract.Event -import com.sampleApp.app.presentation.home.HomeContract.State -import com.sampleApp.app.presentation.test.TestScreen -import kotlinx.datetime.LocalDate -import kotlinx.datetime.LocalDateTime -import kotlinx.datetime.LocalTime - -class HomeViewModel( - private val deeplinkManager: IDeepLinkManager, - private val phoneNumberManager: IPhoneNumberManager, - private val uploadRepository: UploadRepository -) : BaseViewModel() { - - override fun setInitialState() = State() - - override fun handleEvents(event: Event): Any = when (event) { - Event.Init -> init() - - Event.NavToYoutubeScreen -> { - navManager.navigate(YoutubeScreen("Gmhk7mWG050")) - } - - Event.NavToTestScreen -> { - navManager.navigate(TestScreen) - } - - is Event.ChangeCurrentVideo -> { - setState { copy(currentVideo = VIDEOS_LIST[event.index]) } - currentState.videoController?.play() - Unit - } - - is Event.VideoPlayerControllerCreated -> { - setState { copy(videoController = event.controller) } - } - - is Event.OpenPicker -> { - navManager.navigateToBottomSheet( - ItemPickerSheet( - selectedItem = currentState.pickedItem, - items = (0..20).map { - PickerItemUIModel( - key = it.toString(), - title = "Item $it" - ) - } - ) - ) - } - - Event.NavigateToCameraScreen -> { - globalState.messagePopup( - params = - MessagePopupParams( - body = "These data give a picture of your physical health. Factors taken into account include how much you exercise and how much energy you burn while active.\n" + - "\n" + - "Vigorous, regular exercise is directly correlated with good physical health, and longer exercise sessions are strong indicators of endurance and overall fitness. ", - description = "Sources:\n" + - "Shaffer, F., & Ginsberg, J. P. (2017). An overview of heart rate variability metrics and norms. Frontiers in Public Health, 5, 258.\n" + - "Brosschot, J. F., van Dijk, E., & Thayer, J. F. (2007). Daily worry is related to low heart rate variability during waking and the subsequent nocturnal sleep period. International Journal of Psychophysiology, 63(1), 39-47." - ) - ) - } - - Event.RequestCameraPermClicked -> { - executeSilent({ - permissionManager.requestPermission(Permission.CAMERA) - setState { copy(cameraPermState = PermissionState.Granted) } - }) - } - - is Event.ImageFailedLoading -> onImageFailedLoading(event.error) - } - - private fun init() { - // Validate if already initialized - if (currentState.isInitialized) return - - - setState { copy(image = ImageUIModel(url = "https://scstage103-cd.joycemeyer.org/-/media/JoyceMeyer/Grow-Your-Faith/Daily-Devo/DevoImage17.jpg")) } - - val date1 = LocalDate(2021, 1, 1) - val date2 = LocalDate(2025, 2, 25) - val date3 = LocalDateTime( - date = LocalDate(2025, 2, 25), - time = LocalTime(14, 15) - ) - val date4 = LocalDateTime( - date = LocalDate(2025, 2, 25), - time = LocalTime(14, 10) - ) - val date5 = LocalDateTime( - date = LocalDate(2025, 2, 25), - time = LocalTime(13, 0) - ) - - println("Formatted date ==== date1: ${date1.formatToRelativeDate()}") - println("Formatted date ==== date2: ${date2.formatToRelativeDate()}") - println("Formatted date ==== date3: ${date3.formatToRelativeDate()}") - println("Formatted date ==== date4: ${date4.formatToRelativeDate()}") - println("Formatted date ==== date5: ${date5.formatToRelativeDate()}") - - // Init - executeSilent({ - val cameraPermState = permissionManager.getPermissionState(Permission.CAMERA) - setState { - copy( - cameraPermState = cameraPermState - ) - } - }) - - val validPhoneNumber = phoneNumberManager.getValidPhoneNumber("201555056563", "EG") - println("phoneNumber: $validPhoneNumber") - - observeItemPickerResults() - - // Update the flag - setState { copy(isInitialized = true) } - } - - private fun observeItemPickerResults() { - navManager.collectNavResult { pickedItem -> - setState { copy(pickedItem = pickedItem) } - } - } - - private fun onImageFailedLoading(errorResult: ErrorResult) = executeSilent({ - val error = errorResult.throwable.message.orEmpty() - val url = currentState.image?.url ?: return@executeSilent - errorResult.request.data - if(error.contains("makeFromEncoded", true)) { - val bytes = uploadRepository.downloadBytes(url, errorResult.request.httpHeaders.asMap()) - setState { copy(image = image.copyOrCreate(bytes = bytes)) } - } - }) -} diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/home/components/HomeContent.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/home/components/HomeContent.kt deleted file mode 100644 index 727a7d6e..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/home/components/HomeContent.kt +++ /dev/null @@ -1,287 +0,0 @@ -package com.sampleApp.app.presentation.home.components - -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.fillMaxHeight -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.width -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Work -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.Modifier -import androidx.compose.ui.unit.dp -import com.metacto.core.navigation.NavManager -import com.metacto.core.presentation.components.audioPlayer.AudioPlayer -import com.metacto.core.presentation.components.audioPlayer.AudioPlayerStatusListener -import com.metacto.core.presentation.components.buttons.PrimaryFilledButton -import com.metacto.core.presentation.components.containers.ScreenColumn -import com.metacto.core.presentation.components.images.AppImage -import com.metacto.core.presentation.components.inputFields.OutlinedOtpInputField -import com.metacto.core.presentation.components.inputFields.PickerInputField -import com.metacto.core.presentation.components.inputFields.PrimaryTextInputField -import com.metacto.core.presentation.components.videoPlayer.ControlsType -import com.metacto.core.presentation.components.videoPlayer.VideoPlayer -import com.metacto.core.utils.contacts.rememberContactsCollectorOptionsFactory -import com.metacto.core.utils.language.English -import com.metacto.core.utils.language.ILanguageManager -import com.metacto.core.utils.language.Language -import com.metacto.core.utils.phoneNumber.IPhoneNumberManager -import com.sampleApp.app.presentation.home.HomeContract -import com.sampleApp.app.presentation.home.HomeContract.Event -import com.sampleApp.app.presentation.home.HomeContract.State -import com.sampleApp.app.presentation.test2.test2.Test2Screen -import com.sampleApp.app.presentation.theme.AppTheme -import com.sampleApp.app.resources.Res -import com.sampleApp.app.resources.toggle_language -import org.jetbrains.compose.resources.stringResource -import org.koin.compose.koinInject - -private val LANGUAGES = mapOf( - "en" to Language.English, - "ar" to Language( - code = "ar", - name = "العربية", - isRtl = true - ) -) - -@Composable -internal fun HomeContent( - state: State, - onEvent: (Event) -> Unit -) { - val contactsCollectorOptionsFactory = rememberContactsCollectorOptionsFactory() - val languageManager = koinInject() - val navManager = koinInject() - - ScreenColumn( - isScrollable = true, - verticalArrangement = Arrangement.spacedBy(8.dp), - enableSafeInsets = true, - onScroll = { - println("HomeContent -- onScroll") - }, - onScrollUp = { - println("HomeContent -- onScrollUp") - }, - onScrollDown = { - println("HomeContent -- onScrollDown") - }, - ) { - var otp by remember { mutableStateOf("") } - OutlinedOtpInputField( - pinCount = 6, - text = otp, - onValueChange = { - otp = it - }, - modifier = Modifier.fillMaxWidth() - ) - AppImage( - url = "https://scstage103-cd.joycemeyer.org/-/media/JoyceMeyer/Ads/Books/Battlefield-of-the-Mind/BOTM_WebAd1.jpeg", - extraHeaders = mapOf("Accept" to "image/png"), - onError = { - onEvent.invoke(Event.ImageFailedLoading(it)) - } - ) - - VideoPlayer( - uniqueId = "current_message_video_player", - videoUrl = "https://storage.sardius.media/1088c54907d9370/archives/cA62C036E29333D13992134582b5/media/playlist.m3u8?feedId=05028cCcc9", - autoPlay = false, - enablePip = true, - handleLifecyclePause = false, - controlsType = ControlsType.NativeControls, - controllerShowTimeoutMs = 2000, - onPlayerCreated = { - - }, - onVideoStarted = { - println("Video player started") - }, - onVideoPaused = { - println("Video player paused") - }, - onVideoResumed = { - println("Video player resumed") - }, - modifier = Modifier - .height(400.dp) - .fillMaxWidth() - ) -// AudioPlayer( -// thumbnailUrl = "https://cdn.sanity.io/images/599r6htc/regionalized/a26fe0cf37bcc164980bcf8014817652df9683a7-1440x810.png", -// audioUrl = "https://commondatastorage.googleapis.com/codeskulptor-assets/Epoq-Lepidoptera.ogg", -// title = "testing testing testing testing testing testing testing testing testing", -// thumbnailSize = 50.dp, -// audioPlayerStatusListener = object :AudioPlayerStatusListener{ -// override fun onAudioPlayed() { -// println("Audio player played") -// } -// -// override fun onAudioPaused() { -// println("Audio player paused") -// } -// } -// ) - - Row( - modifier = Modifier.fillMaxWidth() - ) { - PrimaryFilledButton( - modifier = Modifier.weight(1f), - text = "Video 1", - onClick = { - onEvent(Event.ChangeCurrentVideo(0)) - } - ) - - PrimaryFilledButton( - modifier = Modifier.weight(1f), - text = "Video 2", - onClick = { - onEvent(Event.ChangeCurrentVideo(1)) - } - ) - - PrimaryFilledButton( - modifier = Modifier.weight(1f), - text = "Video 3", - onClick = { - onEvent(Event.ChangeCurrentVideo(2)) - } - ) - } - - PrimaryFilledButton( - modifier = Modifier.fillMaxWidth(), - text = "To Camera Screen", - onClick = { - onEvent(Event.NavigateToCameraScreen) - } - ) - - PrimaryFilledButton( - modifier = Modifier.fillMaxWidth(), - text = "To Youtube Screen", - onClick = { - onEvent(Event.NavToYoutubeScreen) - } - ) - - PrimaryFilledButton( - modifier = Modifier.fillMaxWidth(), - text = "To Test Screen", - onClick = { - onEvent(Event.NavToTestScreen) - } - ) - - PrimaryFilledButton( - modifier = Modifier.fillMaxWidth(), - text = "To Test Screen 2", - onClick = { - navManager.navigate(Test2Screen()) - } - ) - - PrimaryFilledButton( - modifier = Modifier.fillMaxWidth(), - text = "Open Picker", - onClick = { - onEvent(Event.OpenPicker) - } - ) - - PrimaryFilledButton( - modifier = Modifier.fillMaxWidth(), - text = "Request camera permissions", - onClick = { - onEvent(Event.RequestCameraPermClicked) - } - ) - - var text by remember { mutableStateOf("") } - PrimaryTextInputField( - modifier = Modifier.fillMaxWidth(), - text = text, - maxLines = 20, - singleLine = false, - placeholderMaxLines = 20, - minHeight = AppTheme.spacings.spacing100, - placeholder = "Some long placeholder text that should wrap to the next line if it's too long to fit in one line", - onValueChange = { - text = it - } - ) - - PickerInputField( - startIconVector = Icons.Default.Work, - text = "", - onClick = {} - ) - - var phoneNumber by remember { mutableStateOf("") } -// val phoneNumberUtil = rememberPhoneNumberUtil() -// val phoneNumberVisualTransformation = remember { -// PhoneNumberVisualTransformation(phoneNumberUtil) -// } - val phoneNumberManager = koinInject() - PrimaryTextInputField( - label = "Phone number", -// visualTransformation = phoneNumberVisualTransformation, - modifier = Modifier.fillMaxWidth(), - text = phoneNumber, - onValueChange = { - phoneNumber = it - } - ) - var countryCode by remember { mutableStateOf("US") } - PrimaryTextInputField( - label = "Country Code", - modifier = Modifier.fillMaxWidth(), - text = countryCode, - onValueChange = { - countryCode = it - } - ) - PrimaryFilledButton( - modifier = Modifier.fillMaxWidth(), - text = "Do Phone number magic!", - onClick = { - val validPhoneNumber = phoneNumberManager.getValidPhoneNumber(phoneNumber, countryCode) - println("PhoneNumberManager -- validPhoneNumber: $validPhoneNumber") - val isValid = phoneNumberManager.isValidPhoneNumber(phoneNumber, countryCode) - println("PhoneNumberManager --isValid: $isValid") - val formattedPhoneNumber = phoneNumberManager.getFormattedPhoneNumber(phoneNumber, countryCode) - println("PhoneNumberManager --formattedPhoneNumber: $formattedPhoneNumber") - val getE164FormattedPhoneNumber = phoneNumberManager.getE164FormattedPhoneNumber(phoneNumber, countryCode) - println("PhoneNumberManager --getE164FormattedPhoneNumber: $getE164FormattedPhoneNumber") - - val options = contactsCollectorOptionsFactory.createOptions() - // TODO: pass options to the view model - } - ) - - Text( - "Current language: ${languageManager.getCurrentLanguage().name}", - ) - PrimaryFilledButton( - modifier = Modifier.fillMaxWidth(), - text = stringResource(Res.string.toggle_language), - onClick = { - if (languageManager.getCurrentLanguage().code == "en") { - languageManager.changeLanguage(LANGUAGES["ar"]!!) - } else { - languageManager.changeLanguage(LANGUAGES["en"]!!) - } - } - ) - } -} diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/main/MainContract.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/main/MainContract.kt deleted file mode 100644 index 60e59c52..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/main/MainContract.kt +++ /dev/null @@ -1,20 +0,0 @@ -package com.sampleApp.app.presentation.main - -import com.metacto.core.presentation.base.ViewEvent -import com.metacto.core.presentation.base.ViewSideEffect -import com.metacto.core.presentation.base.ViewState - -class MainContract { - - data class State( - val isInitialized: Boolean = false, - val currentTab : Int = 0 - ) : ViewState - - sealed class Event : ViewEvent { - data object Init : Event() - data class ChangeTab(val index: Int) : Event() - } - - sealed class Effect : ViewSideEffect -} \ No newline at end of file diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/main/MainScreen.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/main/MainScreen.kt deleted file mode 100644 index 4e8755ee..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/main/MainScreen.kt +++ /dev/null @@ -1,35 +0,0 @@ -package com.sampleApp.app.presentation.main - -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import com.metacto.core.permissions.BindEffect -import com.metacto.core.presentation.base.BaseScreen -import com.metacto.core.presentation.base.SIDE_EFFECTS_KEY -import com.metacto.core.presentation.base.rememberViewModel -import com.sampleApp.app.presentation.main.components.MainContent - -internal class MainScreen : BaseScreen() { - - override val screenTag: String - get() = "MainScreen" - - @Composable - override fun Content() { - // Get the view model - val viewModel = rememberViewModel() - - // Init view model - LaunchedEffect(SIDE_EFFECTS_KEY) { - viewModel.setEvent(MainContract.Event.Init) - } - - // Binds the permissions controller to the LocalLifecycleOwner lifecycle. - BindEffect(viewModel.permissionManager) - - // Render content - MainContent( - state = viewModel.viewState.value, - onEvent = viewModel::setEvent - ) - } -} \ No newline at end of file diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/main/MainViewModel.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/main/MainViewModel.kt deleted file mode 100644 index 4a4f21e5..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/main/MainViewModel.kt +++ /dev/null @@ -1,142 +0,0 @@ -package com.sampleApp.app.presentation.main - -import com.metacto.core.CoreEnvironment -import com.metacto.core.domain.repos.forceUpdate.AppUpdateSource -import com.metacto.core.presentation.globalState.models.SnackBarParams -import com.metacto.core.presentation.globalState.models.SnackBarType -import com.metacto.core.utils.Date -import com.metacto.core.utils.DateHelper -import com.metacto.core.utils.getCurrentWeekDates -import com.metacto.core.utils.language.ILanguageManager -import com.metacto.core.utils.notification.INotificationManager -import com.metacto.core.utils.notification.Notification -import com.metacto.core.utils.toFormattedDate -import com.sampleApp.app.presentation.base.BaseViewModel -import com.sampleApp.app.presentation.main.MainContract.Effect -import com.sampleApp.app.presentation.main.MainContract.Event -import com.sampleApp.app.presentation.main.MainContract.State -import org.koin.core.component.inject - -class MainViewModel : BaseViewModel() { - private val appEnvironment by inject() - private val notificationManager by inject() - private val languageManager by inject() - - override fun setInitialState() = State() - - override fun handleEvents(event: Event): Any = when (event) { - Event.Init -> init() - is Event.ChangeTab -> { - setState { copy(currentTab = event.index) } - } - } - - private fun init() { - // Validate if already initialized - if (currentState.isInitialized) return - - // Init - setupCurrentLanguage() - getCurrentWeekDates().forEach { date -> - println("Day: ${date.toFormattedDate("EEE")} -- Day Number: ${date.dayOfMonth} -- Date: $date") - } - checkForUpdates() - handleRemoteNotifications() - - // Update the flag - setState { copy(isInitialized = true) } - } - - private fun setupCurrentLanguage() { - languageManager.getCurrentLanguage().let { - languageManager.changeLanguage(it) - } - } - - private fun checkForUpdates() = executeSilent({ - checkAppUpdates( - appUpdateSource = AppUpdateSource.STRAPI_CONFIGS, - title = "Ahmed", - showTitle = true, - onProceedAction = { - // TODO will navigate to next screen - }, - onSkipUpdateClick = { - // to handle the skip update action if needed - }, - onUpdateClick = { - intentLauncher.launchAppInStore(appId = appEnvironment.iosAppStoreId) - } - ) - }) - - private fun handleRemoteNotifications() { - executeSilent({ - val pushToken = notificationManager.getPushNotificationToken() - - println("Push Token: $pushToken") - globalState.snackBar( - SnackBarParams( - message = "Push Token: $pushToken", - type = SnackBarType.SUCCESS - ) - ) - }) - - notificationManager.onNewTokenListener { - println("New Token: $it") - globalState.snackBar( - SnackBarParams( - message = "New Token: $it", - type = SnackBarType.SUCCESS - ) - ) - } - - notificationManager.onReceiveMessageNotification { title, body -> - println("New Notification: $title, $body") - globalState.snackBar( - SnackBarParams( - message = "New Notification: $title, $body", - type = SnackBarType.SUCCESS - ) - ) - - notificationManager.schedule( - notification = Notification.new( - title = "ssss: $title", - body = "body: $body" - ), - date = Date() - ) - } - - notificationManager.onReceiveDataNotification { data -> - println("New Data Notification: $data") - globalState.snackBar( - SnackBarParams( - message = "New Data Notification: $data", - type = SnackBarType.SUCCESS - ) - ) - - notificationManager.schedule( - notification = Notification.new( - title = "Notification", - body = data.toString() - ), - date = Date() - ) - } - - notificationManager.onNotificationClicked { - println("Notification Clicked: $it") - globalState.snackBar( - SnackBarParams( - message = "Notification Clicked: $it", - type = SnackBarType.SUCCESS - ) - ) - } - } -} \ No newline at end of file diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/main/components/MainContent.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/main/components/MainContent.kt deleted file mode 100644 index 15a59c1f..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/main/components/MainContent.kt +++ /dev/null @@ -1,82 +0,0 @@ -package com.sampleApp.app.presentation.main.components - -import androidx.compose.foundation.background -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.navigationBarsPadding -import androidx.compose.foundation.pager.HorizontalPager -import androidx.compose.foundation.pager.rememberPagerState -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.ui.Modifier -import com.metacto.core.presentation.base.BaseTabScreen -import com.metacto.core.utils.extensions.rememberPrevious -import com.sampleApp.app.presentation.home.HomeTab -import com.sampleApp.app.presentation.main.MainContract.Event -import com.sampleApp.app.presentation.main.MainContract.State -import com.sampleApp.app.presentation.main.components.navBar.NavigationBar -import com.sampleApp.app.presentation.profile.ProfileTab -import com.sampleApp.app.presentation.theme.AppTheme - -@Composable -internal fun MainContent( - state: State, - onEvent: (Event) -> Unit -) { - // Prepare pager state - val pagerState = rememberPagerState { 2 } - val previousTab = rememberPrevious(state.currentTab) - - // Scroll to selected tab - LaunchedEffect(state.currentTab) { - // Scroll to this page - pagerState.scrollToPage(state.currentTab) - - // Notify previous tab is hidden - previousTab?.toTab()?.onHidden() - - // And notify current tab that it's displayed - state.currentTab.toTab()?.onDisplayed() - } - - // Container column - Column( - modifier = Modifier - .fillMaxSize() - .background(AppTheme.colors.background) - ) { - // Content pager - HorizontalPager( - state = pagerState, - beyondViewportPageCount = pagerState.pageCount, - userScrollEnabled = false, - modifier = Modifier - .fillMaxWidth() - .weight(1f) - ) { index -> - // Get current tab and render content - val currentTab = index.toTab() - currentTab?.Content() - } - - // Bottom nav bar - NavigationBar( - selectedTab = state.currentTab, - onItemClick = { index -> - onEvent(Event.ChangeTab(index)) - }, - modifier = Modifier - .fillMaxWidth() - .navigationBarsPadding() - ) - } -} - -private fun Int.toTab(): BaseTabScreen<*>? { - return when (this) { - 0 -> HomeTab - 1 -> ProfileTab - else -> null - } -} \ No newline at end of file diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/main/components/navBar/NavigationBar.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/main/components/navBar/NavigationBar.kt deleted file mode 100644 index 8386fc84..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/main/components/navBar/NavigationBar.kt +++ /dev/null @@ -1,55 +0,0 @@ -package com.sampleApp.app.presentation.main.components.navBar - -import androidx.compose.foundation.background -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.shadow -import com.sampleApp.app.resources.* -import com.sampleApp.app.presentation.theme.AppTheme.colors -import com.sampleApp.app.presentation.theme.AppTheme.spacings - -@Composable -internal fun NavigationBar( - modifier: Modifier = Modifier, - selectedTab: Int, - onItemClick: (Int) -> Unit -) { - // Container row - Row( - horizontalArrangement = Arrangement.SpaceEvenly, - verticalAlignment = Alignment.CenterVertically, - modifier = Modifier - .fillMaxWidth() - .shadow( - elevation = spacings.spacing24, - spotColor = colors.black, - ambientColor = colors.black - ) - .background(colors.white) - .padding(vertical = spacings.spacing8) - .then(modifier) - ) { - NavigationItem( - icon = Res.drawable.ic_star_filled, - title = "Home", - isSelected = selectedTab == 0, - onClick = { - onItemClick.invoke(0) - } - ) - - NavigationItem( - icon = Res.drawable.ic_star_filled, - title = "Profile", - isSelected = selectedTab == 1, - onClick = { - onItemClick.invoke(1) - } - ) - } -} \ No newline at end of file diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/main/components/navBar/NavigationItem.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/main/components/navBar/NavigationItem.kt deleted file mode 100644 index dc12edad..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/main/components/navBar/NavigationItem.kt +++ /dev/null @@ -1,53 +0,0 @@ -package com.sampleApp.app.presentation.main.components.navBar - -import androidx.compose.foundation.Image -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.size -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.ColorFilter -import androidx.compose.ui.layout.ContentScale -import com.metacto.core.presentation.components.texts.SingleLineText -import com.metacto.core.utils.extensions.noRippleClickable -import com.sampleApp.app.presentation.theme.AppTheme.colors -import com.sampleApp.app.presentation.theme.AppTheme.spacings -import com.sampleApp.app.presentation.theme.AppTheme.typography -import org.jetbrains.compose.resources.DrawableResource -import org.jetbrains.compose.resources.painterResource - -@Composable -internal fun NavigationItem( - modifier: Modifier = Modifier, - icon: DrawableResource, - title: String, - isSelected: Boolean, - onClick: () -> Unit -) { - // Prepare values - val tabColor = if (isSelected) colors.terra else colors.black - - // Container column - Column( - horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.spacedBy(spacings.spacing2), - modifier = modifier.noRippleClickable(onClick = onClick) - ) { - // Icon - Image( - painter = painterResource(icon), - contentDescription = null, - contentScale = ContentScale.Fit, - colorFilter = ColorFilter.tint(tabColor), - modifier = Modifier.size(spacings.spacing24) - ) - - // Label - SingleLineText( - text = title, - style = typography.quasimodaSemiBold14, - color = tabColor - ) - } -} \ No newline at end of file diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/models/VideoItemInfo.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/models/VideoItemInfo.kt deleted file mode 100644 index d00eb87f..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/models/VideoItemInfo.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.sampleApp.app.presentation.models - -data class VideoItemInfo( - val url: String, - val artist: String? = null, - val title: String? = null, - val artworkUrl: String? = null -) \ No newline at end of file diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/profile/ProfileContract.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/profile/ProfileContract.kt deleted file mode 100644 index ec53b28f..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/profile/ProfileContract.kt +++ /dev/null @@ -1,19 +0,0 @@ -package com.sampleApp.app.presentation.profile - -import com.metacto.core.presentation.base.ViewEvent -import com.metacto.core.presentation.base.ViewSideEffect -import com.metacto.core.presentation.base.ViewState - -class ProfileContract { - - data class State( - val isInitialized: Boolean = false - ) : ViewState - - sealed class Event : ViewEvent { - data object Init : Event() - data object NativeItemPicker : Event() - } - - sealed class Effect : ViewSideEffect -} diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/profile/ProfileTab.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/profile/ProfileTab.kt deleted file mode 100644 index 35d8dfcc..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/profile/ProfileTab.kt +++ /dev/null @@ -1,29 +0,0 @@ -package com.sampleApp.app.presentation.profile - -import androidx.compose.runtime.Composable -import com.metacto.core.presentation.base.BaseTabScreen -import com.metacto.core.presentation.base.rememberViewModel -import com.sampleApp.app.presentation.profile.ProfileContract.Event -import com.sampleApp.app.presentation.profile.components.ProfileContent - -internal object ProfileTab : BaseTabScreen() { - private var viewModel: ProfileViewModel? = null - - @Composable - override fun Content() { - // Get the view model - val viewModel = rememberViewModel() - this.viewModel = viewModel - - // Render content - ProfileContent( - state = viewModel.viewState.value, - onEvent = viewModel::setEvent - ) - } - - override fun onDisplayed() { - super.onDisplayed() - viewModel?.setEvent(Event.Init) - } -} diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/profile/ProfileViewModel.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/profile/ProfileViewModel.kt deleted file mode 100644 index 37b0ae6d..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/profile/ProfileViewModel.kt +++ /dev/null @@ -1,40 +0,0 @@ -package com.sampleApp.app.presentation.profile - -import com.metacto.core.presentation.itemPicker.models.PickerItemUIModel -import com.sampleApp.app.presentation.base.BaseViewModel -import com.sampleApp.app.presentation.profile.ProfileContract.Effect -import com.sampleApp.app.presentation.profile.ProfileContract.Event -import com.sampleApp.app.presentation.profile.ProfileContract.State - -class ProfileViewModel : BaseViewModel() { - - override fun setInitialState() = State() - - override fun handleEvents(event: Event): Any = when (event) { - Event.Init -> init() - Event.NativeItemPicker -> { - nativeItemPicker( - items = (0..20).map { - PickerItemUIModel( - key = it.toString(), - title = "Item $it" - ) - }, - selectedItem = null, - onItemSelected = { - println("Selected item: $it") - } - ) - } - } - - private fun init() { - // Validate if already initialized - if (currentState.isInitialized) return - - // Init - - // Update the flag - setState { copy(isInitialized = true) } - } -} diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/profile/components/ProfileContent.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/profile/components/ProfileContent.kt deleted file mode 100644 index f9875dd6..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/profile/components/ProfileContent.kt +++ /dev/null @@ -1,108 +0,0 @@ -package com.sampleApp.app.presentation.profile.components - -import androidx.compose.foundation.background -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.size -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.runtime.remember -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.unit.dp -import com.metacto.core.presentation.components.buttons.PrimaryFilledButton -import com.metacto.core.presentation.components.containers.ScreenColumn -import com.metacto.core.presentation.components.images.AppImage -import com.metacto.core.presentation.components.videoPlayer.ControlsType -import com.metacto.core.presentation.components.videoPlayer.VideoPlayer -import com.metacto.core.utils.extensions.toFeetInches -import com.sampleApp.app.presentation.models.VideoItemInfo -import com.sampleApp.app.presentation.profile.ProfileContract.Event -import com.sampleApp.app.presentation.profile.ProfileContract.State -import com.sampleApp.app.resources.FileResources -import com.sampleApp.app.resources.Res -import com.sampleApp.app.resources.file - -@Composable -internal fun ProfileContent( - state: State, - onEvent: (Event) -> Unit, -) { - val videoInfo = remember { - VideoItemInfo( - url = "https://storage.sardius.media/-KrXWhrxRAYPfu44QPJ0/archives/DAA6A5576Dd5Ee41CBd6B68696F6/media/playlist.m3u8?feedId=27d824FCdF&vttUrl=https%253A%252F%252Fstorage.sardius.media%252F-KrXWhrxRAYPfu44QPJ0%252Farchives%252FDAA6A5576Dd5Ee41CBd6B68696F6%252Fstatic%252F1730996105358-1.vtt", -// url = FileResources.intro_video.getUri(), - title = "Random Video Title", - artist = "Random Artist", - artworkUrl = "https://yurielkaim.com/wp-content/uploads/2016/03/Happiness-Habits-10-Things-Happy-People-Do-Before-Bed-1200x900.jpg" - ) - } - // Container column - ScreenColumn( - startPadding = 0.dp, - endPadding = 0.dp, - isScrollable = false - ) { - VideoPlayer( -// uniqueId = "profile_video_player", -// videoUrl = Res.file.intro_video.getUri(), -// autoPlay = true, -// scaleToCrop = true, -// enableVoice = false, -// enablePip = false, -// enableMediaMetadata = false, -// autoRepeat = true, -// controlsType = ControlsType.HideControls, -// onVideoLoop = { -// println("Video looped") -// }, -// onVideoEnd = { -// println("Video ended") -// }, - uniqueId = "profile_video_player", - videoUrl = videoInfo.url, - videoTitle = videoInfo.title, - videoArtist = videoInfo.artist, - videoArtworkUrl = videoInfo.artworkUrl, - autoPlay = false, - scaleToCrop = false, - enablePip = true, - handleLifecyclePause = false, - controllerShowTimeoutMs = 2000, - modifier = Modifier - .fillMaxWidth() - .height(500.dp) - ) - - - AppImage( - url = "https://storage.googleapis.com/journey-rewards-uploads-us-east1/image_NIHI%20Resorts-white-logo.svg", - modifier = Modifier - .size(100.dp) - .background(Color.Black) - ) - - - AppImage( - url = "https://plus.unsplash.com/premium_photo-1664474619075-644dd191935f?fm=jpg&q=60&w=3000&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxzZWFyY2h8MXx8aW1hZ2V8ZW58MHx8MHx8fDA%3D", - modifier = Modifier - .size(100.dp) - .background(Color.Black) - ) - - Text( - text = 20f.toFeetInches() - ) -// AudioPlayer( -// modifier = Modifier.fillMaxWidth(), -// audioUrl = "https://commondatastorage.googleapis.com/codeskulptor-assets/Evillaugh.ogg", -//// audioUrl = "https://actions.google.com/sounds/v1/alarms/beep_short.ogg" -// ) - PrimaryFilledButton( - text = "Open native picker", - onClick = { - onEvent(Event.NativeItemPicker) - } - ) - } -} diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/test/TestContract.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/test/TestContract.kt deleted file mode 100644 index 99dc0d43..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/test/TestContract.kt +++ /dev/null @@ -1,22 +0,0 @@ -package com.sampleApp.app.presentation.test - -import com.metacto.core.presentation.base.ViewEvent -import com.metacto.core.presentation.base.ViewSideEffect -import com.metacto.core.presentation.base.ViewState - -class TestContract { - - data class State( - val isInitialized: Boolean = false - ) : ViewState - - sealed class Event : ViewEvent { - data object Init : Event() - data object BackClicked : Event() - data object ClearAndOpenMainScreen : Event() - data object CheckMainScreenClicked : Event() - data object CheckYoutubeScreenClicked : Event() - } - - sealed class Effect : ViewSideEffect -} diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/test/TestScreen.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/test/TestScreen.kt deleted file mode 100644 index d377b807..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/test/TestScreen.kt +++ /dev/null @@ -1,30 +0,0 @@ -package com.sampleApp.app.presentation.test - -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import com.sampleApp.app.presentation.test.TestContract.Event -import com.sampleApp.app.presentation.test.components.TestContent -import com.metacto.core.presentation.base.BaseScreen -import com.metacto.core.presentation.base.SIDE_EFFECTS_KEY -import com.metacto.core.presentation.base.rememberViewModel - -internal object TestScreen : BaseScreen() { - override val enableSwipeToGoBack = false - - @Composable - override fun Content() { - // Get the view model - val viewModel = rememberViewModel() - - // Init view model - LaunchedEffect(SIDE_EFFECTS_KEY) { - viewModel.setEvent(Event.Init) - } - - // Render content - TestContent( - state = viewModel.viewState.value, - onEvent = viewModel::setEvent - ) - } -} diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/test/TestViewModel.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/test/TestViewModel.kt deleted file mode 100644 index 686d2370..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/test/TestViewModel.kt +++ /dev/null @@ -1,45 +0,0 @@ -package com.sampleApp.app.presentation.test - -import com.metacto.core.presentation.youtube.YoutubeScreen -import com.sampleApp.app.presentation.base.BaseViewModel -import com.sampleApp.app.presentation.main.MainScreen -import com.sampleApp.app.presentation.test.TestContract.Effect -import com.sampleApp.app.presentation.test.TestContract.Event -import com.sampleApp.app.presentation.test.TestContract.State - -class TestViewModel : BaseViewModel() { - - override fun setInitialState() = State() - - override fun handleEvents(event: Event): Any = when (event) { - Event.Init -> init() - Event.BackClicked -> navManager.goBack() - Event.ClearAndOpenMainScreen -> navManager.clearAndNavigate( - MainScreen() - ) - Event.CheckMainScreenClicked -> handleCheckMainScreenClick() - Event.CheckYoutubeScreenClicked -> handleCheckYoutubeScreenClick() - } - - private fun init() { - // Validate if already initialized - if (currentState.isInitialized) return - - // Init - - // Update the flag - setState { copy(isInitialized = true) } - } - - private fun handleCheckMainScreenClick() = executeSilent({ -// val exists = navManager.checkScreenByClass(MainScreen::class) - val exists = navManager.checkScreenByTag("MainScreen") - showError("MainScreen exists: $exists") - }) - - private fun handleCheckYoutubeScreenClick() = executeSilent({ -// val exists = navManager.checkScreenByClass(YoutubeScreen::class) - val exists = navManager.checkScreenByTag("YoutubeScreen") - showError("YoutubeScreen exists: $exists") - }) -} diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/test/components/TestContent.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/test/components/TestContent.kt deleted file mode 100644 index 9ca2a81b..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/test/components/TestContent.kt +++ /dev/null @@ -1,80 +0,0 @@ -package com.sampleApp.app.presentation.test.components - -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import com.metacto.core.navigation.NavManager -import com.metacto.core.presentation.components.buttons.PrimaryFilledButton -import com.metacto.core.presentation.components.containers.ScreenColumn -import com.metacto.core.presentation.components.toolbar.Toolbar -import com.metacto.core.presentation.youtube.YoutubeContract -import com.metacto.core.presentation.youtube.YoutubeScreen -import com.sampleApp.app.presentation.main.MainScreen -import com.sampleApp.app.presentation.test.TestContract.Event -import com.sampleApp.app.presentation.test.TestContract.State -import com.sampleApp.app.presentation.test.TestScreen -import org.koin.compose.koinInject - -@Composable -internal fun TestContent( - state: State, - onEvent: (Event) -> Unit -) { - val navManager = koinInject() - - // Container column - ScreenColumn( - horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.Center, - toolbar = { - Toolbar( - showStartIcon = true, - onStartIconClick = { - onEvent(Event.BackClicked) - } - ) - } - ) { - Text( - text = "Test Screen" - ) - - PrimaryFilledButton( - modifier = Modifier.fillMaxWidth(), - text = "Navigate and pop to MainScreen", - onClick = { - navManager.navigateAndPopToExclusive( - navToDest = YoutubeScreen("Gmhk7mWG050"), - popToDestClass = MainScreen::class - ) - } - ) - - PrimaryFilledButton( - modifier = Modifier.fillMaxWidth(), - text = "Clear and open MainScreen", - onClick = { - onEvent(Event.ClearAndOpenMainScreen) - } - ) - - PrimaryFilledButton( - modifier = Modifier.fillMaxWidth(), - text = "Check main screen", - onClick = { - onEvent(Event.CheckMainScreenClicked) - } - ) - - PrimaryFilledButton( - modifier = Modifier.fillMaxWidth(), - text = "Check youtube screen", - onClick = { - onEvent(Event.CheckYoutubeScreenClicked) - } - ) - } -} diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/test2/test2/Test2Contract.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/test2/test2/Test2Contract.kt deleted file mode 100644 index 1a20d79a..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/test2/test2/Test2Contract.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.sampleApp.app.presentation.test2.test2 - -import com.metacto.core.presentation.base.ViewEvent -import com.metacto.core.presentation.base.ViewSideEffect -import com.metacto.core.presentation.base.ViewState - -class Test2Contract { - - data class State( - val isInitialized: Boolean = false - ) : ViewState - - sealed class Event : ViewEvent { - data object Init : Event() - } - - sealed class Effect : ViewSideEffect -} diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/test2/test2/Test2Screen.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/test2/test2/Test2Screen.kt deleted file mode 100644 index 691763ed..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/test2/test2/Test2Screen.kt +++ /dev/null @@ -1,28 +0,0 @@ -package com.sampleApp.app.presentation.test2.test2 - -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import com.sampleApp.app.presentation.test2.test2.Test2Contract.Event -import com.sampleApp.app.presentation.test2.test2.components.Test2Content -import com.metacto.core.presentation.base.BaseScreen -import com.metacto.core.presentation.base.SIDE_EFFECTS_KEY -import com.metacto.core.presentation.base.rememberViewModel - -internal class Test2Screen : BaseScreen() { - @Composable - override fun Content() { - // Get the view model - val viewModel = rememberViewModel() - - // Init view model - LaunchedEffect(SIDE_EFFECTS_KEY) { - viewModel.setEvent(Event.Init) - } - - // Render content - Test2Content( - state = viewModel.viewState.value, - onEvent = viewModel::setEvent - ) - } -} diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/test2/test2/Test2ViewModel.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/test2/test2/Test2ViewModel.kt deleted file mode 100644 index 6c6bc592..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/test2/test2/Test2ViewModel.kt +++ /dev/null @@ -1,25 +0,0 @@ -package com.sampleApp.app.presentation.test2.test2 - -import com.sampleApp.app.presentation.base.BaseViewModel -import com.sampleApp.app.presentation.test2.test2.Test2Contract.Effect -import com.sampleApp.app.presentation.test2.test2.Test2Contract.Event -import com.sampleApp.app.presentation.test2.test2.Test2Contract.State - -class Test2ViewModel : BaseViewModel() { - - override fun setInitialState() = State() - - override fun handleEvents(event: Event): Any = when (event) { - Event.Init -> init() - } - - private fun init() { - // Validate if already initialized - if (currentState.isInitialized) return - - // Init - - // Update the flag - setState { copy(isInitialized = true) } - } -} diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/test2/test2/components/Test2Content.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/test2/test2/components/Test2Content.kt deleted file mode 100644 index c87bccab..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/test2/test2/components/Test2Content.kt +++ /dev/null @@ -1,29 +0,0 @@ -package com.sampleApp.app.presentation.test2.test2.components - -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import com.metacto.core.presentation.components.containers.ScreenColumn -import com.sampleApp.app.presentation.theme.AppTheme.colors -import com.sampleApp.app.presentation.theme.AppTheme.typography -import com.sampleApp.app.presentation.theme.AppTheme.shapes -import com.sampleApp.app.presentation.theme.AppTheme.spacings -import com.sampleApp.app.presentation.test2.test2.Test2Contract.State -import com.sampleApp.app.presentation.test2.test2.Test2Contract.Event - -@Composable -internal fun Test2Content( - state: State, - onEvent: (Event) -> Unit -) { - // Container column - ScreenColumn( - horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.Center - ) { - Text( - text = "Test2 Screen" - ) - } -} diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/testsheet1/TestSheet1.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/testsheet1/TestSheet1.kt deleted file mode 100644 index 5899c837..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/testsheet1/TestSheet1.kt +++ /dev/null @@ -1,29 +0,0 @@ -package com.sampleApp.app.presentation.testsheet1 - -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import com.sampleApp.app.presentation.testsheet1.TestSheet1Contract.Event -import com.sampleApp.app.presentation.testsheet1.components.TestSheet1Content -import com.metacto.core.presentation.base.BaseSheet -import com.metacto.core.presentation.base.SIDE_EFFECTS_KEY -import com.metacto.core.presentation.base.rememberViewModel - -internal class TestSheet1 : BaseSheet() { - - @Composable - override fun Content() { - // Get the view model - val viewModel = rememberViewModel() - - // Init view model - LaunchedEffect(SIDE_EFFECTS_KEY) { - viewModel.setEvent(Event.Init) - } - - // Render content - TestSheet1Content( - state = viewModel.viewState.value, - onEvent = viewModel::setEvent - ) - } -} diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/testsheet1/TestSheet1Contract.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/testsheet1/TestSheet1Contract.kt deleted file mode 100644 index d708886b..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/testsheet1/TestSheet1Contract.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.sampleApp.app.presentation.testsheet1 - -import com.metacto.core.presentation.base.ViewEvent -import com.metacto.core.presentation.base.ViewSideEffect -import com.metacto.core.presentation.base.ViewState - -class TestSheet1Contract { - - data class State( - val isInitialized: Boolean = false - ) : ViewState - - sealed class Event : ViewEvent { - data object Init : Event() - } - - sealed class Effect : ViewSideEffect -} diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/testsheet1/TestSheet1ViewModel.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/testsheet1/TestSheet1ViewModel.kt deleted file mode 100644 index d84292ca..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/testsheet1/TestSheet1ViewModel.kt +++ /dev/null @@ -1,25 +0,0 @@ -package com.sampleApp.app.presentation.testsheet1 - -import com.sampleApp.app.presentation.base.BaseViewModel -import com.sampleApp.app.presentation.testsheet1.TestSheet1Contract.Effect -import com.sampleApp.app.presentation.testsheet1.TestSheet1Contract.Event -import com.sampleApp.app.presentation.testsheet1.TestSheet1Contract.State - -class TestSheet1ViewModel : BaseViewModel() { - - override fun setInitialState() = State() - - override fun handleEvents(event: Event): Any = when (event) { - Event.Init -> init() - } - - private fun init() { - // Validate if already initialized - if (currentState.isInitialized) return - - // Init - - // Update the flag - setState { copy(isInitialized = true) } - } -} diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/testsheet1/components/TestSheet1Content.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/testsheet1/components/TestSheet1Content.kt deleted file mode 100644 index 5f98cd33..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/testsheet1/components/TestSheet1Content.kt +++ /dev/null @@ -1,43 +0,0 @@ -package com.sampleApp.app.presentation.testsheet1.components - -import androidx.compose.foundation.background -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.unit.dp -import com.metacto.core.navigation.NavManager -import com.metacto.core.presentation.components.buttons.PrimaryFilledButton -import com.sampleApp.app.presentation.testsheet1.TestSheet1Contract.Event -import com.sampleApp.app.presentation.testsheet1.TestSheet1Contract.State -import com.sampleApp.app.presentation.testsheet2.TestSheet2 -import org.koin.compose.koinInject - -@Composable -internal fun TestSheet1Content( - state: State, - onEvent: (Event) -> Unit -) { - val navManager = koinInject() - - // Container column - Box( - contentAlignment = Alignment.Center, - modifier = Modifier - .fillMaxWidth() - .height(300.dp) - .background(Color.Gray) - ) { - PrimaryFilledButton( - modifier = Modifier.fillMaxWidth(), - text = "Open sheet 2", - onClick = { - navManager.navigateToBottomSheet(TestSheet2()) - } - ) - } -} diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/testsheet2/TestSheet2.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/testsheet2/TestSheet2.kt deleted file mode 100644 index baf7b347..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/testsheet2/TestSheet2.kt +++ /dev/null @@ -1,28 +0,0 @@ -package com.sampleApp.app.presentation.testsheet2 - -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import com.sampleApp.app.presentation.testsheet2.TestSheet2Contract.Event -import com.sampleApp.app.presentation.testsheet2.components.TestSheet2Content -import com.metacto.core.presentation.base.BaseSheet -import com.metacto.core.presentation.base.SIDE_EFFECTS_KEY -import com.metacto.core.presentation.base.rememberViewModel - -internal class TestSheet2 : BaseSheet() { - @Composable - override fun Content() { - // Get the view model - val viewModel = rememberViewModel() - - // Init view model - LaunchedEffect(SIDE_EFFECTS_KEY) { - viewModel.setEvent(Event.Init) - } - - // Render content - TestSheet2Content( - state = viewModel.viewState.value, - onEvent = viewModel::setEvent - ) - } -} diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/testsheet2/TestSheet2Contract.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/testsheet2/TestSheet2Contract.kt deleted file mode 100644 index 59601ee2..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/testsheet2/TestSheet2Contract.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.sampleApp.app.presentation.testsheet2 - -import com.metacto.core.presentation.base.ViewEvent -import com.metacto.core.presentation.base.ViewSideEffect -import com.metacto.core.presentation.base.ViewState - -class TestSheet2Contract { - - data class State( - val isInitialized: Boolean = false - ) : ViewState - - sealed class Event : ViewEvent { - data object Init : Event() - } - - sealed class Effect : ViewSideEffect -} diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/testsheet2/TestSheet2ViewModel.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/testsheet2/TestSheet2ViewModel.kt deleted file mode 100644 index 82cb8989..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/testsheet2/TestSheet2ViewModel.kt +++ /dev/null @@ -1,25 +0,0 @@ -package com.sampleApp.app.presentation.testsheet2 - -import com.sampleApp.app.presentation.base.BaseViewModel -import com.sampleApp.app.presentation.testsheet2.TestSheet2Contract.Effect -import com.sampleApp.app.presentation.testsheet2.TestSheet2Contract.Event -import com.sampleApp.app.presentation.testsheet2.TestSheet2Contract.State - -class TestSheet2ViewModel : BaseViewModel() { - - override fun setInitialState() = State() - - override fun handleEvents(event: Event): Any = when (event) { - Event.Init -> init() - } - - private fun init() { - // Validate if already initialized - if (currentState.isInitialized) return - - // Init - - // Update the flag - setState { copy(isInitialized = true) } - } -} diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/testsheet2/components/TestSheet2Content.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/testsheet2/components/TestSheet2Content.kt deleted file mode 100644 index 1d5a3bdf..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/testsheet2/components/TestSheet2Content.kt +++ /dev/null @@ -1,39 +0,0 @@ -package com.sampleApp.app.presentation.testsheet2.components - -import androidx.compose.foundation.background -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.unit.dp -import com.metacto.core.presentation.components.containers.ScreenColumn -import com.sampleApp.app.presentation.theme.AppTheme.colors -import com.sampleApp.app.presentation.theme.AppTheme.typography -import com.sampleApp.app.presentation.theme.AppTheme.shapes -import com.sampleApp.app.presentation.theme.AppTheme.spacings -import com.sampleApp.app.presentation.testsheet2.TestSheet2Contract.State -import com.sampleApp.app.presentation.testsheet2.TestSheet2Contract.Event - -@Composable -internal fun TestSheet2Content( - state: State, - onEvent: (Event) -> Unit -) { - // Container column - Box( - contentAlignment = Alignment.Center, - modifier = Modifier - .fillMaxWidth() - .height(200.dp) - .background(Color.Green) - ) { - Text( - text = "TestSheet2 Screen" - ) - } -} diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/theme/Typography.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/theme/Typography.kt deleted file mode 100644 index bf59df01..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/theme/Typography.kt +++ /dev/null @@ -1,469 +0,0 @@ -package com.sampleApp.app.presentation.theme - -import androidx.compose.runtime.Composable -import androidx.compose.runtime.Immutable -import androidx.compose.runtime.staticCompositionLocalOf -import androidx.compose.ui.text.TextStyle -import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.unit.sp -import com.metacto.core.utils.extensions.FontFamily -import com.sampleApp.app.resources.* -import org.jetbrains.compose.resources.Font - - -// Define font families -@Composable -fun getFenwickFontFamily() = FontFamily( - Font(Res.font.fenwick_bold, FontWeight.Bold), - Font(Res.font.fenwick_regular, FontWeight.Normal), - Font(Res.font.fenwick_light, FontWeight.Light) -) - -@Composable -fun getQuasimodaFontFamily() = FontFamily( - Font(Res.font.quasimoda_black, FontWeight.Black), - Font(Res.font.quasimoda_bold, FontWeight.Bold), - Font(Res.font.quasimoda_semibold, FontWeight.SemiBold), - Font(Res.font.quasimoda_medium, FontWeight.Medium), - Font(Res.font.quasimoda_regular, FontWeight.Normal), - Font(Res.font.quasimoda_light, FontWeight.Light), - Font(Res.font.quasimoda_thin, FontWeight.Thin) -) - -// Create app typography -@Immutable -data class AppTypography( - val fenwick: TextStyle = TextStyle(), - val quasimoda: TextStyle = TextStyle(), - val fenwickBold: TextStyle = fenwick.copy( - fontWeight = FontWeight.Bold - ), - val fenwickRegular: TextStyle = fenwick.copy( - fontWeight = FontWeight.Normal - ), - val fenwickLight: TextStyle = fenwick.copy( - fontWeight = FontWeight.Light - ), - val quasimodaBlack: TextStyle = quasimoda.copy( - fontWeight = FontWeight.Black - ), - val quasimodaBold: TextStyle = quasimoda.copy( - fontWeight = FontWeight.Bold - ), - val quasimodaSemiBold: TextStyle = quasimoda.copy( - fontWeight = FontWeight.SemiBold - ), - val quasimodaMedium: TextStyle = quasimoda.copy( - fontWeight = FontWeight.Medium - ), - val quasimodaRegular: TextStyle = quasimoda.copy( - fontWeight = FontWeight.Normal - ), - val quasimodaLight: TextStyle = quasimoda.copy( - fontWeight = FontWeight.Light - ), - val quasimodaThin: TextStyle = quasimoda.copy( - fontWeight = FontWeight.Thin - ), - val fenwickBold12: TextStyle = fenwickBold.copy( - fontSize = 12.sp, - ), - val fenwickBold14: TextStyle = fenwickBold.copy( - fontSize = 14.sp - ), - val fenwickBold16: TextStyle = fenwickBold.copy( - fontSize = 16.sp - ), - val fenwickBold18: TextStyle = fenwickBold.copy( - fontSize = 18.sp - ), - val fenwickBold20: TextStyle = fenwickBold.copy( - fontSize = 20.sp - ), - val fenwickBold22: TextStyle = fenwickBold.copy( - fontSize = 22.sp - ), - val fenwickBold24: TextStyle = fenwickBold.copy( - fontSize = 24.sp - ), - val fenwickBold26: TextStyle = fenwickBold.copy( - fontSize = 26.sp - ), - val fenwickBold28: TextStyle = fenwickBold.copy( - fontSize = 28.sp - ), - val fenwickBold30: TextStyle = fenwickBold.copy( - fontSize = 30.sp - ), - val fenwickBold32: TextStyle = fenwickBold.copy( - fontSize = 32.sp - ), - val fenwickBold34: TextStyle = fenwickBold.copy( - fontSize = 34.sp - ), - val fenwickBold36: TextStyle = fenwickBold.copy( - fontSize = 36.sp - ), - val fenwickBold40: TextStyle = fenwickBold.copy( - fontSize = 40.sp - ), - val fenwickRegular12: TextStyle = fenwickRegular.copy( - fontSize = 12.sp, - ), - val fenwickRegular14: TextStyle = fenwickRegular.copy( - fontSize = 14.sp - ), - val fenwickRegular16: TextStyle = fenwickRegular.copy( - fontSize = 16.sp - ), - val fenwickRegular18: TextStyle = fenwickRegular.copy( - fontSize = 18.sp - ), - val fenwickRegular20: TextStyle = fenwickRegular.copy( - fontSize = 20.sp - ), - val fenwickRegular22: TextStyle = fenwickRegular.copy( - fontSize = 22.sp - ), - val fenwickRegular24: TextStyle = fenwickRegular.copy( - fontSize = 24.sp - ), - val fenwickRegular26: TextStyle = fenwickRegular.copy( - fontSize = 26.sp - ), - val fenwickRegular28: TextStyle = fenwickRegular.copy( - fontSize = 28.sp - ), - val fenwickRegular30: TextStyle = fenwickRegular.copy( - fontSize = 30.sp - ), - val fenwickRegular32: TextStyle = fenwickRegular.copy( - fontSize = 32.sp - ), - val fenwickRegular34: TextStyle = fenwickRegular.copy( - fontSize = 34.sp - ), - val fenwickRegular36: TextStyle = fenwickRegular.copy( - fontSize = 36.sp - ), - val fenwickLight12: TextStyle = fenwickLight.copy( - fontSize = 12.sp, - ), - val fenwickLight14: TextStyle = fenwickLight.copy( - fontSize = 14.sp - ), - val fenwickLight16: TextStyle = fenwickLight.copy( - fontSize = 16.sp - ), - val fenwickLight18: TextStyle = fenwickLight.copy( - fontSize = 18.sp - ), - val fenwickLight20: TextStyle = fenwickLight.copy( - fontSize = 20.sp - ), - val fenwickLight22: TextStyle = fenwickLight.copy( - fontSize = 22.sp - ), - val fenwickLight24: TextStyle = fenwickLight.copy( - fontSize = 24.sp - ), - val fenwickLight26: TextStyle = fenwickLight.copy( - fontSize = 26.sp - ), - val fenwickLight28: TextStyle = fenwickLight.copy( - fontSize = 28.sp - ), - val fenwickLight30: TextStyle = fenwickLight.copy( - fontSize = 30.sp - ), - val fenwickLight32: TextStyle = fenwickLight.copy( - fontSize = 32.sp - ), - val fenwickLight34: TextStyle = fenwickLight.copy( - fontSize = 34.sp - ), - val fenwickLight36: TextStyle = fenwickLight.copy( - fontSize = 36.sp - ), - val quasimodaBlack12: TextStyle = quasimodaBlack.copy( - fontSize = 12.sp, - ), - val quasimodaBlack14: TextStyle = quasimodaBlack.copy( - fontSize = 14.sp - ), - val quasimodaBlack16: TextStyle = quasimodaBlack.copy( - fontSize = 16.sp - ), - val quasimodaBlack18: TextStyle = quasimodaBlack.copy( - fontSize = 18.sp - ), - val quasimodaBlack20: TextStyle = quasimodaBlack.copy( - fontSize = 20.sp - ), - val quasimodaBlack22: TextStyle = quasimodaBlack.copy( - fontSize = 22.sp - ), - val quasimodaBlack24: TextStyle = quasimodaBlack.copy( - fontSize = 24.sp - ), - val quasimodaBlack26: TextStyle = quasimodaBlack.copy( - fontSize = 26.sp - ), - val quasimodaBlack28: TextStyle = quasimodaBlack.copy( - fontSize = 28.sp - ), - val quasimodaBlack30: TextStyle = quasimodaBlack.copy( - fontSize = 30.sp - ), - val quasimodaBlack32: TextStyle = quasimodaBlack.copy( - fontSize = 32.sp - ), - val quasimodaBlack34: TextStyle = quasimodaBlack.copy( - fontSize = 34.sp - ), - val quasimodaBlack36: TextStyle = quasimodaBlack.copy( - fontSize = 36.sp - ), - val quasimodaBold12: TextStyle = quasimodaBold.copy( - fontSize = 12.sp - ), - val quasimodaBold14: TextStyle = quasimodaBold.copy( - fontSize = 14.sp - ), - val quasimodaBold16: TextStyle = quasimodaBold.copy( - fontSize = 16.sp - ), - val quasimodaBold18: TextStyle = quasimodaBold.copy( - fontSize = 18.sp - ), - val quasimodaBold20: TextStyle = quasimodaBold.copy( - fontSize = 20.sp - ), - val quasimodaBold22: TextStyle = quasimodaBold.copy( - fontSize = 22.sp - ), - val quasimodaBold24: TextStyle = quasimodaBold.copy( - fontSize = 24.sp - ), - val quasimodaBold26: TextStyle = quasimodaBold.copy( - fontSize = 26.sp - ), - val quasimodaBold28: TextStyle = quasimodaBold.copy( - fontSize = 28.sp - ), - val quasimodaBold30: TextStyle = quasimodaBold.copy( - fontSize = 30.sp - ), - val quasimodaBold32: TextStyle = quasimodaBold.copy( - fontSize = 32.sp - ), - val quasimodaBold34: TextStyle = quasimodaBold.copy( - fontSize = 34.sp - ), - val quasimodaBold36: TextStyle = quasimodaBold.copy( - fontSize = 36.sp - ), - val quasimodaBold48: TextStyle = quasimodaBold.copy( - fontSize = 48.sp - ), - val quasimodaSemiBold12: TextStyle = quasimodaSemiBold.copy( - fontSize = 12.sp - ), - val quasimodaSemiBold14: TextStyle = quasimodaSemiBold.copy( - fontSize = 14.sp - ), - val quasimodaSemiBold16: TextStyle = quasimodaSemiBold.copy( - fontSize = 16.sp - ), - val quasimodaSemiBold18: TextStyle = quasimodaSemiBold.copy( - fontSize = 18.sp - ), - val quasimodaSemiBold20: TextStyle = quasimodaSemiBold.copy( - fontSize = 20.sp - ), - val quasimodaSemiBold22: TextStyle = quasimodaSemiBold.copy( - fontSize = 22.sp - ), - val quasimodaSemiBold24: TextStyle = quasimodaSemiBold.copy( - fontSize = 24.sp - ), - val quasimodaSemiBold26: TextStyle = quasimodaSemiBold.copy( - fontSize = 26.sp - ), - val quasimodaSemiBold28: TextStyle = quasimodaSemiBold.copy( - fontSize = 28.sp - ), - val quasimodaSemiBold30: TextStyle = quasimodaSemiBold.copy( - fontSize = 30.sp - ), - val quasimodaSemiBold32: TextStyle = quasimodaSemiBold.copy( - fontSize = 32.sp - ), - val quasimodaSemiBold34: TextStyle = quasimodaSemiBold.copy( - fontSize = 34.sp - ), - val quasimodaSemiBold36: TextStyle = quasimodaSemiBold.copy( - fontSize = 36.sp - ), - val quasimodaSemiBold48: TextStyle = quasimodaSemiBold.copy( - fontSize = 48.sp - ), - val quasimodaMedium12: TextStyle = quasimodaMedium.copy( - fontSize = 12.sp - ), - val quasimodaMedium14: TextStyle = quasimodaMedium.copy( - fontSize = 14.sp - ), - val quasimodaMedium16: TextStyle = quasimodaMedium.copy( - fontSize = 16.sp - ), - val quasimodaMedium18: TextStyle = quasimodaMedium.copy( - fontSize = 18.sp - ), - val quasimodaMedium20: TextStyle = quasimodaMedium.copy( - fontSize = 20.sp - ), - val quasimodaMedium22: TextStyle = quasimodaMedium.copy( - fontSize = 22.sp - ), - val quasimodaMedium24: TextStyle = quasimodaMedium.copy( - fontSize = 24.sp - ), - val quasimodaMedium26: TextStyle = quasimodaMedium.copy( - fontSize = 26.sp - ), - val quasimodaMedium28: TextStyle = quasimodaMedium.copy( - fontSize = 28.sp - ), - val quasimodaMedium30: TextStyle = quasimodaMedium.copy( - fontSize = 30.sp - ), - val quasimodaMedium32: TextStyle = quasimodaMedium.copy( - fontSize = 32.sp - ), - val quasimodaMedium34: TextStyle = quasimodaMedium.copy( - fontSize = 34.sp - ), - val quasimodaMedium36: TextStyle = quasimodaMedium.copy( - fontSize = 36.sp - ), - val quasimodaRegular12: TextStyle = quasimodaRegular.copy( - fontSize = 12.sp - ), - val quasimodaRegular14: TextStyle = quasimodaRegular.copy( - fontSize = 14.sp - ), - val quasimodaRegular16: TextStyle = quasimodaRegular.copy( - fontSize = 16.sp - ), - val quasimodaRegular18: TextStyle = quasimodaRegular.copy( - fontSize = 18.sp - ), - val quasimodaRegular20: TextStyle = quasimodaRegular.copy( - fontSize = 20.sp - ), - val quasimodaRegular22: TextStyle = quasimodaRegular.copy( - fontSize = 22.sp - ), - val quasimodaRegular24: TextStyle = quasimodaRegular.copy( - fontSize = 24.sp - ), - val quasimodaRegular26: TextStyle = quasimodaRegular.copy( - fontSize = 26.sp - ), - val quasimodaRegular28: TextStyle = quasimodaRegular.copy( - fontSize = 28.sp - ), - val quasimodaRegular30: TextStyle = quasimodaRegular.copy( - fontSize = 30.sp - ), - val quasimodaRegular32: TextStyle = quasimodaRegular.copy( - fontSize = 32.sp - ), - val quasimodaRegular34: TextStyle = quasimodaRegular.copy( - fontSize = 34.sp - ), - val quasimodaRegular36: TextStyle = quasimodaRegular.copy( - fontSize = 36.sp - ), - val quasimodaLight12: TextStyle = quasimodaLight.copy( - fontSize = 12.sp - ), - val quasimodaLight14: TextStyle = quasimodaLight.copy( - fontSize = 14.sp - ), - val quasimodaLight16: TextStyle = quasimodaLight.copy( - fontSize = 16.sp - ), - val quasimodaLight18: TextStyle = quasimodaLight.copy( - fontSize = 18.sp - ), - val quasimodaLight20: TextStyle = quasimodaLight.copy( - fontSize = 20.sp - ), - val quasimodaLight22: TextStyle = quasimodaLight.copy( - fontSize = 22.sp - ), - val quasimodaLight24: TextStyle = quasimodaLight.copy( - fontSize = 24.sp - ), - val quasimodaLight26: TextStyle = quasimodaLight.copy( - fontSize = 26.sp - ), - val quasimodaLight28: TextStyle = quasimodaLight.copy( - fontSize = 28.sp - ), - val quasimodaLight30: TextStyle = quasimodaLight.copy( - fontSize = 30.sp - ), - val quasimodaLight32: TextStyle = quasimodaLight.copy( - fontSize = 32.sp - ), - val quasimodaLight34: TextStyle = quasimodaLight.copy( - fontSize = 34.sp - ), - val quasimodaLight36: TextStyle = quasimodaLight.copy( - fontSize = 36.sp - ), - val quasimodaThin12: TextStyle = quasimodaThin.copy( - fontSize = 12.sp - ), - val quasimodaThin14: TextStyle = quasimodaThin.copy( - fontSize = 14.sp - ), - val quasimodaThin16: TextStyle = quasimodaThin.copy( - fontSize = 16.sp - ), - val quasimodaThin18: TextStyle = quasimodaThin.copy( - fontSize = 18.sp - ), - val quasimodaThin20: TextStyle = quasimodaThin.copy( - fontSize = 20.sp - ), - val quasimodaThin22: TextStyle = quasimodaThin.copy( - fontSize = 22.sp - ), - val quasimodaThin24: TextStyle = quasimodaThin.copy( - fontSize = 24.sp - ), - val quasimodaThin26: TextStyle = quasimodaThin.copy( - fontSize = 26.sp - ), - val quasimodaThin28: TextStyle = quasimodaThin.copy( - fontSize = 28.sp - ), - val quasimodaThin30: TextStyle = quasimodaThin.copy( - fontSize = 30.sp - ), - val quasimodaThin32: TextStyle = quasimodaThin.copy( - fontSize = 32.sp - ), - val quasimodaThin34: TextStyle = quasimodaThin.copy( - fontSize = 34.sp - ), - val quasimodaThin36: TextStyle = quasimodaThin.copy( - fontSize = 36.sp - ), -) - -internal val LocalAppTypography = staticCompositionLocalOf { AppTypography() } \ No newline at end of file diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/resources/FileResources.kt b/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/resources/FileResources.kt deleted file mode 100644 index 67659170..00000000 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/resources/FileResources.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.sampleApp.app.resources - -import com.metacto.core.resources.IFileResource - -val Res.file: FileResources - get() = FileResources - -fun String.asFileResource(): IFileResource = FileResource(path = "files/$this") - -object FileResources { - val app_loading = "app_loading.json".asFileResource() - val intro_video = "intro_video.mp4".asFileResource() -} \ No newline at end of file diff --git a/samples/catalog-app-shared/build.gradle.kts b/samples/catalog-app-shared/build.gradle.kts new file mode 100644 index 00000000..faebe0a6 --- /dev/null +++ b/samples/catalog-app-shared/build.gradle.kts @@ -0,0 +1,165 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget +import org.jetbrains.kotlin.gradle.plugin.mpp.apple.XCFramework + +plugins { + alias(libs.plugins.multiplatform) + alias(libs.plugins.android.application) + alias(libs.plugins.kotlin.parcelize) + alias(libs.plugins.compose) + alias(libs.plugins.kotlin.compose) + alias(libs.plugins.kotlin.serialization) + alias(libs.plugins.firebase.crashlytics) + alias(libs.plugins.google.services) +} + +kotlin { + androidTarget { + compilerOptions { + jvmTarget.value(JvmTarget.JVM_17) + freeCompilerArgs.addAll("-P", "plugin:org.jetbrains.kotlin.parcelize:additionalAnnotation=com.metacto.kmm.core.CommonParcelize") + } + compilations.all { + kotlinOptions { + jvmTarget = libs.versions.jvm.get() + } + } + } + + val xcf = XCFramework() + listOf( + iosX64(), + iosArm64(), + iosSimulatorArm64() + ).forEach { + it.binaries.framework(CatalogConfigs.FRAMEWORK_NAME) { + baseName = CatalogConfigs.FRAMEWORK_NAME + xcf.add(this) + isStatic = true + } + } + + metadata { + compilations.matching { it.name == "iosMain" }.all { + compileTaskProvider.configure { enabled = false } + } + } + + sourceSets { + commonMain.dependencies { + implementation(project(":ui:core-ui")) + implementation(project(":core:files")) + implementation(project(":core:notifications")) + implementation(project(":core:phone-core")) + implementation(project(":ui:media-players")) + implementation(project(":ui:camera")) + implementation(project(":ui:youtube")) + implementation(project(":ui:phone-ui")) + implementation(project(":ui:image-picker")) + implementation(libs.metacto.inspektify) + implementation(libs.metacto.remoteconfigs.common) + implementation(libs.metacto.remoteconfigs.firebase) + } + + androidMain.dependencies { + // ANDROID DEPENDENCIES + implementation(project.dependencies.platform(libs.firebase.bom)) + implementation(libs.firebase.crashlytics) + } + + iosMain.dependencies { + // IOS DEPENDENCIES + } + } +} + +android { + namespace = CatalogConfigs.NAMESPACE + compileSdk = libs.versions.compileSdk.get().toInt() + + sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml") + sourceSets["main"].res.srcDirs("src/androidMain/res") + sourceSets["main"].resources.srcDirs("src/commonMain/resources") + sourceSets["main"].res.srcDirs("src/androidMain/res", "src/commonMain/resources") + + defaultConfig { + minSdk = libs.versions.minSdk.get().toInt() + targetSdk = libs.versions.targetSdk.get().toInt() + versionCode = CatalogConfigs.VERSION_CODE + versionName = CatalogConfigs.VERSION_NAME + + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), "./proguard-rules.pro" + ) + } + + compileOptions { + sourceCompatibility = JavaVersion.toVersion(libs.versions.jvm.get()) + targetCompatibility = JavaVersion.toVersion(libs.versions.jvm.get()) + } + + signingConfigs { + Buildable.all().forEach { + maybeCreate(it.name).apply { + storeFile = file(it.storeFile) + storePassword = it.storePassword + keyAlias = it.keyAlias + keyPassword = it.keyPassword + } + } + } + + buildTypes { + Buildable.all().forEach { + maybeCreate(it.name).apply { + isDebuggable = it.isDebuggable + isMinifyEnabled = it.isMinifyEnabled + isShrinkResources = it.isShrinkResources + signingConfig = signingConfigs.getByName(it.name) + } + } + } + + flavorDimensions("default") + productFlavors { + CatalogProductFlavor.all().forEach { flavor -> + maybeCreate(flavor.toString()).apply { + applicationId = flavor.applicationId + versionNameSuffix = flavor.versionNameSuffix + resValue( + type = "string", + name = "app_name", + value = flavor.appName + ) + } + } + } + + lint { + abortOnError = false + checkReleaseBuilds = false + } + + buildFeatures { + compose = true + buildConfig = true + } + + composeOptions { + kotlinCompilerExtensionVersion = libs.versions.compose.android.get() + } + + compileOptions { + sourceCompatibility = JavaVersion.toVersion(libs.versions.jvm.get()) + targetCompatibility = JavaVersion.toVersion(libs.versions.jvm.get()) + } + + kotlin { + jvmToolchain(libs.versions.jvm.get().toInt()) + } +} + +compose.resources { + publicResClass = false + packageOfResClass = "${CatalogConfigs.NAMESPACE}.resources" + generateResClass = always +} diff --git a/samples/catalog-app-shared/google-services.json b/samples/catalog-app-shared/google-services.json new file mode 100644 index 00000000..e6975687 --- /dev/null +++ b/samples/catalog-app-shared/google-services.json @@ -0,0 +1,124 @@ +{ + "project_info": { + "project_number": "211134116667", + "project_id": "metactosampleapp", + "storage_bucket": "metactosampleapp.firebasestorage.app" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:211134116667:android:633de12b60b915a9827d1e", + "android_client_info": { + "package_name": "com.metacto.catalogapp.dev" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyBSqPW4Jn4HksPCcHoRqfXQ2IUxWY_oVro" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:211134116667:android:11c05db275bd39c4827d1e", + "android_client_info": { + "package_name": "com.metacto.catalogapp.prod" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyBSqPW4Jn4HksPCcHoRqfXQ2IUxWY_oVro" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:211134116667:android:57cbac40ee2b5a80827d1e", + "android_client_info": { + "package_name": "com.metacto.playground.dev" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyBSqPW4Jn4HksPCcHoRqfXQ2IUxWY_oVro" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:211134116667:android:147bb91290ee9879827d1e", + "android_client_info": { + "package_name": "com.metacto.playground.prod" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyBSqPW4Jn4HksPCcHoRqfXQ2IUxWY_oVro" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:211134116667:android:0f5bd66d529ccdbc827d1e", + "android_client_info": { + "package_name": "com.sampleApp.app.dev" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyBSqPW4Jn4HksPCcHoRqfXQ2IUxWY_oVro" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:211134116667:android:499f537d887e9ce1827d1e", + "android_client_info": { + "package_name": "com.sampleApp.app.prod" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyBSqPW4Jn4HksPCcHoRqfXQ2IUxWY_oVro" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/androidApp/signing/debug.keystore b/samples/catalog-app-shared/signing/debug.keystore similarity index 100% rename from androidApp/signing/debug.keystore rename to samples/catalog-app-shared/signing/debug.keystore diff --git a/androidApp/signing/release.keystore b/samples/catalog-app-shared/signing/release.keystore similarity index 100% rename from androidApp/signing/release.keystore rename to samples/catalog-app-shared/signing/release.keystore diff --git a/androidApp/src/androidMain/AndroidManifest.xml b/samples/catalog-app-shared/src/androidMain/AndroidManifest.xml similarity index 94% rename from androidApp/src/androidMain/AndroidManifest.xml rename to samples/catalog-app-shared/src/androidMain/AndroidManifest.xml index 88193272..66eb6e73 100644 --- a/androidApp/src/androidMain/AndroidManifest.xml +++ b/samples/catalog-app-shared/src/androidMain/AndroidManifest.xml @@ -13,8 +13,10 @@ + + - \ No newline at end of file + \ No newline at end of file diff --git a/samples/catalog-app-shared/src/androidMain/kotlin/com/metacto/catalogapp/CatalogApp.kt b/samples/catalog-app-shared/src/androidMain/kotlin/com/metacto/catalogapp/CatalogApp.kt new file mode 100644 index 00000000..f9244ff0 --- /dev/null +++ b/samples/catalog-app-shared/src/androidMain/kotlin/com/metacto/catalogapp/CatalogApp.kt @@ -0,0 +1,24 @@ +package com.metacto.catalogapp + +import android.app.Application +import com.metacto.catalogapp.constants.AppEnvironment +import com.metacto.catalogapp.di.initKoin +import org.koin.android.ext.koin.androidContext + +class CatalogApp : Application() { + override fun onCreate() { + super.onCreate() + + // Prepare environment + val environment = if (BuildConfig.FLAVOR == "qa") { + AppEnvironment.Dev + } else { + AppEnvironment.Prod + } + + // Init koin + initKoin(environment) { + androidContext(this@CatalogApp) + } + } +} \ No newline at end of file diff --git a/samples/catalog-app-shared/src/androidMain/kotlin/com/metacto/catalogapp/MainActivity.kt b/samples/catalog-app-shared/src/androidMain/kotlin/com/metacto/catalogapp/MainActivity.kt new file mode 100644 index 00000000..233433a4 --- /dev/null +++ b/samples/catalog-app-shared/src/androidMain/kotlin/com/metacto/catalogapp/MainActivity.kt @@ -0,0 +1,29 @@ +package com.metacto.catalogapp + +import android.os.Bundle +import androidx.activity.compose.setContent +import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen +import androidx.core.view.WindowCompat +import androidx.fragment.app.FragmentActivity +import com.metacto.catalogapp.presentation.app.app.AppContent +import com.metacto.catalogapp.presentation.app.app.AppContract.Event +import com.metacto.catalogapp.presentation.app.app.AppViewModel +import org.koin.android.ext.android.inject + +class MainActivity : FragmentActivity() { + private val appViewModel by inject() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + // Config activity + installSplashScreen() + WindowCompat.setDecorFitsSystemWindows(window, false) + appViewModel.setEvent(Event.Init) + + // Render app content + setContent { + AppContent() + } + } +} \ No newline at end of file diff --git a/samples/catalog-app-shared/src/androidMain/kotlin/com/metacto/catalogapp/crash/CrashLogger.kt b/samples/catalog-app-shared/src/androidMain/kotlin/com/metacto/catalogapp/crash/CrashLogger.kt new file mode 100644 index 00000000..fb504172 --- /dev/null +++ b/samples/catalog-app-shared/src/androidMain/kotlin/com/metacto/catalogapp/crash/CrashLogger.kt @@ -0,0 +1,9 @@ +package com.metacto.catalogapp.crash + +internal actual fun setupCrashHandler(onCrash: () -> Unit) { + val defaultHandler = Thread.getDefaultUncaughtExceptionHandler() + Thread.setDefaultUncaughtExceptionHandler { thread, exception -> + onCrash.invoke() + defaultHandler?.uncaughtException(thread, exception) + } +} \ No newline at end of file diff --git a/samples/catalog-app-shared/src/androidMain/kotlin/com/metacto/catalogapp/crash/FirebaseCrashlyticsImpl.kt b/samples/catalog-app-shared/src/androidMain/kotlin/com/metacto/catalogapp/crash/FirebaseCrashlyticsImpl.kt new file mode 100644 index 00000000..e0e52674 --- /dev/null +++ b/samples/catalog-app-shared/src/androidMain/kotlin/com/metacto/catalogapp/crash/FirebaseCrashlyticsImpl.kt @@ -0,0 +1,24 @@ +package com.metacto.catalogapp.crash + +import com.google.firebase.crashlytics.FirebaseCrashlytics +import com.metacto.catalogapp.crash.FirebaseCrashlytics as FirebaseCrashlyticsInterface + +class FirebaseCrashlyticsImpl : FirebaseCrashlyticsInterface { + private val crashlytics by lazy { FirebaseCrashlytics.getInstance() } + + override fun setCustomKey(key: String, value: String) { + crashlytics.setCustomKey(key, value) + } + + override fun setUserId(userId: String) { + crashlytics.setUserId(userId) + } + + override fun log(message: String) { + crashlytics.log(message) + } + + override fun recordException(exception: Throwable) { + crashlytics.recordException(exception) + } +} \ No newline at end of file diff --git a/samples/catalog-app-shared/src/androidMain/kotlin/com/metacto/catalogapp/di/Koin.android.kt b/samples/catalog-app-shared/src/androidMain/kotlin/com/metacto/catalogapp/di/Koin.android.kt new file mode 100644 index 00000000..bf2e1372 --- /dev/null +++ b/samples/catalog-app-shared/src/androidMain/kotlin/com/metacto/catalogapp/di/Koin.android.kt @@ -0,0 +1,16 @@ +package com.metacto.catalogapp.di + +import com.metacto.catalogapp.constants.AppEnvironment +import org.koin.core.context.startKoin +import org.koin.dsl.KoinAppDeclaration + +fun initKoin( + environment: AppEnvironment, + appDeclaration: KoinAppDeclaration = {} +) = startKoin { + appDeclaration() + modules( + *getCommonModules(environment).toTypedArray(), + getPlatformModule() + ) +} \ No newline at end of file diff --git a/samples/catalog-app-shared/src/androidMain/kotlin/com/metacto/catalogapp/di/PlatformModule.kt b/samples/catalog-app-shared/src/androidMain/kotlin/com/metacto/catalogapp/di/PlatformModule.kt new file mode 100644 index 00000000..c979d28c --- /dev/null +++ b/samples/catalog-app-shared/src/androidMain/kotlin/com/metacto/catalogapp/di/PlatformModule.kt @@ -0,0 +1,10 @@ +package com.metacto.catalogapp.di + +import com.metacto.catalogapp.crash.FirebaseCrashlytics +import com.metacto.catalogapp.crash.FirebaseCrashlyticsImpl +import org.koin.dsl.module + +internal fun getPlatformModule() = module { + // Define platform specific dependencies here + single { FirebaseCrashlyticsImpl() } +} \ No newline at end of file diff --git a/samples/catalog-app-shared/src/androidMain/kotlin/com/metacto/catalogapp/presentation/Main.android.kt b/samples/catalog-app-shared/src/androidMain/kotlin/com/metacto/catalogapp/presentation/Main.android.kt new file mode 100644 index 00000000..749ee650 --- /dev/null +++ b/samples/catalog-app-shared/src/androidMain/kotlin/com/metacto/catalogapp/presentation/Main.android.kt @@ -0,0 +1,9 @@ +package com.metacto.catalogapp.presentation + +import androidx.compose.runtime.Composable +import com.metacto.catalogapp.presentation.app.app.AppContent + +@Composable +fun MainView() { + AppContent() +} \ No newline at end of file diff --git a/samples/catalog-app-shared/src/androidMain/kotlin/com/metacto/catalogapp/presentation/main/applepay/components/ApplePayButton.android.kt b/samples/catalog-app-shared/src/androidMain/kotlin/com/metacto/catalogapp/presentation/main/applepay/components/ApplePayButton.android.kt new file mode 100644 index 00000000..473e1bb5 --- /dev/null +++ b/samples/catalog-app-shared/src/androidMain/kotlin/com/metacto/catalogapp/presentation/main/applepay/components/ApplePayButton.android.kt @@ -0,0 +1,16 @@ +package com.metacto.catalogapp.presentation.main.applepay.components + +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier + +@Composable +internal actual fun ApplePayButton( + modifier: Modifier, + onClick: () -> Unit +) { + Text( + text = "Apple Pay is not available on Android", + modifier = modifier + ) +} \ No newline at end of file diff --git a/androidApp/src/androidMain/res/mipmap/ic_launcher.png b/samples/catalog-app-shared/src/androidMain/res/mipmap/ic_launcher.png similarity index 100% rename from androidApp/src/androidMain/res/mipmap/ic_launcher.png rename to samples/catalog-app-shared/src/androidMain/res/mipmap/ic_launcher.png diff --git a/androidApp/src/androidMain/res/mipmap/ic_launcher_rounded.png b/samples/catalog-app-shared/src/androidMain/res/mipmap/ic_launcher_rounded.png similarity index 100% rename from androidApp/src/androidMain/res/mipmap/ic_launcher_rounded.png rename to samples/catalog-app-shared/src/androidMain/res/mipmap/ic_launcher_rounded.png diff --git a/androidApp/src/androidMain/res/values-v27/themes.xml b/samples/catalog-app-shared/src/androidMain/res/values-v27/themes.xml similarity index 100% rename from androidApp/src/androidMain/res/values-v27/themes.xml rename to samples/catalog-app-shared/src/androidMain/res/values-v27/themes.xml diff --git a/androidApp/src/androidMain/res/values/colors.xml b/samples/catalog-app-shared/src/androidMain/res/values/colors.xml similarity index 100% rename from androidApp/src/androidMain/res/values/colors.xml rename to samples/catalog-app-shared/src/androidMain/res/values/colors.xml diff --git a/androidApp/src/androidMain/res/values/themes.xml b/samples/catalog-app-shared/src/androidMain/res/values/themes.xml similarity index 100% rename from androidApp/src/androidMain/res/values/themes.xml rename to samples/catalog-app-shared/src/androidMain/res/values/themes.xml diff --git a/sampleAppShared/src/commonMain/composeResources/drawable/ic_star_empty.xml b/samples/catalog-app-shared/src/commonMain/composeResources/drawable/ic_star_empty.xml similarity index 100% rename from sampleAppShared/src/commonMain/composeResources/drawable/ic_star_empty.xml rename to samples/catalog-app-shared/src/commonMain/composeResources/drawable/ic_star_empty.xml diff --git a/sampleAppShared/src/commonMain/composeResources/drawable/ic_star_filled.xml b/samples/catalog-app-shared/src/commonMain/composeResources/drawable/ic_star_filled.xml similarity index 100% rename from sampleAppShared/src/commonMain/composeResources/drawable/ic_star_filled.xml rename to samples/catalog-app-shared/src/commonMain/composeResources/drawable/ic_star_filled.xml diff --git a/sampleAppShared/src/commonMain/composeResources/files/app_loading.json b/samples/catalog-app-shared/src/commonMain/composeResources/files/app_loading.json similarity index 100% rename from sampleAppShared/src/commonMain/composeResources/files/app_loading.json rename to samples/catalog-app-shared/src/commonMain/composeResources/files/app_loading.json diff --git a/sampleAppShared/src/commonMain/composeResources/files/intro_video.mp4 b/samples/catalog-app-shared/src/commonMain/composeResources/files/intro_video.mp4 similarity index 100% rename from sampleAppShared/src/commonMain/composeResources/files/intro_video.mp4 rename to samples/catalog-app-shared/src/commonMain/composeResources/files/intro_video.mp4 diff --git a/sampleAppShared/src/commonMain/composeResources/files/people_lottie_anim.json b/samples/catalog-app-shared/src/commonMain/composeResources/files/people_lottie_anim.json similarity index 100% rename from sampleAppShared/src/commonMain/composeResources/files/people_lottie_anim.json rename to samples/catalog-app-shared/src/commonMain/composeResources/files/people_lottie_anim.json diff --git a/sampleAppShared/src/commonMain/composeResources/files/search_lottie_anim.json b/samples/catalog-app-shared/src/commonMain/composeResources/files/search_lottie_anim.json similarity index 100% rename from sampleAppShared/src/commonMain/composeResources/files/search_lottie_anim.json rename to samples/catalog-app-shared/src/commonMain/composeResources/files/search_lottie_anim.json diff --git a/sampleAppShared/src/commonMain/composeResources/font/quasimoda-black.ttf b/samples/catalog-app-shared/src/commonMain/composeResources/font/quasimoda-black.ttf similarity index 100% rename from sampleAppShared/src/commonMain/composeResources/font/quasimoda-black.ttf rename to samples/catalog-app-shared/src/commonMain/composeResources/font/quasimoda-black.ttf diff --git a/sampleAppShared/src/commonMain/composeResources/font/quasimoda-bold.ttf b/samples/catalog-app-shared/src/commonMain/composeResources/font/quasimoda-bold.ttf similarity index 100% rename from sampleAppShared/src/commonMain/composeResources/font/quasimoda-bold.ttf rename to samples/catalog-app-shared/src/commonMain/composeResources/font/quasimoda-bold.ttf diff --git a/sampleAppShared/src/commonMain/composeResources/font/quasimoda-light.ttf b/samples/catalog-app-shared/src/commonMain/composeResources/font/quasimoda-light.ttf similarity index 100% rename from sampleAppShared/src/commonMain/composeResources/font/quasimoda-light.ttf rename to samples/catalog-app-shared/src/commonMain/composeResources/font/quasimoda-light.ttf diff --git a/sampleAppShared/src/commonMain/composeResources/font/quasimoda-medium.ttf b/samples/catalog-app-shared/src/commonMain/composeResources/font/quasimoda-medium.ttf similarity index 100% rename from sampleAppShared/src/commonMain/composeResources/font/quasimoda-medium.ttf rename to samples/catalog-app-shared/src/commonMain/composeResources/font/quasimoda-medium.ttf diff --git a/sampleAppShared/src/commonMain/composeResources/font/quasimoda-regular.ttf b/samples/catalog-app-shared/src/commonMain/composeResources/font/quasimoda-regular.ttf similarity index 100% rename from sampleAppShared/src/commonMain/composeResources/font/quasimoda-regular.ttf rename to samples/catalog-app-shared/src/commonMain/composeResources/font/quasimoda-regular.ttf diff --git a/sampleAppShared/src/commonMain/composeResources/font/quasimoda-semibold.ttf b/samples/catalog-app-shared/src/commonMain/composeResources/font/quasimoda-semibold.ttf similarity index 100% rename from sampleAppShared/src/commonMain/composeResources/font/quasimoda-semibold.ttf rename to samples/catalog-app-shared/src/commonMain/composeResources/font/quasimoda-semibold.ttf diff --git a/sampleAppShared/src/commonMain/composeResources/font/quasimoda-thin.ttf b/samples/catalog-app-shared/src/commonMain/composeResources/font/quasimoda-thin.ttf similarity index 100% rename from sampleAppShared/src/commonMain/composeResources/font/quasimoda-thin.ttf rename to samples/catalog-app-shared/src/commonMain/composeResources/font/quasimoda-thin.ttf diff --git a/sampleAppShared/src/commonMain/composeResources/values-ar/plurals.xml b/samples/catalog-app-shared/src/commonMain/composeResources/values-ar/plurals.xml similarity index 100% rename from sampleAppShared/src/commonMain/composeResources/values-ar/plurals.xml rename to samples/catalog-app-shared/src/commonMain/composeResources/values-ar/plurals.xml diff --git a/sampleAppShared/src/commonMain/composeResources/values-ar/strings.xml b/samples/catalog-app-shared/src/commonMain/composeResources/values-ar/strings.xml similarity index 100% rename from sampleAppShared/src/commonMain/composeResources/values-ar/strings.xml rename to samples/catalog-app-shared/src/commonMain/composeResources/values-ar/strings.xml diff --git a/sampleAppShared/src/commonMain/composeResources/values/plurals.xml b/samples/catalog-app-shared/src/commonMain/composeResources/values/plurals.xml similarity index 100% rename from sampleAppShared/src/commonMain/composeResources/values/plurals.xml rename to samples/catalog-app-shared/src/commonMain/composeResources/values/plurals.xml diff --git a/sampleAppShared/src/commonMain/composeResources/values/strings.xml b/samples/catalog-app-shared/src/commonMain/composeResources/values/strings.xml similarity index 100% rename from sampleAppShared/src/commonMain/composeResources/values/strings.xml rename to samples/catalog-app-shared/src/commonMain/composeResources/values/strings.xml diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/constants/AppConstants.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/constants/AppConstants.kt new file mode 100644 index 00000000..97c05c7f --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/constants/AppConstants.kt @@ -0,0 +1,5 @@ +package com.metacto.catalogapp.constants + +object AppConstants { + const val CONFIG_ENABLE_ENHANCED_CRASHLYTICS = "ENABLE_ENHANCED_CRASHLYTICS" +} \ No newline at end of file diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/constants/AppEnvironment.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/constants/AppEnvironment.kt new file mode 100644 index 00000000..3548390f --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/constants/AppEnvironment.kt @@ -0,0 +1,56 @@ +package com.metacto.catalogapp.constants + +import com.metacto.catalogapp.deepLinks.DEEP_LINK_PARSERS +import com.metacto.core.CoreConfigs +import com.metacto.core.ui.CoreUIConfigs +import com.metacto.kmm.logger.LogLevel +import sp.bvantur.inspektify.ktor.AutoDetectTarget +import sp.bvantur.inspektify.ktor.DataRetentionPolicy +import sp.bvantur.inspektify.ktor.InspektifyKtor +import kotlin.time.Duration.Companion.days +import kotlin.time.Duration.Companion.hours + +sealed class AppEnvironment( + val coreConfigs: CoreConfigs, + val coreUIConfigs: CoreUIConfigs = CoreUIConfigs( + enableSwipeToGoBack = true + ) +) { + data object Dev : AppEnvironment( + coreConfigs = CoreConfigs( + baseUrl = "https://dev-api.satyadating.com/api", + storageName = "MetaCtoSampleDev", + logLevel = LogLevel.ALL, + shouldShowActualErrorMessages = true, + appConfigurationExpirationInMinutes = 1.hours.inWholeMinutes, + deepLinkParsers = DEEP_LINK_PARSERS, + httpClientConfiguration = { + install(InspektifyKtor) { + title = "CatalogApp (DEV)" + shortcutEnabled = true + dataRetentionPolicy = DataRetentionPolicy.DayDuration(15) + autoDetectEnabledFor = setOf(AutoDetectTarget.Android, AutoDetectTarget.Apple) + } + } + ), + ) + + data object Prod : AppEnvironment( + coreConfigs = CoreConfigs( + baseUrl = "https://api.satyadating.com/api", + storageName = "MetaCtoSampleProd", + logLevel = LogLevel.NONE, + shouldShowActualErrorMessages = false, + appConfigurationExpirationInMinutes = 1.days.inWholeMinutes, + deepLinkParsers = DEEP_LINK_PARSERS, + httpClientConfiguration = { + install(InspektifyKtor) { + title = "CatalogApp" + shortcutEnabled = false + dataRetentionPolicy = DataRetentionPolicy.DayDuration(1) + autoDetectEnabledFor = setOf(AutoDetectTarget.Android, AutoDetectTarget.Apple) + } + } + ) + ) +} \ No newline at end of file diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/crash/CrashLogger.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/crash/CrashLogger.kt new file mode 100644 index 00000000..b8f5cb0e --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/crash/CrashLogger.kt @@ -0,0 +1,125 @@ +package com.metacto.catalogapp.crash + +import com.metacto.core.extensions.randomUUID +import com.metacto.core.files.IFileManager +import org.koin.core.component.KoinComponent +import org.koin.core.component.inject + +class CrashLogger : KoinComponent { + private val crashlytics by inject() + private val fileManager by inject() + private var currentScreenState: String? = null + + init { + setupCrashHandler { + saveCurrentScreenState() + } + } + + fun setCurrentScreen(screenName: String) { + crashlytics.setCustomKey("CurrentScreen", screenName) + } + + fun setCurrentScreenState(state: Any) { + currentScreenState = state.toString() + } + + fun logEvent(eventName: String, parameters: Map = emptyMap()) { + // Filter out text field changes to avoid cluttering logs + if (eventName.endsWith("Changed")) return + + if (parameters.isEmpty()) { + crashlytics.log(eventName) + } else { + crashlytics.log("$eventName: $parameters") + } + } + + fun logException(exception: Throwable) { + crashlytics.recordException(exception) + } + + fun setUserId(userId: String) { + crashlytics.setUserId(userId) + } + + fun setCustomKey(key: String, value: String) { + crashlytics.setCustomKey(key, value) + } + + fun saveCurrentScreenState() { + try { + val filePath = fileManager.createFile( + fileName = "crash_state_${randomUUID()}.txt", + content = currentScreenState?.formatState().orEmpty() + ) + + crashlytics.setCustomKey("StateFile", filePath) + crashlytics.log("Final state saved before crash: $filePath") + } catch (e: Throwable) { + crashlytics.setCustomKey( + "StateError", + "Failed to save state before crash: ${e.message}" + ) + } + } + + fun clear() { + crashlytics.setUserId("") + } + + private fun String.formatState(): String { + val state = this + val result = StringBuilder() + var indentLevel = 0 + var i = 0 + + while (i < state.length) { + val char = state[i] + + when (char) { + '(' -> { + result.append(char) + if (i + 1 < state.length && state[i + 1] != ')') { + result.append('\n') + indentLevel++ + result.append(" ".repeat(indentLevel)) + } + } + + ')' -> { + if (result.isNotEmpty() && result.last() != '(' && result.last() != '\n') { + result.append('\n') + indentLevel = maxOf(0, indentLevel - 1) + result.append(" ".repeat(indentLevel)) + } else { + indentLevel = maxOf(0, indentLevel - 1) + } + result.append(char) + } + + ',' -> { + result.append(char) + if (i + 1 < state.length && state[i + 1] == ' ') { + result.append('\n') + result.append(" ".repeat(indentLevel)) + i++ // Skip the space after comma + } + } + + '=' -> { + result.append(" = ") + } + + else -> { + result.append(char) + } + } + i++ + } + + return result.toString() + } +} + +internal expect fun setupCrashHandler(onCrash: () -> Unit) \ No newline at end of file diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/crash/FirebaseCrashlytics.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/crash/FirebaseCrashlytics.kt new file mode 100644 index 00000000..a37a35e6 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/crash/FirebaseCrashlytics.kt @@ -0,0 +1,8 @@ +package com.metacto.catalogapp.crash + +interface FirebaseCrashlytics { + fun setCustomKey(key: String, value: String) + fun setUserId(userId: String) + fun log(message: String) + fun recordException(exception: Throwable) +} \ No newline at end of file diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/deepLink/DeepLinks.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/deepLinks/DeepLinks.kt similarity index 81% rename from sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/deepLink/DeepLinks.kt rename to samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/deepLinks/DeepLinks.kt index 8a8af9e2..18aceb93 100644 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/deepLink/DeepLinks.kt +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/deepLinks/DeepLinks.kt @@ -1,7 +1,7 @@ -package com.sampleApp.app.deepLink +package com.metacto.catalogapp.deepLinks -import com.metacto.core.utils.deepLink.DeepLink -import com.metacto.core.utils.deepLink.DeepLinkParser +import com.metacto.core.deepLink.DeepLink +import com.metacto.core.deepLink.DeepLinkParser import io.ktor.http.Url internal val DEEP_LINK_PARSERS = mapOf( @@ -31,20 +31,20 @@ internal object SetPasswordDeepLinkParser : DeepLinkParser { } internal object ArchivesLinkParser : DeepLinkParser { - override fun parse(url: String): DeepLink? { + override fun parse(url: String): DeepLink { return ArchivesDeepLink } } internal object DailyDevoLinkParser : DeepLinkParser { - override fun parse(url: String): DeepLink? { + override fun parse(url: String): DeepLink { return DailyDevoDeepLink } } internal object ShamyLinkParser : DeepLinkParser { - override fun parse(url: String): DeepLink? { + override fun parse(url: String): DeepLink { return ShamyDeepLink } } \ No newline at end of file diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/di/AppModule.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/di/AppModule.kt new file mode 100644 index 00000000..1d5c74bc --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/di/AppModule.kt @@ -0,0 +1,20 @@ +package com.metacto.catalogapp.di + +import com.metacto.catalogapp.constants.AppEnvironment +import com.metacto.catalogapp.crash.CrashLogger +import com.metacto.catalogapp.presentation.app.globalState.AppGlobalState +import com.metacto.catalogapp.presentation.app.globalState.IAppGlobalState +import com.metacto.core.domain.repos.RepositoriesFactory +import com.metacto.core.ui.globalState.ICoreGlobalState +import com.metacto.kmm.firebase.remoteconfig.FirebaseRemoteConfigsProvider +import com.metacto.kmm.remoteconfig.common.RemoteConfigProvider +import org.koin.dsl.module + +fun appModule(environment: AppEnvironment) = module { + single { environment } + single { AppGlobalState() } + single { get() } + single { FirebaseRemoteConfigsProvider(get()) } + single { get>().sharedPreference } + single { CrashLogger() } +} \ No newline at end of file diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/di/Koin.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/di/Koin.kt new file mode 100644 index 00000000..67a3db22 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/di/Koin.kt @@ -0,0 +1,36 @@ +package com.metacto.catalogapp.di + +import com.metacto.catalogapp.constants.AppEnvironment +import com.metacto.core.di.coreModule +import com.metacto.core.files.di.filesModule +import com.metacto.core.notifications.NotificationsConfigs +import com.metacto.core.notifications.di.notificationsModule +import com.metacto.core.phone.di.phoneCoreModule +import com.metacto.core.ui.camera.di.cameraModule +import com.metacto.core.ui.di.coreUIModule +import com.metacto.core.ui.imagepicker.di.imagePickerModule +import com.metacto.core.ui.mediaplayers.di.mediaPlayersModule +import com.metacto.core.ui.phone.di.phoneUIModule +import com.metacto.core.ui.youtube.di.youtubeModule +import com.metacto.kmm.network.errorhandling.NetworkError + +fun getCommonModules( + environment: AppEnvironment +) = listOf( + appModule(environment), + viewModelsModule, + coreModule(environment.coreConfigs, NetworkError::class), + coreUIModule(environment.coreUIConfigs), + filesModule(), + notificationsModule( + NotificationsConfigs( + askNotificationPermissionOnStart = true + ) + ), + phoneCoreModule(), + mediaPlayersModule(), + cameraModule(), + youtubeModule(), + imagePickerModule(), + phoneUIModule() +) \ No newline at end of file diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/di/ViewModelsModule.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/di/ViewModelsModule.kt new file mode 100644 index 00000000..981f6053 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/di/ViewModelsModule.kt @@ -0,0 +1,47 @@ +package com.metacto.catalogapp.di + +// MARK: Add imports +import com.metacto.catalogapp.presentation.app.app.AppViewModel +import com.metacto.catalogapp.presentation.customDialog.CustomDialogSamplesViewModel +import com.metacto.catalogapp.presentation.dateConverter.DateConverterViewModel +import com.metacto.catalogapp.presentation.datePicker.DatePickerViewModel +import com.metacto.catalogapp.presentation.files.FilesSamplesViewModel +import com.metacto.catalogapp.presentation.imagePicker.ImagePickerSamplesViewModel +import com.metacto.catalogapp.presentation.imagePreloader.ImagePreloaderViewModel +import com.metacto.catalogapp.presentation.lottie.LottieViewModel +import com.metacto.catalogapp.presentation.main.MainViewModel +import com.metacto.catalogapp.presentation.main.applepay.ApplePayViewModel +import com.metacto.catalogapp.presentation.mediaManager.MediaManagerViewModel +import com.metacto.catalogapp.presentation.mediaPicker.MediaPickerViewModel +import com.metacto.catalogapp.presentation.navManager.NavManagerViewModel +import com.metacto.catalogapp.presentation.notifications.NotificationsSamplesViewModel +import com.metacto.catalogapp.presentation.phoneNumber.PhoneNumberViewModel +import com.metacto.catalogapp.presentation.sheetSamples.SheetSamplesViewModel +import com.metacto.catalogapp.presentation.sheetSamples.sheets.FormSheet +import com.metacto.catalogapp.presentation.sheetSamples.sheets.ListSheet +import com.metacto.catalogapp.presentation.sheetSamples.sheets.SimpleContentSheet +import com.metacto.core.ui.di.commonViewModel +import org.koin.dsl.module + +val viewModelsModule = module { + // MARK: Add view model definitions + commonViewModel { CustomDialogSamplesViewModel() } + commonViewModel { ListSheet.ListSheetViewModel() } + commonViewModel { FormSheet.FormSheetViewModel() } + commonViewModel { SimpleContentSheet.SimpleSheetViewModel() } + commonViewModel { SheetSamplesViewModel() } + commonViewModel { DateConverterViewModel() } + commonViewModel { ApplePayViewModel() } + commonViewModel { NavManagerViewModel() } + commonViewModel { MediaPickerViewModel() } + commonViewModel { LottieViewModel() } + commonViewModel { DatePickerViewModel() } + commonViewModel { ImagePreloaderViewModel() } + commonViewModel { MediaManagerViewModel() } + commonViewModel { PhoneNumberViewModel() } + commonViewModel { NotificationsSamplesViewModel() } + commonViewModel { FilesSamplesViewModel() } + commonViewModel { ImagePickerSamplesViewModel() } + commonViewModel { MainViewModel() } + single { AppViewModel() } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/app/app/AppContent.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/app/app/AppContent.kt new file mode 100644 index 00000000..17f27e0c --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/app/app/AppContent.kt @@ -0,0 +1,25 @@ +package com.metacto.catalogapp.presentation.app.app + +import androidx.compose.runtime.Composable +import com.metacto.core.ui.app.CoreAppContent +import com.metacto.core.ui.navigation.NavManager +import com.metacto.catalogapp.presentation.app.globalState.IAppGlobalState +import com.metacto.catalogapp.presentation.main.MainScreen +import com.metacto.catalogapp.presentation.theme.AppThemeContent +import org.koin.compose.koinInject + +@Composable +internal fun AppContent() { + // Get main objects + val globalState = koinInject() + val navManager = koinInject() + + // Render core app content + AppThemeContent { + CoreAppContent( + globalState = globalState, + navManager = navManager, + startScreen = MainScreen() + ) + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/app/app/AppContract.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/app/app/AppContract.kt new file mode 100644 index 00000000..6c1b9cbc --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/app/app/AppContract.kt @@ -0,0 +1,15 @@ +package com.metacto.catalogapp.presentation.app.app + +import com.metacto.core.ui.base.ViewEvent +import com.metacto.core.ui.base.ViewSideEffect +import com.metacto.core.ui.base.ViewState + +class AppContract { + object State : ViewState + + sealed class Event : ViewEvent { + data object Init : Event() + } + + sealed class Effect : ViewSideEffect +} diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/app/app/AppViewModel.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/app/app/AppViewModel.kt similarity index 58% rename from sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/app/app/AppViewModel.kt rename to samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/app/app/AppViewModel.kt index ca31e13e..168a6278 100644 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/app/app/AppViewModel.kt +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/app/app/AppViewModel.kt @@ -1,11 +1,11 @@ -package com.sampleApp.app.presentation.app.app +package com.metacto.catalogapp.presentation.app.app -import com.metacto.core.utils.deepLink.IDeepLinkManager -import com.sampleApp.app.presentation.app.app.AppContract.Effect -import com.sampleApp.app.presentation.app.app.AppContract.Event -import com.sampleApp.app.presentation.app.app.AppContract.State -import com.sampleApp.app.presentation.base.BaseViewModel +import com.metacto.core.deepLink.IDeepLinkManager +import com.metacto.catalogapp.presentation.base.BaseViewModel import org.koin.core.component.inject +import com.metacto.catalogapp.presentation.app.app.AppContract.State +import com.metacto.catalogapp.presentation.app.app.AppContract.Event +import com.metacto.catalogapp.presentation.app.app.AppContract.Effect class AppViewModel : BaseViewModel() { private val deepLinksManager by inject() diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/app/globalState/AppGlobalState.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/app/globalState/AppGlobalState.kt new file mode 100644 index 00000000..94e997ec --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/app/globalState/AppGlobalState.kt @@ -0,0 +1,25 @@ +package com.metacto.catalogapp.presentation.app.globalState + +import com.metacto.core.ui.globalState.CoreGlobalState +import com.metacto.core.ui.globalState.models.SnackBarParams +import com.metacto.core.ui.globalState.models.SnackBarType + +class AppGlobalState : CoreGlobalState(), IAppGlobalState { + override fun showSuccess(message: String) { + snackBar( + SnackBarParams( + message = message, + type = SnackBarType.SUCCESS, + ) + ) + } + + override fun showError(message: String) { + snackBar( + SnackBarParams( + message = message, + type = SnackBarType.ERROR, + ) + ) + } +} \ No newline at end of file diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/app/globalState/IAppGlobalState.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/app/globalState/IAppGlobalState.kt new file mode 100644 index 00000000..b6947fd4 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/app/globalState/IAppGlobalState.kt @@ -0,0 +1,8 @@ +package com.metacto.catalogapp.presentation.app.globalState + +import com.metacto.core.ui.globalState.ICoreGlobalState + +interface IAppGlobalState : ICoreGlobalState { + fun showSuccess(message: String) + fun showError(message: String) +} \ No newline at end of file diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/base/BaseScreen.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/base/BaseScreen.kt new file mode 100644 index 00000000..3ad4a0be --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/base/BaseScreen.kt @@ -0,0 +1,22 @@ +package com.metacto.catalogapp.presentation.base + +import androidx.compose.runtime.Composable +import com.metacto.core.ui.base.CoreScreen +import com.metacto.catalogapp.crash.CrashLogger +import org.koin.core.component.inject +import kotlin.jvm.Transient + +abstract class BaseScreen> : CoreScreen() { + + @delegate:Transient + private val crashLogger by inject() + private val screenName by lazy { this::class.simpleName.orEmpty() } + + @Composable + abstract override fun Content() + + override fun onDisplayed() { + super.onDisplayed() + crashLogger.setCurrentScreen(screenName) + } +} \ No newline at end of file diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/base/BaseSheet.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/base/BaseSheet.kt new file mode 100644 index 00000000..54609271 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/base/BaseSheet.kt @@ -0,0 +1,22 @@ +package com.metacto.catalogapp.presentation.base + +import androidx.compose.runtime.Composable +import com.metacto.core.ui.base.CoreSheet +import com.metacto.catalogapp.crash.CrashLogger +import org.koin.core.component.inject +import kotlin.jvm.Transient + +abstract class BaseSheet> : CoreSheet() { + + @delegate:Transient + private val crashLogger by inject() + private val sheetName by lazy { this::class.simpleName.orEmpty() } + + @Composable + abstract override fun Content() + + override fun onDisplayed() { + super.onDisplayed() + crashLogger.logEvent("Sheet displayed: $sheetName") + } +} \ No newline at end of file diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/base/BaseTab.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/base/BaseTab.kt new file mode 100644 index 00000000..9bb289bb --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/base/BaseTab.kt @@ -0,0 +1,18 @@ +package com.metacto.catalogapp.presentation.base + +import com.metacto.core.ui.base.CoreTab +import com.metacto.catalogapp.crash.CrashLogger +import org.koin.core.component.inject +import kotlin.jvm.Transient + +abstract class BaseTab> : CoreTab() { + + @delegate:Transient + private val crashLogger by inject() + private val tabName by lazy { this::class.simpleName.orEmpty() } + + override fun onDisplayed() { + super.onDisplayed() + crashLogger.logEvent("Tab displayed: $tabName") + } +} \ No newline at end of file diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/base/BaseViewModel.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/base/BaseViewModel.kt new file mode 100644 index 00000000..816c9753 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/base/BaseViewModel.kt @@ -0,0 +1,39 @@ +package com.metacto.catalogapp.presentation.base + +import com.metacto.core.ui.base.CoreViewModel +import com.metacto.core.ui.base.ErrorType +import com.metacto.core.ui.base.ViewEvent +import com.metacto.core.ui.base.ViewSideEffect +import com.metacto.core.ui.base.ViewState +import com.metacto.core.ui.globalState.models.LoadingType +import com.metacto.catalogapp.crash.CrashLogger +import com.metacto.catalogapp.presentation.app.globalState.IAppGlobalState +import org.koin.core.component.inject + +abstract class BaseViewModel : + CoreViewModel() { + + protected val globalState by inject() + private val crashLogger by inject() + private val viewModelName by lazy { this::class.simpleName.orEmpty() } + + override val defaultLoadingType: LoadingType = LoadingType.SecondaryCircularBlocking + + override val defaultErrorType: ErrorType = ErrorType.SnackBar + + override fun onReceiveEvent(event: E) { + super.onReceiveEvent(event) + crashLogger.logEvent("$viewModelName.$event") + } + + override fun onChangeState(newState: S) { + super.onChangeState(newState) + crashLogger.setCurrentScreenState(newState) + crashLogger.setCustomKey("UIState", newState.toString()) + } + + override fun onSendSideEffect(effect: SF) { + super.onSendSideEffect(effect) + crashLogger.logEvent("$viewModelName.$effect") + } +} \ No newline at end of file diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/components/containers/AppScreenColumn.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/components/containers/AppScreenColumn.kt new file mode 100644 index 00000000..ca1b01f6 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/components/containers/AppScreenColumn.kt @@ -0,0 +1,85 @@ +package com.metacto.catalogapp.presentation.components.containers + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.imePadding +import androidx.compose.foundation.layout.navigationBarsPadding +import androidx.compose.foundation.layout.statusBarsPadding +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.alpha +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.unit.Dp +import com.metacto.core.ui.components.containers.ScreenColumn +import com.metacto.core.ui.components.toolbar.Toolbar +import com.metacto.core.ui.extensions.modifyIf +import com.metacto.catalogapp.presentation.theme.colors +import com.metacto.catalogapp.presentation.theme.spacings + +@Composable +internal fun AppScreenColumn( + modifier: Modifier = Modifier, + bgColor: Color = colors.background, + verticalArrangement: Arrangement.Vertical = Arrangement.Top, + horizontalAlignment: Alignment.Horizontal = Alignment.Start, + topPadding: Dp = spacings.spacing0, + bottomPadding: Dp = spacings.spacing0, + startPadding: Dp = spacings.spacing16, + endPadding: Dp = spacings.spacing16, + enableSafeInsets: Boolean = true, + enableImeInsets: Boolean = true, + isScrollable: Boolean = false, + onScroll: (() -> Unit)? = null, + isRefreshable: Boolean = false, + isRefreshing: Boolean = false, + onRefresh: (() -> Unit)? = null, + showToolbar: Boolean = false, + showBack: Boolean = false, + onBackClick: (() -> Unit)? = null, + title: String? = null, + contentAlpha: Float = 1f, + content: @Composable ColumnScope.() -> Unit, +) { + // Render screen column + ScreenColumn( + modifier = modifier + .fillMaxSize() + .background(bgColor) + .alpha(contentAlpha) + .modifyIf(enableImeInsets) { + imePadding() + } + .modifyIf(enableSafeInsets) { + statusBarsPadding().navigationBarsPadding() + }, + verticalArrangement = verticalArrangement, + horizontalAlignment = horizontalAlignment, + topPadding = topPadding, + bottomPadding = bottomPadding, + startPadding = startPadding, + endPadding = endPadding, + enableSafeInsets = false, + isScrollable = isScrollable, + onScroll = onScroll, + isRefreshable = isRefreshable, + isRefreshing = isRefreshing, + onRefresh = onRefresh, + mainContent = content, + toolbar = { + if (showToolbar) { + Toolbar( + title = title, + modifier = Modifier.fillMaxWidth(), + showStartIcon = showBack, + onStartIconClick = { + onBackClick?.invoke() + } + ) + } + } + ) +} \ No newline at end of file diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/customDialog/CustomDialogSamplesContract.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/customDialog/CustomDialogSamplesContract.kt new file mode 100644 index 00000000..c94c2aa5 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/customDialog/CustomDialogSamplesContract.kt @@ -0,0 +1,23 @@ +package com.metacto.catalogapp.presentation.customDialog + +import com.metacto.core.ui.base.ViewEvent +import com.metacto.core.ui.base.ViewSideEffect +import com.metacto.core.ui.base.ViewState + +class CustomDialogSamplesContract { + + data class State( + val isInitialized: Boolean = false + ) : ViewState + + sealed class Event : ViewEvent { + data object Init : Event() + data object ShowSimpleDialog : Event() + data object ShowDialogWithToolbar : Event() + data object ShowDialogWithButton : Event() + data object ShowDialogWithForm : Event() + data object ShowComplexDialog : Event() + } + + sealed class Effect : ViewSideEffect +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/customDialog/CustomDialogSamplesScreen.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/customDialog/CustomDialogSamplesScreen.kt new file mode 100644 index 00000000..b1f4fb6c --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/customDialog/CustomDialogSamplesScreen.kt @@ -0,0 +1,29 @@ +package com.metacto.catalogapp.presentation.customDialog + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import com.metacto.catalogapp.presentation.base.BaseScreen +import com.metacto.catalogapp.presentation.customDialog.CustomDialogSamplesContract.Event +import com.metacto.catalogapp.presentation.customDialog.components.CustomDialogSamplesContent +import com.metacto.core.ui.base.rememberViewModel + +internal class CustomDialogSamplesScreen : BaseScreen() { + @Composable + override fun Content() { + // Get the view model + val viewModel = rememberViewModel() + + // Init view model + LaunchedEffect(Unit) { + if (!viewModel.viewState.value.isInitialized) { + viewModel.setEvent(Event.Init) + } + } + + // Render content + CustomDialogSamplesContent( + state = viewModel.viewState.value, + onEvent = viewModel::setEvent + ) + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/customDialog/CustomDialogSamplesViewModel.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/customDialog/CustomDialogSamplesViewModel.kt new file mode 100644 index 00000000..75f03729 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/customDialog/CustomDialogSamplesViewModel.kt @@ -0,0 +1,162 @@ +package com.metacto.catalogapp.presentation.customDialog + +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.setValue +import com.metacto.catalogapp.presentation.base.BaseViewModel +import com.metacto.catalogapp.presentation.customDialog.CustomDialogSamplesContract.Effect +import com.metacto.catalogapp.presentation.customDialog.CustomDialogSamplesContract.Event +import com.metacto.catalogapp.presentation.customDialog.CustomDialogSamplesContract.State +import com.metacto.catalogapp.presentation.customDialog.components.dialogs.ComplexDialog +import com.metacto.catalogapp.presentation.customDialog.components.dialogs.DialogWithButtonContent +import com.metacto.catalogapp.presentation.customDialog.components.dialogs.DialogWithFormContent +import com.metacto.catalogapp.presentation.customDialog.components.dialogs.DialogWithToolbarContent +import com.metacto.catalogapp.presentation.customDialog.components.dialogs.SimpleDialogContent +import com.metacto.core.ui.globalState.models.CustomPopupParams +import com.metacto.core.ui.globalState.models.MessagePopupParams +import com.metacto.core.ui.globalState.models.SuccessPopupParams + +class CustomDialogSamplesViewModel : BaseViewModel() { + + override fun setInitialState() = State() + + override fun handleEvents(event: Event): Any = when (event) { + Event.Init -> init() + Event.ShowSimpleDialog -> showSimpleDialog() + Event.ShowDialogWithToolbar -> showDialogWithToolbar() + Event.ShowDialogWithButton -> showDialogWithButton() + Event.ShowDialogWithForm -> showDialogWithForm() + Event.ShowComplexDialog -> showComplexDialog() + } + + private fun init() { + // Validate if already initialized + if (currentState.isInitialized) return + + // Init + + // Update the flag + setState { copy(isInitialized = true) } + } + + private fun showSimpleDialog() { + globalState.customPopup( + CustomPopupParams( + isCancellable = true, + showToolbar = false, + onDismiss = { + // Handle dismiss + }, + content = { + SimpleDialogContent() + } + ) + ) + } + + private fun showDialogWithToolbar() { + globalState.customPopup( + CustomPopupParams( + isCancellable = true, + showToolbar = true, + title = "Custom Dialog Title", + onDismiss = { + // Handle dismiss + }, + content = { + DialogWithToolbarContent() + } + ) + ) + } + + private fun showDialogWithButton() { + globalState.customPopup( + CustomPopupParams( + isCancellable = true, + showToolbar = true, + title = "Confirmation", + showPositiveButton = true, + positiveButtonText = "Got it!", + onPositiveClick = { + // Handle positive button click + }, + onDismiss = { + // Handle dismiss + }, + content = { + DialogWithButtonContent() + } + ) + ) + } + + private fun showDialogWithForm() { + var name by mutableStateOf("") + var email by mutableStateOf("") + + globalState.customPopup( + CustomPopupParams( + isCancellable = true, + showToolbar = true, + title = "User Information", + showPositiveButton = true, + positiveButtonText = "Submit", + onPositiveClick = { + // Handle form submission + globalState.successPopup( + SuccessPopupParams( + title = "Success", + body = "Form submitted!\nName: $name\nEmail: $email" + ) + ) + }, + onDismiss = { + // Handle dismiss + }, + content = { + DialogWithFormContent( + name = name, + onNameChange = { name = it }, + email = email, + onEmailChange = { email = it } + ) + } + ) + ) + } + + private fun showComplexDialog() { + globalState.customPopup( + CustomPopupParams( + isCancellable = true, + showToolbar = true, + title = "Advanced Custom Dialog", + showPositiveButton = false, // We'll add custom buttons in the content + onDismiss = { + // Handle dismiss + }, + content = { + ComplexDialog( + onPrimaryClick = { + globalState.idle() + globalState.messagePopup( + MessagePopupParams( + body = "Primary action clicked!" + ) + ) + }, + onSecondaryClick = { + globalState.idle() + globalState.messagePopup( + MessagePopupParams( + body = "Secondary action clicked!" + ) + ) + } + ) + } + ) + ) + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/customDialog/components/CustomDialogSamplesContent.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/customDialog/components/CustomDialogSamplesContent.kt new file mode 100644 index 00000000..9520af23 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/customDialog/components/CustomDialogSamplesContent.kt @@ -0,0 +1,83 @@ +package com.metacto.catalogapp.presentation.customDialog.components + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import com.metacto.catalogapp.presentation.components.containers.AppScreenColumn +import com.metacto.catalogapp.presentation.customDialog.CustomDialogSamplesContract.Event +import com.metacto.catalogapp.presentation.customDialog.CustomDialogSamplesContract.State +import com.metacto.catalogapp.presentation.theme.spacings +import com.metacto.core.ui.components.buttons.PrimaryFilledButton +import com.metacto.core.ui.navigation.NavManager +import org.koin.compose.koinInject + +@Composable +internal fun CustomDialogSamplesContent( + state: State, + onEvent: (Event) -> Unit +) { + // Di + val navManager = koinInject() + + // Container column + AppScreenColumn( + verticalArrangement = Arrangement.spacedBy(spacings.spacing16), + title = "Custom Dialog Samples", + isScrollable = true, + showToolbar = true, + showBack = true, + onBackClick = { + navManager.goBack() + }, + ) { + Text( + text = "Custom dialogs allow you to show any composable content inside a dialog with optional toolbar and buttons.", + style = MaterialTheme.typography.bodyMedium, + modifier = Modifier.padding(bottom = spacings.spacing8) + ) + + PrimaryFilledButton( + text = "Simple Dialog", + onClick = { + onEvent(Event.ShowSimpleDialog) + }, + modifier = Modifier.fillMaxWidth() + ) + + PrimaryFilledButton( + text = "Dialog with Toolbar", + onClick = { + onEvent(Event.ShowDialogWithToolbar) + }, + modifier = Modifier.fillMaxWidth() + ) + + PrimaryFilledButton( + text = "Dialog with Button", + onClick = { + onEvent(Event.ShowDialogWithButton) + }, + modifier = Modifier.fillMaxWidth() + ) + + PrimaryFilledButton( + text = "Dialog with Form", + onClick = { + onEvent(Event.ShowDialogWithForm) + }, + modifier = Modifier.fillMaxWidth() + ) + + PrimaryFilledButton( + text = "Complex Dialog", + onClick = { + onEvent(Event.ShowComplexDialog) + }, + modifier = Modifier.fillMaxWidth() + ) + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/customDialog/components/dialogs/ComplexDialog.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/customDialog/components/dialogs/ComplexDialog.kt new file mode 100644 index 00000000..1c17a72e --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/customDialog/components/dialogs/ComplexDialog.kt @@ -0,0 +1,53 @@ +package com.metacto.catalogapp.presentation.customDialog.components.dialogs + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.metacto.core.ui.components.buttons.PrimaryFilledButton + +@Composable +internal fun ComplexDialog( + onPrimaryClick: () -> Unit, + onSecondaryClick: () -> Unit, +) { + Column( + modifier = Modifier + .fillMaxWidth() + .padding(16.dp), + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + Text( + text = "Complex Dialog Example", + style = MaterialTheme.typography.titleLarge + ) + + Text( + text = "This dialog demonstrates complete control over the content. You can add any UI elements, including custom buttons.", + style = MaterialTheme.typography.bodyMedium + ) + + // Custom buttons in the content + Column( + modifier = Modifier.fillMaxWidth(), + verticalArrangement = Arrangement.spacedBy(8.dp) + ) { + PrimaryFilledButton( + text = "Primary Action", + onClick = onPrimaryClick, + modifier = Modifier.fillMaxWidth() + ) + + PrimaryFilledButton( + text = "Secondary Action", + onClick = onSecondaryClick, + modifier = Modifier.fillMaxWidth() + ) + } + } +} \ No newline at end of file diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/customDialog/components/dialogs/DialogWithButtonContent.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/customDialog/components/dialogs/DialogWithButtonContent.kt new file mode 100644 index 00000000..4e555d4c --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/customDialog/components/dialogs/DialogWithButtonContent.kt @@ -0,0 +1,31 @@ +package com.metacto.catalogapp.presentation.customDialog.components.dialogs + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp + +@Composable +internal fun DialogWithButtonContent() { + Column( + modifier = Modifier + .fillMaxWidth() + .padding(16.dp), + verticalArrangement = Arrangement.spacedBy(12.dp) + ) { + Text( + text = "This dialog includes an optional positive button at the bottom.", + style = MaterialTheme.typography.bodyLarge + ) + Text( + text = "The button text can be customized, and you can handle its click event.", + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/customDialog/components/dialogs/DialogWithFormContent.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/customDialog/components/dialogs/DialogWithFormContent.kt new file mode 100644 index 00000000..76dffaa1 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/customDialog/components/dialogs/DialogWithFormContent.kt @@ -0,0 +1,46 @@ +package com.metacto.catalogapp.presentation.customDialog.components.dialogs + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TextField +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp + +@Composable +internal fun DialogWithFormContent( + name: String, + onNameChange: (String) -> Unit, + email: String, + onEmailChange: (String) -> Unit +) { + Column( + modifier = Modifier + .fillMaxWidth() + .padding(16.dp), + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + Text( + text = "Enter your details:", + style = MaterialTheme.typography.titleMedium + ) + + TextField( + value = name, + onValueChange = onNameChange, + label = { Text("Name") }, + modifier = Modifier.fillMaxWidth() + ) + + TextField( + value = email, + onValueChange = onEmailChange, + label = { Text("Email") }, + modifier = Modifier.fillMaxWidth() + ) + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/customDialog/components/dialogs/DialogWithToolbarContent.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/customDialog/components/dialogs/DialogWithToolbarContent.kt new file mode 100644 index 00000000..fdf9e503 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/customDialog/components/dialogs/DialogWithToolbarContent.kt @@ -0,0 +1,31 @@ +package com.metacto.catalogapp.presentation.customDialog.components.dialogs + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp + +@Composable +internal fun DialogWithToolbarContent() { + Column( + modifier = Modifier + .fillMaxWidth() + .padding(16.dp), + verticalArrangement = Arrangement.spacedBy(12.dp) + ) { + Text( + text = "This dialog has a toolbar with title and close button.", + style = MaterialTheme.typography.bodyLarge + ) + Text( + text = "You can dismiss it by clicking the close button in the toolbar or outside the dialog.", + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/customDialog/components/dialogs/SimpleDialogContent.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/customDialog/components/dialogs/SimpleDialogContent.kt new file mode 100644 index 00000000..94f4cd47 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/customDialog/components/dialogs/SimpleDialogContent.kt @@ -0,0 +1,17 @@ +package com.metacto.catalogapp.presentation.customDialog.components.dialogs + +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp + +@Composable +internal fun SimpleDialogContent() { + Text( + text = "This is a simple custom dialog with just text content. You can put any composable content here!", + style = MaterialTheme.typography.bodyLarge, + modifier = Modifier.padding(16.dp) + ) +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/dateConverter/DateConverterContract.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/dateConverter/DateConverterContract.kt new file mode 100644 index 00000000..fb83abdb --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/dateConverter/DateConverterContract.kt @@ -0,0 +1,18 @@ +package com.metacto.catalogapp.presentation.dateConverter + +import com.metacto.core.ui.base.ViewEvent +import com.metacto.core.ui.base.ViewSideEffect +import com.metacto.core.ui.base.ViewState + +class DateConverterContract { + + data class State( + val isInitialized: Boolean = false, + ) : ViewState + + sealed class Event : ViewEvent { + data object Init : Event() + } + + sealed class Effect : ViewSideEffect +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/dateConverter/DateConverterScreen.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/dateConverter/DateConverterScreen.kt new file mode 100644 index 00000000..0d203bfc --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/dateConverter/DateConverterScreen.kt @@ -0,0 +1,29 @@ +package com.metacto.catalogapp.presentation.dateConverter + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import com.metacto.catalogapp.presentation.dateConverter.DateConverterContract.Event +import com.metacto.catalogapp.presentation.dateConverter.components.DateConverterContent +import com.metacto.catalogapp.presentation.base.BaseScreen +import com.metacto.core.ui.base.rememberViewModel + +internal class DateConverterScreen : BaseScreen() { + @Composable + override fun Content() { + // Get the view model + val viewModel = rememberViewModel() + + // Init view model + LaunchedEffect(Unit) { + if (!viewModel.viewState.value.isInitialized) { + viewModel.setEvent(Event.Init) + } + } + + // Render content + DateConverterContent( + state = viewModel.viewState.value, + onEvent = viewModel::setEvent + ) + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/dateConverter/DateConverterViewModel.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/dateConverter/DateConverterViewModel.kt new file mode 100644 index 00000000..1f0cf8e2 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/dateConverter/DateConverterViewModel.kt @@ -0,0 +1,25 @@ +package com.metacto.catalogapp.presentation.dateConverter + +import com.metacto.catalogapp.presentation.base.BaseViewModel +import com.metacto.catalogapp.presentation.dateConverter.DateConverterContract.Effect +import com.metacto.catalogapp.presentation.dateConverter.DateConverterContract.Event +import com.metacto.catalogapp.presentation.dateConverter.DateConverterContract.State + +class DateConverterViewModel : BaseViewModel() { + + override fun setInitialState() = State() + + override fun handleEvents(event: Event): Any = when (event) { + Event.Init -> init() + } + + private fun init() { + // Validate if already initialized + if (currentState.isInitialized) return + + // Init + + // Update the flag + setState { copy(isInitialized = true) } + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/dateConverter/components/DateConverterContent.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/dateConverter/components/DateConverterContent.kt new file mode 100644 index 00000000..7acb1100 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/dateConverter/components/DateConverterContent.kt @@ -0,0 +1,150 @@ +package com.metacto.catalogapp.presentation.dateConverter.components + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Card +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.MaterialTheme +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.Modifier +import androidx.compose.ui.unit.dp +import com.metacto.catalogapp.presentation.components.containers.AppScreenColumn +import com.metacto.catalogapp.presentation.dateConverter.DateConverterContract.Event +import com.metacto.catalogapp.presentation.dateConverter.DateConverterContract.State +import com.metacto.catalogapp.presentation.theme.spacings +import com.metacto.core.domain.CoreConstants +import com.metacto.core.date.formatToRelativeDate +import com.metacto.core.date.parseLocalDateTime +import com.metacto.core.ui.components.buttons.PrimaryFilledButton +import com.metacto.core.ui.navigation.NavManager +import kotlinx.datetime.TimeZone +import org.koin.compose.koinInject + +@Composable +internal fun DateConverterContent( + state: State, + onEvent: (Event) -> Unit +) { + // Di + val navManager = koinInject() + + // State for storing conversion results + var dateString by remember { mutableStateOf("2025-12-07T16:31:50.976Z") } + var parsedDateTime by remember { mutableStateOf(null) } + var relativeDate by remember { mutableStateOf(null) } + + // Container column + AppScreenColumn( + verticalArrangement = Arrangement.spacedBy(spacings.spacing8), + title = "Date Converter", + isScrollable = true, + showToolbar = true, + showBack = true, + onBackClick = { + navManager.goBack() + }, + ) { + // Input date string display + Card( + modifier = Modifier.fillMaxWidth(), + elevation = CardDefaults.cardElevation(defaultElevation = 4.dp) + ) { + Column( + modifier = Modifier + .fillMaxWidth() + .padding(16.dp), + verticalArrangement = Arrangement.spacedBy(8.dp) + ) { + Text( + text = "Input Date String:", + style = MaterialTheme.typography.titleMedium + ) + Text( + text = dateString, + style = MaterialTheme.typography.bodyLarge + ) + Text( + text = "Format: ${CoreConstants.SERVER_DATE_FORMAT}", + style = MaterialTheme.typography.bodySmall + ) + } + } + + // Convert button + PrimaryFilledButton( + text = "Convert Date", + onClick = { + val localDateTime = dateString.parseLocalDateTime( + format = CoreConstants.SERVER_DATE_FORMAT + ) + + parsedDateTime = localDateTime?.toString() + relativeDate = localDateTime?.formatToRelativeDate(TimeZone.UTC).orEmpty() + }, + modifier = Modifier.fillMaxWidth() + ) + + // Parsed LocalDateTime result + parsedDateTime?.let { parsed -> + Card( + modifier = Modifier.fillMaxWidth(), + elevation = CardDefaults.cardElevation(defaultElevation = 4.dp), + colors = CardDefaults.cardColors( + containerColor = MaterialTheme.colorScheme.primaryContainer + ) + ) { + Column( + modifier = Modifier + .fillMaxWidth() + .padding(16.dp), + verticalArrangement = Arrangement.spacedBy(8.dp) + ) { + Text( + text = "Parsed LocalDateTime:", + style = MaterialTheme.typography.titleMedium, + color = MaterialTheme.colorScheme.onPrimaryContainer + ) + Text( + text = parsed, + style = MaterialTheme.typography.bodyLarge + ) + } + } + } + + // Relative date result + relativeDate?.let { relative -> + Card( + modifier = Modifier.fillMaxWidth(), + elevation = CardDefaults.cardElevation(defaultElevation = 4.dp), + colors = CardDefaults.cardColors( + containerColor = MaterialTheme.colorScheme.secondaryContainer + ) + ) { + Column( + modifier = Modifier + .fillMaxWidth() + .padding(16.dp), + verticalArrangement = Arrangement.spacedBy(8.dp) + ) { + Text( + text = "Relative Date (UTC):", + style = MaterialTheme.typography.titleMedium, + color = MaterialTheme.colorScheme.onSecondaryContainer + ) + Text( + text = relative, + style = MaterialTheme.typography.bodyLarge + ) + } + } + } + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/datePicker/DatePickerContract.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/datePicker/DatePickerContract.kt new file mode 100644 index 00000000..eca14b26 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/datePicker/DatePickerContract.kt @@ -0,0 +1,23 @@ +package com.metacto.catalogapp.presentation.datePicker + +import com.metacto.core.ui.base.ViewEvent +import com.metacto.core.ui.base.ViewSideEffect +import com.metacto.core.ui.base.ViewState +import kotlinx.datetime.LocalDate + +class DatePickerContract { + + data class State( + val isInitialized: Boolean = false, + val useNativePicker: Boolean = true, + val selectedDate: LocalDate? = null, + ) : ViewState + + sealed class Event : ViewEvent { + data object Init : Event() + data object TogglePickerType : Event() + data class OnDateSelected(val date: LocalDate) : Event() + } + + sealed class Effect : ViewSideEffect +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/datePicker/DatePickerScreen.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/datePicker/DatePickerScreen.kt new file mode 100644 index 00000000..19df6e8d --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/datePicker/DatePickerScreen.kt @@ -0,0 +1,29 @@ +package com.metacto.catalogapp.presentation.datePicker + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import com.metacto.catalogapp.presentation.base.BaseScreen +import com.metacto.catalogapp.presentation.datePicker.DatePickerContract.Event +import com.metacto.catalogapp.presentation.datePicker.components.DatePickerContent +import com.metacto.core.ui.base.rememberViewModel + +internal class DatePickerScreen : BaseScreen() { + @Composable + override fun Content() { + // Get the view model + val viewModel = rememberViewModel() + + // Init view model + LaunchedEffect(Unit) { + if (!viewModel.viewState.value.isInitialized) { + viewModel.setEvent(Event.Init) + } + } + + // Render content + DatePickerContent( + state = viewModel.viewState.value, + onEvent = viewModel::setEvent + ) + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/datePicker/DatePickerViewModel.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/datePicker/DatePickerViewModel.kt new file mode 100644 index 00000000..961f54f3 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/datePicker/DatePickerViewModel.kt @@ -0,0 +1,35 @@ +package com.metacto.catalogapp.presentation.datePicker + +import com.metacto.catalogapp.presentation.base.BaseViewModel +import com.metacto.catalogapp.presentation.datePicker.DatePickerContract.Effect +import com.metacto.catalogapp.presentation.datePicker.DatePickerContract.Event +import com.metacto.catalogapp.presentation.datePicker.DatePickerContract.State + +class DatePickerViewModel : BaseViewModel() { + + override fun setInitialState() = State() + + override fun handleEvents(event: Event): Any = when (event) { + Event.Init -> init() + Event.TogglePickerType -> togglePickerType() + is Event.OnDateSelected -> onDateSelected(event.date) + } + + private fun init() { + // Validate if already initialized + if (currentState.isInitialized) return + + // Init + + // Update the flag + setState { copy(isInitialized = true) } + } + + private fun togglePickerType() { + setState { copy(useNativePicker = !useNativePicker) } + } + + private fun onDateSelected(date: kotlinx.datetime.LocalDate) { + setState { copy(selectedDate = date) } + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/datePicker/components/DatePickerContent.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/datePicker/components/DatePickerContent.kt new file mode 100644 index 00000000..74e266ad --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/datePicker/components/DatePickerContent.kt @@ -0,0 +1,130 @@ +package com.metacto.catalogapp.presentation.datePicker.components + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Switch +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.DpSize +import androidx.compose.ui.unit.dp +import com.metacto.catalogapp.presentation.components.containers.AppScreenColumn +import com.metacto.catalogapp.presentation.datePicker.DatePickerContract.Event +import com.metacto.catalogapp.presentation.datePicker.DatePickerContract.State +import com.metacto.catalogapp.presentation.theme.colors +import com.metacto.catalogapp.presentation.theme.spacings +import com.metacto.core.ui.components.pickers.NativeDatePicker +import com.metacto.core.ui.components.wheelPicker.datetime.WheelDatePicker +import com.metacto.core.ui.navigation.NavManager +import kotlinx.datetime.Clock +import kotlinx.datetime.LocalDate +import kotlinx.datetime.TimeZone +import kotlinx.datetime.todayIn +import org.koin.compose.koinInject + +@Composable +internal fun DatePickerContent( + state: State, + onEvent: (Event) -> Unit +) { + // Di + val navManager = koinInject() + + // Date range setup + val today = Clock.System.todayIn(TimeZone.currentSystemDefault()) + val minDate = LocalDate(today.year - 10, 1, 1) + val maxDate = LocalDate(today.year + 10, 12, 31) + val startDate = state.selectedDate ?: today + + // Container column + AppScreenColumn( + verticalArrangement = Arrangement.spacedBy(spacings.spacing8), + title = "Date Pickers", + isScrollable = true, + showToolbar = true, + showBack = true, + onBackClick = { + navManager.goBack() + }, + ) { + // Toggle between Native and Wheel pickers + Row( + modifier = Modifier + .fillMaxWidth() + .padding(vertical = spacings.spacing8), + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically + ) { + Text( + text = if (state.useNativePicker) "Using Native Picker" else "Using Wheel Picker" + ) + Switch( + checked = state.useNativePicker, + onCheckedChange = { + onEvent(Event.TogglePickerType) + } + ) + } + + Spacer(modifier = Modifier.height(spacings.spacing16)) + + // Display selected date + state.selectedDate?.let { date -> + Text( + text = "Selected Date: ${date.year}-${date.monthNumber.toString().padStart(2, '0')}-${date.dayOfMonth.toString().padStart(2, '0')}", + modifier = Modifier.padding(vertical = spacings.spacing8) + ) + + Spacer(modifier = Modifier.height(spacings.spacing8)) + } + + // Date Picker + Column( + modifier = Modifier.fillMaxWidth(), + horizontalAlignment = Alignment.CenterHorizontally + ) { + if (state.useNativePicker) { + NativeDatePicker( + onSnappedDate = { date -> + onEvent(Event.OnDateSelected(date)) + }, + minDate = minDate, + maxDate = maxDate, + startDate = startDate, + size = DpSize(width = 300.dp, height = 200.dp), + backgroundColor = colors.background, + modifier = Modifier.padding(spacings.spacing16) + ) + } else { + WheelDatePicker( + onSnappedDate = { date -> + onEvent(Event.OnDateSelected(date)) + }, + minDate = minDate, + maxDate = maxDate, + startDate = startDate, + size = DpSize(width = 300.dp, height = 200.dp), + modifier = Modifier.padding(spacings.spacing16) + ) + } + } + + Spacer(modifier = Modifier.height(spacings.spacing16)) + + // Info text + Text( + text = if (state.useNativePicker) { + "Native Date Picker uses platform-specific date picker UI" + } else { + "Wheel Date Picker provides a cross-platform custom wheel interface" + }, + modifier = Modifier.padding(spacings.spacing8) + ) + } +} \ No newline at end of file diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/files/FilesSamplesContract.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/files/FilesSamplesContract.kt new file mode 100644 index 00000000..63da992f --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/files/FilesSamplesContract.kt @@ -0,0 +1,18 @@ +package com.metacto.catalogapp.presentation.files + +import com.metacto.core.ui.base.ViewEvent +import com.metacto.core.ui.base.ViewSideEffect +import com.metacto.core.ui.base.ViewState + +class FilesSamplesContract { + + data class State( + val isInitialized: Boolean = false, + ) : ViewState + + sealed class Event : ViewEvent { + data object Init : Event() + } + + sealed class Effect : ViewSideEffect +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/files/FilesSamplesScreen.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/files/FilesSamplesScreen.kt new file mode 100644 index 00000000..b1ff841c --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/files/FilesSamplesScreen.kt @@ -0,0 +1,29 @@ +package com.metacto.catalogapp.presentation.files + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import com.metacto.catalogapp.presentation.files.FilesSamplesContract.Event +import com.metacto.catalogapp.presentation.files.components.FilesSamplesContent +import com.metacto.catalogapp.presentation.base.BaseScreen +import com.metacto.core.ui.base.rememberViewModel + +internal class FilesSamplesScreen : BaseScreen() { + @Composable + override fun Content() { + // Get the view model + val viewModel = rememberViewModel() + + // Init view model + LaunchedEffect(Unit) { + if (!viewModel.viewState.value.isInitialized) { + viewModel.setEvent(Event.Init) + } + } + + // Render content + FilesSamplesContent( + state = viewModel.viewState.value, + onEvent = viewModel::setEvent + ) + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/files/FilesSamplesViewModel.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/files/FilesSamplesViewModel.kt new file mode 100644 index 00000000..d84a84a4 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/files/FilesSamplesViewModel.kt @@ -0,0 +1,26 @@ +package com.metacto.catalogapp.presentation.files + +import com.metacto.catalogapp.presentation.base.BaseViewModel +import com.metacto.catalogapp.presentation.files.FilesSamplesContract.Effect +import com.metacto.catalogapp.presentation.files.FilesSamplesContract.Event +import com.metacto.catalogapp.presentation.files.FilesSamplesContract.State +import com.metacto.core.files.IFileManager +import org.koin.core.component.inject + +class FilesSamplesViewModel : BaseViewModel() { + override fun setInitialState() = State() + + override fun handleEvents(event: Event): Any = when (event) { + Event.Init -> init() + } + + private fun init() { + // Validate if already initialized + if (currentState.isInitialized) return + + // Init + + // Update the flag + setState { copy(isInitialized = true) } + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/files/components/FilesSamplesContent.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/files/components/FilesSamplesContent.kt new file mode 100644 index 00000000..2f0f0c44 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/files/components/FilesSamplesContent.kt @@ -0,0 +1,111 @@ +package com.metacto.catalogapp.presentation.files.components + +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import com.metacto.catalogapp.presentation.app.globalState.IAppGlobalState +import com.metacto.catalogapp.presentation.components.containers.AppScreenColumn +import com.metacto.catalogapp.presentation.files.FilesSamplesContract.Event +import com.metacto.catalogapp.presentation.files.FilesSamplesContract.State +import com.metacto.catalogapp.presentation.theme.spacings +import com.metacto.core.files.IFileManager +import com.metacto.core.ui.components.buttons.PrimaryFilledButton +import com.metacto.core.ui.navigation.NavManager +import org.koin.compose.koinInject + +@Composable +internal fun FilesSamplesContent( + state: State, + onEvent: (Event) -> Unit +) { + // Di + val navManager = koinInject() + val fileManager = koinInject() + val globalState = koinInject() + + // state + var filePath by remember { mutableStateOf("") } + + // Container column + AppScreenColumn( + title = "Files Samples", + isScrollable = true, + showToolbar = true, + showBack = true, + onBackClick = { + navManager.goBack() + }, + ) { + // create folder + PrimaryFilledButton( + text = "Create Folder", + onClick = { + val path = fileManager.createFile( + fileName = "note.txt", content = "test", dirName = "notes" + ) + if (path.isNotEmpty()) { + globalState.showSuccess("Folder and file created successfully: $path") + } else { + globalState.showError("Failed to create folder and file") + } + filePath = path + }, + modifier = Modifier.fillMaxWidth() + ) + + // read file + PrimaryFilledButton( + text = "Read File", + onClick = { + try { + fileManager.readFile(filePath) + + globalState.showSuccess("File read successfully: $filePath") + + } catch (e: Throwable) { + globalState.showError("Failed to read file: $filePath, ${e.message}") + } + }, + modifier = Modifier + .fillMaxWidth() + .padding(top = spacings.spacing16) + ) + + //clear file + PrimaryFilledButton( + text = "Clear File", + onClick = { + val boolean = fileManager.clearFolder(filePath) + if (boolean) { + globalState.showSuccess("Folder cleared successfully") + } else { + globalState.showError("Failed to clear folder") + } + }, + modifier = Modifier + .fillMaxWidth() + .padding(top = spacings.spacing16) + ) + + //delete file + PrimaryFilledButton( + text = "Delete File", + onClick = { + val boolean = fileManager.deleteFile(filePath) + if (boolean) { + globalState.showSuccess("File deleted successfully") + } else { + globalState.showError("Failed to delete file") + } + }, + modifier = Modifier + .fillMaxWidth() + .padding(top = spacings.spacing16) + ) + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/imagePicker/ImagePickerSamplesContract.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/imagePicker/ImagePickerSamplesContract.kt new file mode 100644 index 00000000..88fbed60 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/imagePicker/ImagePickerSamplesContract.kt @@ -0,0 +1,18 @@ +package com.metacto.catalogapp.presentation.imagePicker + +import com.metacto.core.ui.base.ViewEvent +import com.metacto.core.ui.base.ViewSideEffect +import com.metacto.core.ui.base.ViewState + +class ImagePickerSamplesContract { + + data class State( + val isInitialized: Boolean = false, + ) : ViewState + + sealed class Event : ViewEvent { + data object Init : Event() + } + + sealed class Effect : ViewSideEffect +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/imagePicker/ImagePickerSamplesScreen.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/imagePicker/ImagePickerSamplesScreen.kt new file mode 100644 index 00000000..d513c546 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/imagePicker/ImagePickerSamplesScreen.kt @@ -0,0 +1,29 @@ +package com.metacto.catalogapp.presentation.imagePicker + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import com.metacto.catalogapp.presentation.imagePicker.ImagePickerSamplesContract.Event +import com.metacto.catalogapp.presentation.imagePicker.components.ImagePickerSamplesContent +import com.metacto.catalogapp.presentation.base.BaseScreen +import com.metacto.core.ui.base.rememberViewModel + + class ImagePickerSamplesScreen : BaseScreen() { + @Composable + override fun Content() { + // Get the view model + val viewModel = rememberViewModel() + + // Init view model + LaunchedEffect(Unit) { + if (!viewModel.viewState.value.isInitialized) { + viewModel.setEvent(Event.Init) + } + } + + // Render content + ImagePickerSamplesContent( + state = viewModel.viewState.value, + onEvent = viewModel::setEvent + ) + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/imagePicker/ImagePickerSamplesViewModel.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/imagePicker/ImagePickerSamplesViewModel.kt new file mode 100644 index 00000000..ea5a1846 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/imagePicker/ImagePickerSamplesViewModel.kt @@ -0,0 +1,25 @@ +package com.metacto.catalogapp.presentation.imagePicker + +import com.metacto.catalogapp.presentation.base.BaseViewModel +import com.metacto.catalogapp.presentation.imagePicker.ImagePickerSamplesContract.Effect +import com.metacto.catalogapp.presentation.imagePicker.ImagePickerSamplesContract.Event +import com.metacto.catalogapp.presentation.imagePicker.ImagePickerSamplesContract.State + +class ImagePickerSamplesViewModel : BaseViewModel() { + + override fun setInitialState() = State() + + override fun handleEvents(event: Event): Any = when (event) { + Event.Init -> init() + } + + private fun init() { + // Validate if already initialized + if (currentState.isInitialized) return + + // Init + + // Update the flag + setState { copy(isInitialized = true) } + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/imagePicker/components/ImagePickerSamplesContent.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/imagePicker/components/ImagePickerSamplesContent.kt new file mode 100644 index 00000000..cec80b12 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/imagePicker/components/ImagePickerSamplesContent.kt @@ -0,0 +1,84 @@ +package com.metacto.catalogapp.presentation.imagePicker.components + +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import com.metacto.catalogapp.presentation.components.containers.AppScreenColumn +import com.metacto.catalogapp.presentation.imagePicker.ImagePickerSamplesContract.Event +import com.metacto.catalogapp.presentation.imagePicker.ImagePickerSamplesContract.State +import com.metacto.catalogapp.presentation.theme.spacings +import com.metacto.core.ui.components.buttons.PrimaryFilledButton +import com.metacto.core.ui.components.images.AppImage +import com.metacto.core.ui.imagepicker.sheet.ImagePickerSheet +import com.metacto.core.ui.imagepicker.sheet.models.ImagePickerResult +import com.metacto.core.ui.models.ImageUIModel +import com.metacto.core.ui.navigation.NavManager +import org.koin.compose.koinInject + +@Composable +internal fun ImagePickerSamplesContent( + state: State, + onEvent: (Event) -> Unit +) { + // Di + val navManager = koinInject() + + // state + var image by remember { mutableStateOf(ImageUIModel()) } + + // Observe result from ImagePickerSheet + LaunchedEffect(Unit) { + navManager.onNavResult { + when (it) { + is ImagePickerResult.ImagePicked -> { + image = image.copy( + bytes = it.bytes + ) + } + + ImagePickerResult.ImageDeleted -> { + image = ImageUIModel() + + } + + else -> {} + } + } + } + + // Container column + AppScreenColumn( + title = "ImagePicker", + isScrollable = true, + showToolbar = true, + showBack = true, + onBackClick = { + navManager.goBack() + }, + ) { + PrimaryFilledButton( + text = "Pick Image", + onClick = { + navManager.navigateToBottomSheet(ImagePickerSheet()) + }, + modifier = Modifier + .fillMaxWidth() + .padding(spacings.spacing16) + ) + AppImage( + image = image, + contentDescription = null, + modifier = Modifier + .size(spacings.spacing100) + .padding(spacings.spacing16) + ) + } +} + diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/imagePreloader/ImagePreloaderContract.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/imagePreloader/ImagePreloaderContract.kt new file mode 100644 index 00000000..ca23dd86 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/imagePreloader/ImagePreloaderContract.kt @@ -0,0 +1,18 @@ +package com.metacto.catalogapp.presentation.imagePreloader + +import com.metacto.core.ui.base.ViewEvent +import com.metacto.core.ui.base.ViewSideEffect +import com.metacto.core.ui.base.ViewState + +class ImagePreloaderContract { + + data class State( + val isInitialized: Boolean = false + ) : ViewState + + sealed class Event : ViewEvent { + data object Init : Event() + } + + sealed class Effect : ViewSideEffect +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/imagePreloader/ImagePreloaderScreen.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/imagePreloader/ImagePreloaderScreen.kt new file mode 100644 index 00000000..a5ac83f4 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/imagePreloader/ImagePreloaderScreen.kt @@ -0,0 +1,29 @@ +package com.metacto.catalogapp.presentation.imagePreloader + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import com.metacto.catalogapp.presentation.imagePreloader.ImagePreloaderContract.Event +import com.metacto.catalogapp.presentation.imagePreloader.components.ImagePreloaderContent +import com.metacto.catalogapp.presentation.base.BaseScreen +import com.metacto.core.ui.base.rememberViewModel + +internal class ImagePreloaderScreen : BaseScreen() { + @Composable + override fun Content() { + // Get the view model + val viewModel = rememberViewModel() + + // Init view model + LaunchedEffect(Unit) { + if (!viewModel.viewState.value.isInitialized) { + viewModel.setEvent(Event.Init) + } + } + + // Render content + ImagePreloaderContent( + state = viewModel.viewState.value, + onEvent = viewModel::setEvent + ) + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/imagePreloader/ImagePreloaderViewModel.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/imagePreloader/ImagePreloaderViewModel.kt new file mode 100644 index 00000000..5263c494 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/imagePreloader/ImagePreloaderViewModel.kt @@ -0,0 +1,25 @@ +package com.metacto.catalogapp.presentation.imagePreloader + +import com.metacto.catalogapp.presentation.base.BaseViewModel +import com.metacto.catalogapp.presentation.imagePreloader.ImagePreloaderContract.Effect +import com.metacto.catalogapp.presentation.imagePreloader.ImagePreloaderContract.Event +import com.metacto.catalogapp.presentation.imagePreloader.ImagePreloaderContract.State + +class ImagePreloaderViewModel : BaseViewModel() { + + override fun setInitialState() = State() + + override fun handleEvents(event: Event): Any = when (event) { + Event.Init -> init() + } + + private fun init() { + // Validate if already initialized + if (currentState.isInitialized) return + + // Init + + // Update the flag + setState { copy(isInitialized = true) } + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/imagePreloader/components/ImagePreloaderContent.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/imagePreloader/components/ImagePreloaderContent.kt new file mode 100644 index 00000000..13c1f5e6 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/imagePreloader/components/ImagePreloaderContent.kt @@ -0,0 +1,52 @@ +package com.metacto.catalogapp.presentation.imagePreloader.components + +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.ui.Modifier +import androidx.compose.ui.layout.ContentScale +import com.metacto.catalogapp.presentation.components.containers.AppScreenColumn +import com.metacto.catalogapp.presentation.imagePreloader.ImagePreloaderContract.Event +import com.metacto.catalogapp.presentation.imagePreloader.ImagePreloaderContract.State +import com.metacto.catalogapp.presentation.theme.spacings +import com.metacto.core.ui.components.images.AppImage +import com.metacto.core.ui.imagePreloader.IPreloader +import com.metacto.core.ui.navigation.NavManager +import org.koin.compose.koinInject + +@Composable +internal fun ImagePreloaderContent( + state: State, + onEvent: (Event) -> Unit +) { + // Di + val navManager = koinInject() + val imagePreloader = koinInject() + + // launch effect image preloader + LaunchedEffect(Unit) { + imagePreloader.preloadImages("https://gratisography.com/wp-content/uploads/2025/01/gratisography-dog-vacation-800x525.jpg") + } + + // Container column + AppScreenColumn( + title = "Image Preloader", + isScrollable = true, + showToolbar = true, + showBack = true, + onBackClick = { + navManager.goBack() + }, + ) { + + AppImage( + url = "https://gratisography.com/wp-content/uploads/2025/01/gratisography-dog-vacation-800x525.jpg", + contentScale = ContentScale.FillWidth, + modifier = Modifier + .fillMaxWidth() + .height(spacings.spacing300) + ) + + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/lottie/LottieContract.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/lottie/LottieContract.kt new file mode 100644 index 00000000..63c815d7 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/lottie/LottieContract.kt @@ -0,0 +1,18 @@ +package com.metacto.catalogapp.presentation.lottie + +import com.metacto.core.ui.base.ViewEvent +import com.metacto.core.ui.base.ViewSideEffect +import com.metacto.core.ui.base.ViewState + +class LottieContract { + + data class State( + val isInitialized: Boolean = false + ) : ViewState + + sealed class Event : ViewEvent { + data object Init : Event() + } + + sealed class Effect : ViewSideEffect +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/lottie/LottieScreen.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/lottie/LottieScreen.kt new file mode 100644 index 00000000..0c81077a --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/lottie/LottieScreen.kt @@ -0,0 +1,29 @@ +package com.metacto.catalogapp.presentation.lottie + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import com.metacto.catalogapp.presentation.lottie.LottieContract.Event +import com.metacto.catalogapp.presentation.lottie.components.LottieContent +import com.metacto.catalogapp.presentation.base.BaseScreen +import com.metacto.core.ui.base.rememberViewModel + +internal class LottieScreen : BaseScreen() { + @Composable + override fun Content() { + // Get the view model + val viewModel = rememberViewModel() + + // Init view model + LaunchedEffect(Unit) { + if (!viewModel.viewState.value.isInitialized) { + viewModel.setEvent(Event.Init) + } + } + + // Render content + LottieContent( + state = viewModel.viewState.value, + onEvent = viewModel::setEvent + ) + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/lottie/LottieViewModel.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/lottie/LottieViewModel.kt new file mode 100644 index 00000000..7c46452e --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/lottie/LottieViewModel.kt @@ -0,0 +1,25 @@ +package com.metacto.catalogapp.presentation.lottie + +import com.metacto.catalogapp.presentation.base.BaseViewModel +import com.metacto.catalogapp.presentation.lottie.LottieContract.Effect +import com.metacto.catalogapp.presentation.lottie.LottieContract.Event +import com.metacto.catalogapp.presentation.lottie.LottieContract.State + +class LottieViewModel : BaseViewModel() { + + override fun setInitialState() = State() + + override fun handleEvents(event: Event): Any = when (event) { + Event.Init -> init() + } + + private fun init() { + // Validate if already initialized + if (currentState.isInitialized) return + + // Init + + // Update the flag + setState { copy(isInitialized = true) } + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/lottie/components/LottieContent.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/lottie/components/LottieContent.kt new file mode 100644 index 00000000..30cca5de --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/lottie/components/LottieContent.kt @@ -0,0 +1,52 @@ +package com.metacto.catalogapp.presentation.lottie.components + +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.layout.ContentScale +import com.metacto.core.ui.navigation.NavManager +import com.metacto.catalogapp.presentation.components.containers.AppScreenColumn +import org.koin.compose.koinInject +import com.metacto.catalogapp.presentation.lottie.LottieContract.State +import com.metacto.catalogapp.presentation.lottie.LottieContract.Event +import com.metacto.catalogapp.resources.Res +import com.metacto.catalogapp.resources.file +import com.metacto.core.ui.extensions.rememberLottieComposition +import io.github.alexzhirkevich.compottie.LottieAnimation +import io.github.alexzhirkevich.compottie.LottieConstants +import io.github.alexzhirkevich.compottie.animateLottieCompositionAsState + +@Composable +internal fun LottieContent( + state: State, + onEvent: (Event) -> Unit +) { + // Di + val navManager = koinInject() + + // Prepare lottie composition + val composition by rememberLottieComposition(Res.file.people_lottie_anim) + val progress = animateLottieCompositionAsState( + composition = composition, + iterations = LottieConstants.IterateForever + ) + + // Container column + AppScreenColumn( + title = "Lottie", + isScrollable = true, + showToolbar = true, + showBack = true, + onBackClick = { + navManager.goBack() + }, + ) { + LottieAnimation( + composition = composition, + progress = { progress.value }, + contentScale = ContentScale.Crop, + modifier = Modifier.fillMaxSize() + ) + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/main/MainContract.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/main/MainContract.kt new file mode 100644 index 00000000..b2a506dd --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/main/MainContract.kt @@ -0,0 +1,17 @@ +package com.metacto.catalogapp.presentation.main + +import com.metacto.core.ui.base.ViewEvent +import com.metacto.core.ui.base.ViewSideEffect +import com.metacto.core.ui.base.ViewState + +class MainContract { + data class State( + val isInitialized: Boolean = false + ) : ViewState + + sealed class Event : ViewEvent { + data object Init : Event() + } + + sealed class Effect : ViewSideEffect +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/main/MainScreen.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/main/MainScreen.kt new file mode 100644 index 00000000..66a860b6 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/main/MainScreen.kt @@ -0,0 +1,30 @@ +package com.metacto.catalogapp.presentation.main + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import com.metacto.catalogapp.presentation.base.BaseScreen +import com.metacto.core.ui.base.rememberViewModel +import com.metacto.catalogapp.presentation.main.MainContract.Event +import com.metacto.catalogapp.presentation.main.components.MainContent + +internal class MainScreen : BaseScreen() { + + @Composable + override fun Content() { + // Get the view model + val viewModel = rememberViewModel() + + // Init view model + LaunchedEffect(Unit) { + if (!viewModel.viewState.value.isInitialized) { + viewModel.setEvent(Event.Init) + } + } + + // Render content + MainContent( + state = viewModel.viewState.value, + onEvent = viewModel::setEvent + ) + } +} \ No newline at end of file diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/main/MainViewModel.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/main/MainViewModel.kt new file mode 100644 index 00000000..8dd68e82 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/main/MainViewModel.kt @@ -0,0 +1,25 @@ +package com.metacto.catalogapp.presentation.main + +import com.metacto.catalogapp.presentation.base.BaseViewModel +import com.metacto.catalogapp.presentation.main.MainContract.Effect +import com.metacto.catalogapp.presentation.main.MainContract.Event +import com.metacto.catalogapp.presentation.main.MainContract.State + +class MainViewModel : BaseViewModel() { + + override fun setInitialState() = State() + + override fun handleEvents(event: Event): Any = when (event) { + Event.Init -> init() + } + + private fun init() { + // Validate if already initialized + if (currentState.isInitialized) return + + // Init + + // Update the flag + setState { copy(isInitialized = true) } + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/main/applepay/ApplePayContract.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/main/applepay/ApplePayContract.kt new file mode 100644 index 00000000..74690b26 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/main/applepay/ApplePayContract.kt @@ -0,0 +1,18 @@ +package com.metacto.catalogapp.presentation.main.applepay + +import com.metacto.core.ui.base.ViewEvent +import com.metacto.core.ui.base.ViewSideEffect +import com.metacto.core.ui.base.ViewState + +class ApplePayContract { + + data class State( + val isInitialized: Boolean = false + ) : ViewState + + sealed class Event : ViewEvent { + data object Init : Event() + } + + sealed class Effect : ViewSideEffect +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/main/applepay/ApplePayScreen.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/main/applepay/ApplePayScreen.kt new file mode 100644 index 00000000..8313a278 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/main/applepay/ApplePayScreen.kt @@ -0,0 +1,27 @@ +package com.metacto.catalogapp.presentation.main.applepay + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import com.metacto.catalogapp.presentation.main.applepay.ApplePayContract.Event +import com.metacto.catalogapp.presentation.main.applepay.components.ApplePayContent +import com.metacto.catalogapp.presentation.base.BaseScreen +import com.metacto.core.ui.base.rememberViewModel + +internal class ApplePayScreen : BaseScreen() { + @Composable + override fun Content() { + // Get the view model + val viewModel = rememberViewModel() + + // Init view model + LaunchedEffect(Unit) { + viewModel.setEvent(Event.Init) + } + + // Render content + ApplePayContent( + state = viewModel.viewState.value, + onEvent = viewModel::setEvent + ) + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/main/applepay/ApplePayViewModel.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/main/applepay/ApplePayViewModel.kt new file mode 100644 index 00000000..d6839211 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/main/applepay/ApplePayViewModel.kt @@ -0,0 +1,25 @@ +package com.metacto.catalogapp.presentation.main.applepay + +import com.metacto.catalogapp.presentation.base.BaseViewModel +import com.metacto.catalogapp.presentation.main.applepay.ApplePayContract.Effect +import com.metacto.catalogapp.presentation.main.applepay.ApplePayContract.Event +import com.metacto.catalogapp.presentation.main.applepay.ApplePayContract.State + +class ApplePayViewModel : BaseViewModel() { + + override fun setInitialState() = State() + + override fun handleEvents(event: Event): Any = when (event) { + Event.Init -> init() + } + + private fun init() { + // Validate if already initialized + if (currentState.isInitialized) return + + // Init + + // Update the flag + setState { copy(isInitialized = true) } + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/main/applepay/components/ApplePayButton.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/main/applepay/components/ApplePayButton.kt new file mode 100644 index 00000000..e01524ba --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/main/applepay/components/ApplePayButton.kt @@ -0,0 +1,10 @@ +package com.metacto.catalogapp.presentation.main.applepay.components + +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier + +@Composable +internal expect fun ApplePayButton( + modifier: Modifier = Modifier, + onClick: () -> Unit +) \ No newline at end of file diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/main/applepay/components/ApplePayContent.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/main/applepay/components/ApplePayContent.kt new file mode 100644 index 00000000..5cf6006e --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/main/applepay/components/ApplePayContent.kt @@ -0,0 +1,56 @@ +package com.metacto.catalogapp.presentation.main.applepay.components + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.width +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.metacto.catalogapp.presentation.app.globalState.IAppGlobalState +import com.metacto.catalogapp.presentation.components.containers.AppScreenColumn +import com.metacto.catalogapp.presentation.main.applepay.ApplePayContract.Event +import com.metacto.catalogapp.presentation.main.applepay.ApplePayContract.State +import com.metacto.catalogapp.presentation.theme.spacings +import com.metacto.core.ui.components.buttons.PrimaryFilledButton +import com.metacto.core.ui.navigation.NavManager +import com.metacto.core.ui.theme.CoreTheme +import org.koin.compose.koinInject + +@Composable +internal fun ApplePayContent( + state: State, + onEvent: (Event) -> Unit +) { + // Di + val navManager = koinInject() + val globalState = koinInject() + + // Container column + AppScreenColumn( + title = "ApplePay", + verticalArrangement = Arrangement.spacedBy(spacings.spacing16), + isScrollable = true, + showToolbar = true, + showBack = true, + onBackClick = { + navManager.goBack() + }, + ) { + PrimaryFilledButton( + text = "Normal Button", + modifier = Modifier.fillMaxWidth() + ) + + ApplePayButton( + onClick = { + globalState.showSuccess("Apple Pay button clicked") + }, + modifier = Modifier + .width(320.dp) + .height(CoreTheme.spacings.primaryFilledButton.minHeightNormal) + .align(Alignment.CenterHorizontally) + ) + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/main/components/MainContent.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/main/components/MainContent.kt new file mode 100644 index 00000000..972079fb --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/main/components/MainContent.kt @@ -0,0 +1,174 @@ +package com.metacto.catalogapp.presentation.main.components + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import com.metacto.catalogapp.presentation.customDialog.CustomDialogSamplesScreen +import com.metacto.catalogapp.presentation.dateConverter.DateConverterScreen +import com.metacto.catalogapp.presentation.datePicker.DatePickerScreen +import com.metacto.catalogapp.presentation.files.FilesSamplesScreen +import com.metacto.catalogapp.presentation.imagePicker.ImagePickerSamplesScreen +import com.metacto.catalogapp.presentation.imagePreloader.ImagePreloaderScreen +import com.metacto.catalogapp.presentation.lottie.LottieScreen +import com.metacto.catalogapp.presentation.main.MainContract.Event +import com.metacto.catalogapp.presentation.main.MainContract.State +import com.metacto.catalogapp.presentation.main.applepay.ApplePayScreen +import com.metacto.catalogapp.presentation.mediaPicker.MediaPickerScreen +import com.metacto.catalogapp.presentation.mediaManager.MediaManagerScreen +import com.metacto.catalogapp.presentation.navManager.NavManagerScreen +import com.metacto.catalogapp.presentation.notifications.NotificationsSamplesScreen +import com.metacto.catalogapp.presentation.phoneNumber.PhoneNumberScreen +import com.metacto.catalogapp.presentation.sheetSamples.SheetSamplesScreen +import com.metacto.catalogapp.presentation.theme.spacings +import com.metacto.core.ui.components.buttons.PrimaryFilledButton +import com.metacto.core.ui.components.containers.ScreenColumn +import com.metacto.core.ui.navigation.NavManager +import org.koin.compose.koinInject +import sp.bvantur.inspektify.ktor.InspektifyKtor + +@Composable +internal fun MainContent( + state: State, + onEvent: (Event) -> Unit +) { + // Di + val navManage = koinInject() + + ScreenColumn( + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy(spacings.spacing16), + isScrollable = true, + modifier = Modifier.fillMaxSize() + ) { + PrimaryFilledButton( + modifier = Modifier.fillMaxWidth(), + text = "Notification samples", + onClick = { + navManage.navigate(NotificationsSamplesScreen()) + } + ) + + PrimaryFilledButton( + text = "File samples", + onClick = { + navManage.navigate(FilesSamplesScreen()) + }, + modifier = Modifier.fillMaxWidth() + ) + + PrimaryFilledButton( + text = "Image picker samples", + onClick = { + navManage.navigate(ImagePickerSamplesScreen()) + }, + modifier = Modifier.fillMaxWidth() + ) + + PrimaryFilledButton( + text = "Media picker samples", + onClick = { + navManage.navigate(MediaPickerScreen()) + }, + modifier = Modifier.fillMaxWidth() + ) + + PrimaryFilledButton( + text = "Image Preloader sample", + onClick = { + navManage.navigate(ImagePreloaderScreen()) + }, + modifier = Modifier.fillMaxWidth() + ) + + PrimaryFilledButton( + text = "Media Manager samples", + onClick = { + navManage.navigate(MediaManagerScreen()) + }, + modifier = Modifier.fillMaxWidth() + ) + + PrimaryFilledButton( + text = "Date Picker samples", + onClick = { + navManage.navigate(DatePickerScreen()) + }, + modifier = Modifier.fillMaxWidth() + ) + + PrimaryFilledButton( + text = "Date Converter samples", + onClick = { + navManage.navigate(DateConverterScreen()) + }, + modifier = Modifier.fillMaxWidth() + ) + + PrimaryFilledButton( + text = "Phone Number samples", + onClick = { + navManage.navigate(PhoneNumberScreen()) + }, + modifier = Modifier.fillMaxWidth() + ) + + PrimaryFilledButton( + text = "Lottie samples", + onClick = { + navManage.navigate(LottieScreen()) + }, + modifier = Modifier.fillMaxWidth() + ) + + PrimaryFilledButton( + text = "NavManager samples", + onClick = { + navManage.navigate(NavManagerScreen()) + }, + modifier = Modifier.fillMaxWidth() + ) + + PrimaryFilledButton( + text = "Sheet samples", + onClick = { + navManage.navigate(SheetSamplesScreen()) + }, + modifier = Modifier.fillMaxWidth() + ) + + PrimaryFilledButton( + text = "Open Inspektify", + onClick = { + InspektifyKtor.startInspektify() + }, + modifier = Modifier.fillMaxWidth() + ) + + PrimaryFilledButton( + text = "Test Crash", + onClick = { + throw RuntimeException("Test crash for Firebase Crashlytics") + }, + modifier = Modifier.fillMaxWidth() + ) + + PrimaryFilledButton( + text = "Apple Pay samples", + onClick = { + navManage.navigate(ApplePayScreen()) + }, + modifier = Modifier.fillMaxWidth() + ) + + PrimaryFilledButton( + text = "Custom dialog samples", + onClick = { + navManage.navigate(CustomDialogSamplesScreen()) + }, + modifier = Modifier.fillMaxWidth() + ) + } +} \ No newline at end of file diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/mediaManager/MediaManagerContract.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/mediaManager/MediaManagerContract.kt new file mode 100644 index 00000000..dcaefe2f --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/mediaManager/MediaManagerContract.kt @@ -0,0 +1,18 @@ +package com.metacto.catalogapp.presentation.mediaManager + +import com.metacto.core.ui.base.ViewEvent +import com.metacto.core.ui.base.ViewSideEffect +import com.metacto.core.ui.base.ViewState + +class MediaManagerContract { + + data class State( + val isInitialized: Boolean = false + ) : ViewState + + sealed class Event : ViewEvent { + data object Init : Event() + } + + sealed class Effect : ViewSideEffect +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/mediaManager/MediaManagerScreen.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/mediaManager/MediaManagerScreen.kt new file mode 100644 index 00000000..99d394b5 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/mediaManager/MediaManagerScreen.kt @@ -0,0 +1,29 @@ +package com.metacto.catalogapp.presentation.mediaManager + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import com.metacto.catalogapp.presentation.mediaManager.MediaManagerContract.Event +import com.metacto.catalogapp.presentation.mediaManager.components.MediaManagerContent +import com.metacto.catalogapp.presentation.base.BaseScreen +import com.metacto.core.ui.base.rememberViewModel + +internal class MediaManagerScreen : BaseScreen() { + @Composable + override fun Content() { + // Get the view model + val viewModel = rememberViewModel() + + // Init view model + LaunchedEffect(Unit) { + if (!viewModel.viewState.value.isInitialized) { + viewModel.setEvent(Event.Init) + } + } + + // Render content + MediaManagerContent( + state = viewModel.viewState.value, + onEvent = viewModel::setEvent + ) + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/mediaManager/MediaManagerViewModel.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/mediaManager/MediaManagerViewModel.kt new file mode 100644 index 00000000..52e826dc --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/mediaManager/MediaManagerViewModel.kt @@ -0,0 +1,25 @@ +package com.metacto.catalogapp.presentation.mediaManager + +import com.metacto.catalogapp.presentation.base.BaseViewModel +import com.metacto.catalogapp.presentation.mediaManager.MediaManagerContract.Effect +import com.metacto.catalogapp.presentation.mediaManager.MediaManagerContract.Event +import com.metacto.catalogapp.presentation.mediaManager.MediaManagerContract.State + +class MediaManagerViewModel : BaseViewModel() { + + override fun setInitialState() = State() + + override fun handleEvents(event: Event): Any = when (event) { + Event.Init -> init() + } + + private fun init() { + // Validate if already initialized + if (currentState.isInitialized) return + + // Init + + // Update the flag + setState { copy(isInitialized = true) } + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/mediaManager/components/MediaManagerContent.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/mediaManager/components/MediaManagerContent.kt new file mode 100644 index 00000000..a6b23ca9 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/mediaManager/components/MediaManagerContent.kt @@ -0,0 +1,61 @@ +package com.metacto.catalogapp.presentation.mediaManager.components + +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.layout.ContentScale +import com.metacto.catalogapp.presentation.components.containers.AppScreenColumn +import com.metacto.catalogapp.presentation.mediaManager.MediaManagerContract.Event +import com.metacto.catalogapp.presentation.mediaManager.MediaManagerContract.State +import com.metacto.catalogapp.presentation.theme.spacings +import com.metacto.core.ui.components.images.AppImage +import com.metacto.core.ui.media.IMediaManager +import com.metacto.core.ui.models.ImageUIModel +import com.metacto.core.ui.navigation.NavManager +import org.koin.compose.koinInject + +@Composable +internal fun MediaManagerContent( + state: State, + onEvent: (Event) -> Unit +) { + // Di + val navManager = koinInject() + val mediaManager = koinInject() + + // State + var image by remember { mutableStateOf(ImageUIModel()) } + + LaunchedEffect(Unit) { + val videoPreview = + mediaManager.getVideoPreview("https://www.w3schools.com/html/mov_bbb.mp4") + image = image.copy(bytes = videoPreview) + } + // Container column + AppScreenColumn( + title = "Media Manager", + isScrollable = true, + showToolbar = true, + showBack = true, + onBackClick = { + navManager.goBack() + }, + ) { + + AppImage( + image = image, + contentScale = ContentScale.FillWidth, + modifier = Modifier + .fillMaxWidth() + .height(spacings.spacing300) + + ) + + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/mediaPicker/MediaPickerContract.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/mediaPicker/MediaPickerContract.kt new file mode 100644 index 00000000..02f5986a --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/mediaPicker/MediaPickerContract.kt @@ -0,0 +1,18 @@ +package com.metacto.catalogapp.presentation.mediaPicker + +import com.metacto.core.ui.base.ViewEvent +import com.metacto.core.ui.base.ViewSideEffect +import com.metacto.core.ui.base.ViewState + +class MediaPickerContract { + + data class State( + val isInitialized: Boolean = false, + ) : ViewState + + sealed class Event : ViewEvent { + data object Init : Event() + } + + sealed class Effect : ViewSideEffect +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/mediaPicker/MediaPickerScreen.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/mediaPicker/MediaPickerScreen.kt new file mode 100644 index 00000000..c693f40f --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/mediaPicker/MediaPickerScreen.kt @@ -0,0 +1,29 @@ +package com.metacto.catalogapp.presentation.mediaPicker + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import com.metacto.catalogapp.presentation.mediaPicker.MediaPickerContract.Event +import com.metacto.catalogapp.presentation.mediaPicker.components.MediaPickerContent +import com.metacto.catalogapp.presentation.base.BaseScreen +import com.metacto.core.ui.base.rememberViewModel + +internal class MediaPickerScreen : BaseScreen() { + @Composable + override fun Content() { + // Get the view model + val viewModel = rememberViewModel() + + // Init view model + LaunchedEffect(Unit) { + if (!viewModel.viewState.value.isInitialized) { + viewModel.setEvent(Event.Init) + } + } + + // Render content + MediaPickerContent( + state = viewModel.viewState.value, + onEvent = viewModel::setEvent + ) + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/mediaPicker/MediaPickerViewModel.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/mediaPicker/MediaPickerViewModel.kt new file mode 100644 index 00000000..71c51708 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/mediaPicker/MediaPickerViewModel.kt @@ -0,0 +1,25 @@ +package com.metacto.catalogapp.presentation.mediaPicker + +import com.metacto.catalogapp.presentation.base.BaseViewModel +import com.metacto.catalogapp.presentation.mediaPicker.MediaPickerContract.Effect +import com.metacto.catalogapp.presentation.mediaPicker.MediaPickerContract.Event +import com.metacto.catalogapp.presentation.mediaPicker.MediaPickerContract.State + +class MediaPickerViewModel : BaseViewModel() { + + override fun setInitialState() = State() + + override fun handleEvents(event: Event): Any = when (event) { + Event.Init -> init() + } + + private fun init() { + // Validate if already initialized + if (currentState.isInitialized) return + + // Init + + // Update the flag + setState { copy(isInitialized = true) } + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/mediaPicker/components/MediaPickerContent.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/mediaPicker/components/MediaPickerContent.kt new file mode 100644 index 00000000..41eb68cd --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/mediaPicker/components/MediaPickerContent.kt @@ -0,0 +1,201 @@ +package com.metacto.catalogapp.presentation.mediaPicker.components + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.size +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.unit.dp +import com.metacto.catalogapp.presentation.components.containers.AppScreenColumn +import com.metacto.catalogapp.presentation.mediaPicker.MediaPickerContract.Event +import com.metacto.catalogapp.presentation.mediaPicker.MediaPickerContract.State +import com.metacto.catalogapp.presentation.theme.spacings +import com.metacto.catalogapp.resources.Res +import com.metacto.catalogapp.resources.ic_star_filled +import com.metacto.core.files.IFileManager +import com.metacto.core.ui.components.buttons.PrimaryFilledButton +import com.metacto.core.ui.components.images.AppImage +import com.metacto.core.ui.extensions.rememberIOCoroutineScope +import com.metacto.core.ui.imagepicker.MediaInfo +import com.metacto.core.ui.imagepicker.MediaType +import com.metacto.core.ui.imagepicker.rememberMediaPicker +import com.metacto.core.ui.media.IMediaManager +import com.metacto.core.ui.models.ImageUIModel +import com.metacto.core.ui.navigation.NavManager +import kotlinx.coroutines.launch +import org.jetbrains.compose.resources.painterResource +import org.koin.compose.koinInject + +@Composable +internal fun MediaPickerContent( + state: State, + onEvent: (Event) -> Unit +) { + // Di + val navManager = koinInject() + val mediaManager = koinInject() + val fileManager = koinInject() + + // Media pickers with different configurations + val mediaPicker = rememberMediaPicker(includeData = false) + val mediaPickerWithCrop = rememberMediaPicker( + enableCropping = true, + aspectRatioX = 5, + aspectRatioY = 2, + includeData = false + ) + val mediaPickerSquareCrop = rememberMediaPicker( + enableCropping = true, + aspectRatioX = 1, + aspectRatioY = 1, + includeData = false + ) + val coroutineScope = rememberIOCoroutineScope() + + // States + var medias by remember { mutableStateOf(listOf()) } + var videoPreviews by remember { mutableStateOf(emptyMap()) } + + // Register pickers + mediaPicker.registerPicker { mediaInfo -> + medias = medias + mediaInfo + + if (mediaInfo.type == MediaType.Video) { + coroutineScope.launch { + val videoPreview = mediaManager.getVideoPreview(mediaInfo.filePath) + videoPreview?.let { preview -> + videoPreviews = videoPreviews + (mediaInfo.filePath to preview) + } + } + } + } + + mediaPickerWithCrop.registerPicker { mediaInfo -> + medias = medias + mediaInfo + } + + mediaPickerSquareCrop.registerPicker { mediaInfo -> + medias = medias + mediaInfo + } + + // Container column + AppScreenColumn( + verticalArrangement = Arrangement.spacedBy(spacings.spacing8), + title = "Media Picker", + isScrollable = true, + showToolbar = true, + showBack = true, + onBackClick = { + navManager.goBack() + }, + ) { + PrimaryFilledButton( + text = "Pick Image", + onClick = { + mediaPicker.pickFromGallery(listOf(MediaType.Image)) + }, + modifier = Modifier.fillMaxWidth() + ) + + PrimaryFilledButton( + text = "Pick Video", + onClick = { + mediaPicker.pickFromGallery(listOf(MediaType.Video)) + }, + modifier = Modifier.fillMaxWidth() + ) + + PrimaryFilledButton( + text = "Pick Image/Video", + onClick = { + mediaPicker.pickFromGallery(listOf(MediaType.Image, MediaType.Video)) + }, + modifier = Modifier.fillMaxWidth() + ) + + PrimaryFilledButton( + text = "Pick Image with 16:9 Crop", + onClick = { + mediaPickerWithCrop.pickFromGallery(listOf(MediaType.Image)) + }, + modifier = Modifier.fillMaxWidth() + ) + + PrimaryFilledButton( + text = "Pick Image with Square Crop (1:1)", + onClick = { + mediaPickerSquareCrop.pickFromGallery(listOf(MediaType.Image)) + }, + modifier = Modifier.fillMaxWidth() + ) + + PrimaryFilledButton( + text = "Capture from Camera", + onClick = { + mediaPicker.captureUsingCamera() + }, + modifier = Modifier.fillMaxWidth() + ) + + PrimaryFilledButton( + text = "Capture from Camera with Square Crop", + onClick = { + mediaPickerSquareCrop.captureUsingCamera() + }, + modifier = Modifier.fillMaxWidth() + ) + + PrimaryFilledButton( + text = "Fetch medias data", + onClick = { + coroutineScope.launch { + medias.forEach { media -> + try { + val bytes = fileManager.readFile(media.filePath) + println("Successfully read bytes for ${media.filePath}: ${bytes.size} bytes") + } catch (e: Throwable) { + println("Error reading file ${media.filePath}: ${e.message}") + } + } + } + }, + modifier = Modifier.fillMaxWidth() + ) + + PrimaryFilledButton( + text = "Clear All Media", + onClick = { + medias = emptyList() + videoPreviews = emptyMap() + }, + modifier = Modifier.fillMaxWidth() + ) + + medias.forEach { mediaInfo -> + when(mediaInfo.type) { + MediaType.Image -> { + AppImage( + image = ImageUIModel(filePath = mediaInfo.filePath), + placeholderPainter = painterResource(Res.drawable.ic_star_filled), + contentScale = ContentScale.Crop, + modifier = Modifier.size(150.dp) + ) + } + + MediaType.Video -> { + AppImage( + image = ImageUIModel(bytes = videoPreviews[mediaInfo.filePath]), + placeholderPainter = painterResource(Res.drawable.ic_star_filled), + contentScale = ContentScale.Crop, + modifier = Modifier.size(150.dp) + ) + } + } + } + } +} \ No newline at end of file diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/mediapicker/MediaPickerContract.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/mediapicker/MediaPickerContract.kt new file mode 100644 index 00000000..02f5986a --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/mediapicker/MediaPickerContract.kt @@ -0,0 +1,18 @@ +package com.metacto.catalogapp.presentation.mediaPicker + +import com.metacto.core.ui.base.ViewEvent +import com.metacto.core.ui.base.ViewSideEffect +import com.metacto.core.ui.base.ViewState + +class MediaPickerContract { + + data class State( + val isInitialized: Boolean = false, + ) : ViewState + + sealed class Event : ViewEvent { + data object Init : Event() + } + + sealed class Effect : ViewSideEffect +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/mediapicker/MediaPickerScreen.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/mediapicker/MediaPickerScreen.kt new file mode 100644 index 00000000..c693f40f --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/mediapicker/MediaPickerScreen.kt @@ -0,0 +1,29 @@ +package com.metacto.catalogapp.presentation.mediaPicker + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import com.metacto.catalogapp.presentation.mediaPicker.MediaPickerContract.Event +import com.metacto.catalogapp.presentation.mediaPicker.components.MediaPickerContent +import com.metacto.catalogapp.presentation.base.BaseScreen +import com.metacto.core.ui.base.rememberViewModel + +internal class MediaPickerScreen : BaseScreen() { + @Composable + override fun Content() { + // Get the view model + val viewModel = rememberViewModel() + + // Init view model + LaunchedEffect(Unit) { + if (!viewModel.viewState.value.isInitialized) { + viewModel.setEvent(Event.Init) + } + } + + // Render content + MediaPickerContent( + state = viewModel.viewState.value, + onEvent = viewModel::setEvent + ) + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/mediapicker/MediaPickerViewModel.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/mediapicker/MediaPickerViewModel.kt new file mode 100644 index 00000000..71c51708 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/mediapicker/MediaPickerViewModel.kt @@ -0,0 +1,25 @@ +package com.metacto.catalogapp.presentation.mediaPicker + +import com.metacto.catalogapp.presentation.base.BaseViewModel +import com.metacto.catalogapp.presentation.mediaPicker.MediaPickerContract.Effect +import com.metacto.catalogapp.presentation.mediaPicker.MediaPickerContract.Event +import com.metacto.catalogapp.presentation.mediaPicker.MediaPickerContract.State + +class MediaPickerViewModel : BaseViewModel() { + + override fun setInitialState() = State() + + override fun handleEvents(event: Event): Any = when (event) { + Event.Init -> init() + } + + private fun init() { + // Validate if already initialized + if (currentState.isInitialized) return + + // Init + + // Update the flag + setState { copy(isInitialized = true) } + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/navManager/NavManagerContract.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/navManager/NavManagerContract.kt new file mode 100644 index 00000000..e698ea5f --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/navManager/NavManagerContract.kt @@ -0,0 +1,18 @@ +package com.metacto.catalogapp.presentation.navManager + +import com.metacto.core.ui.base.ViewEvent +import com.metacto.core.ui.base.ViewSideEffect +import com.metacto.core.ui.base.ViewState + +class NavManagerContract { + + data class State( + val isInitialized: Boolean = false + ) : ViewState + + sealed class Event : ViewEvent { + data object Init : Event() + } + + sealed class Effect : ViewSideEffect +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/navManager/NavManagerScreen.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/navManager/NavManagerScreen.kt new file mode 100644 index 00000000..eafe0029 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/navManager/NavManagerScreen.kt @@ -0,0 +1,27 @@ +package com.metacto.catalogapp.presentation.navManager + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import com.metacto.catalogapp.presentation.base.BaseScreen +import com.metacto.catalogapp.presentation.navManager.NavManagerContract.Event +import com.metacto.catalogapp.presentation.navManager.components.NavManagerContent +import com.metacto.core.ui.base.rememberViewModel + +internal class NavManagerScreen : BaseScreen() { + @Composable + override fun Content() { + // Get the view model + val viewModel = rememberViewModel() + + // Init view model + LaunchedEffect(Unit) { + viewModel.setEvent(Event.Init) + } + + // Render content + NavManagerContent( + state = viewModel.viewState.value, + onEvent = viewModel::setEvent + ) + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/navManager/NavManagerViewModel.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/navManager/NavManagerViewModel.kt new file mode 100644 index 00000000..99babe31 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/navManager/NavManagerViewModel.kt @@ -0,0 +1,25 @@ +package com.metacto.catalogapp.presentation.navManager + +import com.metacto.catalogapp.presentation.base.BaseViewModel +import com.metacto.catalogapp.presentation.navManager.NavManagerContract.Effect +import com.metacto.catalogapp.presentation.navManager.NavManagerContract.Event +import com.metacto.catalogapp.presentation.navManager.NavManagerContract.State + +class NavManagerViewModel : BaseViewModel() { + + override fun setInitialState() = State() + + override fun handleEvents(event: Event): Any = when (event) { + Event.Init -> init() + } + + private fun init() { + // Validate if already initialized + if (currentState.isInitialized) return + + // Init + + // Update the flag + setState { copy(isInitialized = true) } + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/navManager/components/NavManagerContent.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/navManager/components/NavManagerContent.kt new file mode 100644 index 00000000..62d96b1f --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/navManager/components/NavManagerContent.kt @@ -0,0 +1,53 @@ +package com.metacto.catalogapp.presentation.navManager.components + +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.runtime.Composable +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.ui.Modifier +import com.metacto.catalogapp.presentation.app.globalState.IAppGlobalState +import com.metacto.core.ui.navigation.NavManager +import com.metacto.catalogapp.presentation.components.containers.AppScreenColumn +import org.koin.compose.koinInject +import com.metacto.catalogapp.presentation.navManager.NavManagerContract.State +import com.metacto.catalogapp.presentation.navManager.NavManagerContract.Event +import com.metacto.core.ui.components.buttons.PrimaryFilledButton +import kotlinx.coroutines.launch + +@Composable +internal fun NavManagerContent( + state: State, + onEvent: (Event) -> Unit +) { + // Di + val navManager = koinInject() + val globalState = koinInject() + val coroutineScope = rememberCoroutineScope() + + // Container column + AppScreenColumn( + title = "NavManager", + isScrollable = true, + showToolbar = true, + showBack = true, + onBackClick = { + navManager.goBack() + }, + ) { + PrimaryFilledButton( + text = "Get last screen", + onClick = { + coroutineScope.launch { + try { + val lastScreen = navManager.getLastScreen() + if (lastScreen != null) { + globalState.showSuccess("Last screen: ${lastScreen::class.simpleName}") + } + } catch (e: Throwable) { + globalState.showError(e.message.orEmpty()) + } + } + }, + modifier = Modifier.fillMaxWidth() + ) + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/notifications/NotificationsSamplesContract.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/notifications/NotificationsSamplesContract.kt new file mode 100644 index 00000000..31aaad4d --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/notifications/NotificationsSamplesContract.kt @@ -0,0 +1,18 @@ +package com.metacto.catalogapp.presentation.notifications + +import com.metacto.core.ui.base.ViewEvent +import com.metacto.core.ui.base.ViewSideEffect +import com.metacto.core.ui.base.ViewState + +class NotificationsSamplesContract { + + data class State( + val isInitialized: Boolean = false + ) : ViewState + + sealed class Event : ViewEvent { + data object Init : Event() + } + + sealed class Effect : ViewSideEffect +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/notifications/NotificationsSamplesScreen.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/notifications/NotificationsSamplesScreen.kt new file mode 100644 index 00000000..bfaea9a4 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/notifications/NotificationsSamplesScreen.kt @@ -0,0 +1,29 @@ +package com.metacto.catalogapp.presentation.notifications + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import com.metacto.catalogapp.presentation.notifications.NotificationsSamplesContract.Event +import com.metacto.catalogapp.presentation.notifications.components.NotificationsSamplesContent +import com.metacto.catalogapp.presentation.base.BaseScreen +import com.metacto.core.ui.base.rememberViewModel + +internal class NotificationsSamplesScreen : BaseScreen() { + @Composable + override fun Content() { + // Get the view model + val viewModel = rememberViewModel() + + // Init view model + LaunchedEffect(Unit) { + if (!viewModel.viewState.value.isInitialized) { + viewModel.setEvent(Event.Init) + } + } + + // Render content + NotificationsSamplesContent( + state = viewModel.viewState.value, + onEvent = viewModel::setEvent + ) + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/notifications/NotificationsSamplesViewModel.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/notifications/NotificationsSamplesViewModel.kt new file mode 100644 index 00000000..1cde5abc --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/notifications/NotificationsSamplesViewModel.kt @@ -0,0 +1,25 @@ +package com.metacto.catalogapp.presentation.notifications + +import com.metacto.catalogapp.presentation.base.BaseViewModel +import com.metacto.catalogapp.presentation.notifications.NotificationsSamplesContract.Effect +import com.metacto.catalogapp.presentation.notifications.NotificationsSamplesContract.Event +import com.metacto.catalogapp.presentation.notifications.NotificationsSamplesContract.State + +class NotificationsSamplesViewModel : BaseViewModel() { + + override fun setInitialState() = State() + + override fun handleEvents(event: Event): Any = when (event) { + Event.Init -> init() + } + + private fun init() { + // Validate if already initialized + if (currentState.isInitialized) return + + // Init + + // Update the flag + setState { copy(isInitialized = true) } + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/notifications/components/NotificationsSamplesContent.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/notifications/components/NotificationsSamplesContent.kt new file mode 100644 index 00000000..a288af20 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/notifications/components/NotificationsSamplesContent.kt @@ -0,0 +1,30 @@ +package com.metacto.catalogapp.presentation.notifications.components + +import androidx.compose.runtime.Composable +import com.metacto.core.ui.navigation.NavManager +import com.metacto.catalogapp.presentation.components.containers.AppScreenColumn +import com.metacto.catalogapp.presentation.notifications.NotificationsSamplesContract.Event +import com.metacto.catalogapp.presentation.notifications.NotificationsSamplesContract.State +import org.koin.compose.koinInject + +@Composable +internal fun NotificationsSamplesContent( + state: State, + onEvent: (Event) -> Unit +) { + // Di + val navManager = koinInject() + + // Container column + AppScreenColumn( + title = "Notifications", + isScrollable = true, + showToolbar = true, + showBack = true, + onBackClick = { + navManager.goBack() + }, + ) { + // TODO: Render content + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/phoneNumber/PhoneNumberContract.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/phoneNumber/PhoneNumberContract.kt new file mode 100644 index 00000000..63dc0654 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/phoneNumber/PhoneNumberContract.kt @@ -0,0 +1,18 @@ +package com.metacto.catalogapp.presentation.phoneNumber + +import com.metacto.core.ui.base.ViewEvent +import com.metacto.core.ui.base.ViewSideEffect +import com.metacto.core.ui.base.ViewState + +class PhoneNumberContract { + + data class State( + val isInitialized: Boolean = false + ) : ViewState + + sealed class Event : ViewEvent { + data object Init : Event() + } + + sealed class Effect : ViewSideEffect +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/phoneNumber/PhoneNumberScreen.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/phoneNumber/PhoneNumberScreen.kt new file mode 100644 index 00000000..15cd97ea --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/phoneNumber/PhoneNumberScreen.kt @@ -0,0 +1,29 @@ +package com.metacto.catalogapp.presentation.phoneNumber + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import com.metacto.catalogapp.presentation.phoneNumber.PhoneNumberContract.Event +import com.metacto.catalogapp.presentation.phoneNumber.components.PhoneNumberContent +import com.metacto.catalogapp.presentation.base.BaseScreen +import com.metacto.core.ui.base.rememberViewModel + +internal class PhoneNumberScreen : BaseScreen() { + @Composable + override fun Content() { + // Get the view model + val viewModel = rememberViewModel() + + // Init view model + LaunchedEffect(Unit) { + if (!viewModel.viewState.value.isInitialized) { + viewModel.setEvent(Event.Init) + } + } + + // Render content + PhoneNumberContent( + state = viewModel.viewState.value, + onEvent = viewModel::setEvent + ) + } +} \ No newline at end of file diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/phoneNumber/PhoneNumberViewModel.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/phoneNumber/PhoneNumberViewModel.kt new file mode 100644 index 00000000..6dedb50c --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/phoneNumber/PhoneNumberViewModel.kt @@ -0,0 +1,25 @@ +package com.metacto.catalogapp.presentation.phoneNumber + +import com.metacto.catalogapp.presentation.base.BaseViewModel +import com.metacto.catalogapp.presentation.phoneNumber.PhoneNumberContract.Effect +import com.metacto.catalogapp.presentation.phoneNumber.PhoneNumberContract.Event +import com.metacto.catalogapp.presentation.phoneNumber.PhoneNumberContract.State + +class PhoneNumberViewModel : BaseViewModel() { + + override fun setInitialState() = State() + + override fun handleEvents(event: Event): Any = when (event) { + Event.Init -> init() + } + + private fun init() { + // Validate if already initialized + if (currentState.isInitialized) return + + // Init + + // Update the flag + setState { copy(isInitialized = true) } + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/phoneNumber/components/PhoneNumberContent.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/phoneNumber/components/PhoneNumberContent.kt new file mode 100644 index 00000000..3f3cb5f1 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/phoneNumber/components/PhoneNumberContent.kt @@ -0,0 +1,152 @@ +package com.metacto.catalogapp.presentation.phoneNumber.components + +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +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.Modifier +import com.metacto.catalogapp.presentation.components.containers.AppScreenColumn +import com.metacto.catalogapp.presentation.phoneNumber.PhoneNumberContract.Event +import com.metacto.catalogapp.presentation.phoneNumber.PhoneNumberContract.State +import com.metacto.catalogapp.presentation.theme.spacings +import com.metacto.core.phone.IPhoneNumberManager +import com.metacto.core.ui.components.buttons.PrimaryFilledButton +import com.metacto.core.ui.components.inputFields.PrimaryTextInputField +import com.metacto.core.ui.navigation.NavManager +import com.metacto.core.ui.phone.PhoneNumberVisualTransformation +import com.metacto.core.ui.phone.rememberPhoneNumberUtil +import org.koin.compose.koinInject + +@Composable +internal fun PhoneNumberContent( + state: State, + onEvent: (Event) -> Unit +) { + // Di + val navManager = koinInject() + val phoneManager = koinInject() + + // states + var phoneNumber by remember { mutableStateOf("") } + var countryCode by remember { mutableStateOf("") } + var status by remember { mutableStateOf("") } + val phoneNumberUtil = rememberPhoneNumberUtil() + val phoneVisualTransformation = remember(countryCode) { + PhoneNumberVisualTransformation( + phoneNumberUtil = phoneNumberUtil, + countryCode = countryCode + ) + } + + // Container column + AppScreenColumn( + title = "Phone Number", + isScrollable = true, + showToolbar = true, + showBack = true, + onBackClick = { + navManager.goBack() + }, + ) { + + // Status + Text(text = status) + + // Phone number + PrimaryTextInputField( + text = phoneNumber, + label = "Phone Number", + onValueChange = { + phoneNumber = it + }, + modifier = Modifier + .fillMaxWidth() + .padding(top = spacings.spacing16) + ) + + // County code + PrimaryTextInputField( + text = countryCode, + label = "Country Code", + onValueChange = { + countryCode = it + }, + modifier = Modifier + .fillMaxWidth() + .padding(top = spacings.spacing24) + ) + + // Phone number with visual transformation + PrimaryTextInputField( + text = phoneNumber, + label = "Phone Number with visual transformation", + visualTransformation = phoneVisualTransformation, + onValueChange = { + phoneNumber = it + }, + modifier = Modifier + .fillMaxWidth() + .padding(top = spacings.spacing16) + ) + + // Check is valid phone number + PrimaryFilledButton( + text = "Check is valid phone number", + onClick = { + status = phoneManager.isValidPhoneNumber( + number = phoneNumber, + countryCode = countryCode + ).toString() + }, + modifier = Modifier + .fillMaxWidth() + .padding(top = spacings.spacing32) + ) + + // Get valid phone number + PrimaryFilledButton( + text = "Get valid phone number", + onClick = { + status = phoneManager.getValidPhoneNumber( + number = phoneNumber, + countryCode = countryCode + ).toString() + }, + modifier = Modifier + .fillMaxWidth() + .padding(top = spacings.spacing16) + ) + + // Get formatted phone number + PrimaryFilledButton( + text = "Get Formatted Phone Number", + onClick = { + status = phoneManager.getFormattedPhoneNumber( + number = phoneNumber, + countryCode = countryCode + ).toString() + }, + modifier = Modifier + .fillMaxWidth() + .padding(top = spacings.spacing16) + ) + + // Get E164 formatted phone number + PrimaryFilledButton( + text = "Get E164 Formatted Phone Number", + onClick = { + status = phoneManager.getE164FormattedPhoneNumber( + number = phoneNumber, + countryCode = countryCode + ).toString() + }, + modifier = Modifier + .fillMaxWidth() + .padding(top = spacings.spacing16) + ) + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/sheetSamples/SheetSamplesContract.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/sheetSamples/SheetSamplesContract.kt new file mode 100644 index 00000000..59ba40ce --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/sheetSamples/SheetSamplesContract.kt @@ -0,0 +1,20 @@ +package com.metacto.catalogapp.presentation.sheetSamples + +import com.metacto.core.ui.base.ViewEvent +import com.metacto.core.ui.base.ViewSideEffect +import com.metacto.core.ui.base.ViewState + +class SheetSamplesContract { + + data class State( + val isInitialized: Boolean = false, + val resultText: String = "" + ) : ViewState + + sealed class Event : ViewEvent { + data object Init : Event() + data class OnSheetResult(val result: String) : Event() + } + + sealed class Effect : ViewSideEffect +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/sheetSamples/SheetSamplesScreen.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/sheetSamples/SheetSamplesScreen.kt new file mode 100644 index 00000000..8ee14c37 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/sheetSamples/SheetSamplesScreen.kt @@ -0,0 +1,29 @@ +package com.metacto.catalogapp.presentation.sheetSamples + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import com.metacto.catalogapp.presentation.sheetSamples.SheetSamplesContract.Event +import com.metacto.catalogapp.presentation.sheetSamples.components.SheetSamplesContent +import com.metacto.catalogapp.presentation.base.BaseScreen +import com.metacto.core.ui.base.rememberViewModel + +internal class SheetSamplesScreen : BaseScreen() { + @Composable + override fun Content() { + // Get the view model + val viewModel = rememberViewModel() + + // Init view model + LaunchedEffect(Unit) { + if (!viewModel.viewState.value.isInitialized) { + viewModel.setEvent(Event.Init) + } + } + + // Render content + SheetSamplesContent( + state = viewModel.viewState.value, + onEvent = viewModel::setEvent + ) + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/sheetSamples/SheetSamplesViewModel.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/sheetSamples/SheetSamplesViewModel.kt new file mode 100644 index 00000000..f24617a5 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/sheetSamples/SheetSamplesViewModel.kt @@ -0,0 +1,30 @@ +package com.metacto.catalogapp.presentation.sheetSamples + +import com.metacto.catalogapp.presentation.base.BaseViewModel +import com.metacto.catalogapp.presentation.sheetSamples.SheetSamplesContract.Effect +import com.metacto.catalogapp.presentation.sheetSamples.SheetSamplesContract.Event +import com.metacto.catalogapp.presentation.sheetSamples.SheetSamplesContract.State + +class SheetSamplesViewModel : BaseViewModel() { + + override fun setInitialState() = State() + + override fun handleEvents(event: Event): Any = when (event) { + Event.Init -> init() + is Event.OnSheetResult -> onSheetResult(event.result) + } + + private fun init() { + // Validate if already initialized + if (currentState.isInitialized) return + + // Init + + // Update the flag + setState { copy(isInitialized = true) } + } + + private fun onSheetResult(result: String) { + setState { copy(resultText = result) } + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/sheetSamples/components/SheetSamplesContent.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/sheetSamples/components/SheetSamplesContent.kt new file mode 100644 index 00000000..5c86398f --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/sheetSamples/components/SheetSamplesContent.kt @@ -0,0 +1,121 @@ +package com.metacto.catalogapp.presentation.sheetSamples.components + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Card +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.metacto.catalogapp.presentation.components.containers.AppScreenColumn +import com.metacto.catalogapp.presentation.sheetSamples.SheetSamplesContract.Event +import com.metacto.catalogapp.presentation.sheetSamples.SheetSamplesContract.State +import com.metacto.catalogapp.presentation.sheetSamples.sheets.FormSheet +import com.metacto.catalogapp.presentation.sheetSamples.sheets.ListSheet +import com.metacto.catalogapp.presentation.sheetSamples.sheets.SimpleContentSheet +import com.metacto.catalogapp.presentation.theme.spacings +import com.metacto.core.ui.components.buttons.PrimaryFilledButton +import com.metacto.core.ui.navigation.NavManager +import org.koin.compose.koinInject + +@Composable +internal fun SheetSamplesContent( + state: State, + onEvent: (Event) -> Unit +) { + // Di + val navManager = koinInject() + + // Listen for sheet results + LaunchedEffect(Unit) { + navManager.onNavResult { result -> + onEvent(Event.OnSheetResult(result)) + } + } + + LaunchedEffect(Unit) { + navManager.onNavResult { result -> + onEvent(Event.OnSheetResult(result)) + } + } + + // Container column + AppScreenColumn( + verticalArrangement = Arrangement.spacedBy(spacings.spacing16), + title = "Sheet Samples", + isScrollable = true, + showToolbar = true, + showBack = true, + onBackClick = { + navManager.goBack() + }, + ) { + Text( + text = "Bottom sheets are great for showing additional content or actions without leaving the current screen.", + style = MaterialTheme.typography.bodyMedium, + modifier = Modifier.padding(bottom = spacings.spacing8) + ) + + PrimaryFilledButton( + text = "Show Simple Content Sheet", + onClick = { + navManager.navigateToBottomSheet(SimpleContentSheet()) + }, + modifier = Modifier.fillMaxWidth() + ) + + PrimaryFilledButton( + text = "Show Form Sheet", + onClick = { + navManager.navigateToBottomSheet(FormSheet()) + }, + modifier = Modifier.fillMaxWidth() + ) + + PrimaryFilledButton( + text = "Show List Sheet", + onClick = { + navManager.navigateToBottomSheet(ListSheet()) + }, + modifier = Modifier.fillMaxWidth() + ) + + // Show result if available + if (state.resultText.isNotEmpty()) { + Card( + modifier = Modifier + .fillMaxWidth() + .padding(top = spacings.spacing16), + elevation = CardDefaults.cardElevation(defaultElevation = 4.dp), + colors = CardDefaults.cardColors( + containerColor = MaterialTheme.colorScheme.primaryContainer + ) + ) { + Text( + text = "Sheet Result:", + style = MaterialTheme.typography.titleMedium, + color = MaterialTheme.colorScheme.onPrimaryContainer, + modifier = Modifier.padding( + start = spacings.spacing16, + end = spacings.spacing16, + top = spacings.spacing16, + bottom = spacings.spacing8 + ) + ) + Text( + text = state.resultText, + style = MaterialTheme.typography.bodyLarge, + modifier = Modifier.padding( + start = spacings.spacing16, + end = spacings.spacing16, + bottom = spacings.spacing16 + ) + ) + } + } + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/sheetSamples/sheets/FormSheet.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/sheetSamples/sheets/FormSheet.kt new file mode 100644 index 00000000..46d7a1b0 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/sheetSamples/sheets/FormSheet.kt @@ -0,0 +1,96 @@ +package com.metacto.catalogapp.presentation.sheetSamples.sheets + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.MaterialTheme +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.Modifier +import com.metacto.catalogapp.presentation.base.BaseSheet +import com.metacto.catalogapp.presentation.base.BaseViewModel +import com.metacto.catalogapp.presentation.theme.spacings +import com.metacto.core.ui.base.ViewEvent +import com.metacto.core.ui.base.ViewSideEffect +import com.metacto.core.ui.base.ViewState +import com.metacto.core.ui.base.rememberViewModel +import com.metacto.core.ui.components.buttons.PrimaryFilledButton +import com.metacto.core.ui.components.inputFields.PrimaryTextInputField +import com.metacto.core.ui.navigation.NavManager +import org.koin.compose.koinInject + +internal class FormSheet : BaseSheet() { + + @Composable + override fun Content() { + val navManager = koinInject() + val viewModel = rememberViewModel() + + var name by remember { mutableStateOf("") } + var email by remember { mutableStateOf("") } + + Column( + modifier = Modifier + .fillMaxWidth() + .padding(spacings.spacing24), + verticalArrangement = Arrangement.spacedBy(spacings.spacing16) + ) { + Text( + text = "Form Sheet Example", + style = MaterialTheme.typography.headlineSmall + ) + + Text( + text = "Fill out the form below", + style = MaterialTheme.typography.bodyMedium + ) + + PrimaryTextInputField( + text = name, + label = "Name", + onValueChange = { name = it }, + modifier = Modifier.fillMaxWidth() + ) + + PrimaryTextInputField( + text = email, + label = "Email", + onValueChange = { email = it }, + modifier = Modifier.fillMaxWidth() + ) + + PrimaryFilledButton( + text = "Submit", + onClick = { + navManager.goBackWithResult( + source = FormSheet::class.simpleName, + result = "Form submitted: Name=$name, Email=$email" + ) + }, + modifier = Modifier.fillMaxWidth() + ) + + PrimaryFilledButton( + text = "Cancel", + onClick = { + navManager.goBack() + }, + modifier = Modifier.fillMaxWidth() + ) + } + } + + internal class FormSheetViewModel : BaseViewModel() { + data class State(val dummy: Boolean = false) : ViewState + sealed class Event : ViewEvent + sealed class Effect : ViewSideEffect + + override fun setInitialState() = State() + override fun handleEvents(event: Event): Any = Unit + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/sheetSamples/sheets/ListSheet.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/sheetSamples/sheets/ListSheet.kt new file mode 100644 index 00000000..84acac43 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/sheetSamples/sheets/ListSheet.kt @@ -0,0 +1,89 @@ +package com.metacto.catalogapp.presentation.sheetSamples.sheets + +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.metacto.catalogapp.presentation.base.BaseSheet +import com.metacto.catalogapp.presentation.base.BaseViewModel +import com.metacto.catalogapp.presentation.theme.spacings +import com.metacto.core.ui.base.ViewEvent +import com.metacto.core.ui.base.ViewSideEffect +import com.metacto.core.ui.base.ViewState +import com.metacto.core.ui.base.rememberViewModel +import com.metacto.core.ui.navigation.NavManager +import org.koin.compose.koinInject + +internal class ListSheet : BaseSheet() { + + @Composable + override fun Content() { + val navManager = koinInject() + val viewModel = rememberViewModel() + + val items = listOf( + "Option 1" to "First option description", + "Option 2" to "Second option description", + "Option 3" to "Third option description", + "Option 4" to "Fourth option description", + "Option 5" to "Fifth option description" + ) + + Column( + modifier = Modifier + .fillMaxWidth() + .padding(spacings.spacing24) + ) { + Text( + text = "Select an Option", + style = MaterialTheme.typography.headlineSmall, + modifier = Modifier.padding(bottom = spacings.spacing16) + ) + + items.forEachIndexed { index, (title, description) -> + Column( + modifier = Modifier + .fillMaxWidth() + .clickable { + navManager.goBackWithResult( + source = ListSheet::class.simpleName, + result = "Selected: $title" + ) + } + .padding(vertical = spacings.spacing12), + verticalArrangement = Arrangement.spacedBy(4.dp) + ) { + Text( + text = title, + style = MaterialTheme.typography.titleMedium + ) + Text( + text = description, + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + + if (index < items.lastIndex) { + HorizontalDivider() + } + } + } + } + + internal class ListSheetViewModel : BaseViewModel() { + data class State(val dummy: Boolean = false) : ViewState + sealed class Event : ViewEvent + sealed class Effect : ViewSideEffect + + override fun setInitialState() = State() + override fun handleEvents(event: Event): Any = Unit + } +} diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/sheetSamples/sheets/SimpleContentSheet.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/sheetSamples/sheets/SimpleContentSheet.kt new file mode 100644 index 00000000..3bdba942 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/sheetSamples/sheets/SimpleContentSheet.kt @@ -0,0 +1,77 @@ +package com.metacto.catalogapp.presentation.sheetSamples.sheets + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.metacto.catalogapp.presentation.base.BaseSheet +import com.metacto.catalogapp.presentation.base.BaseViewModel +import com.metacto.catalogapp.presentation.theme.spacings +import com.metacto.core.ui.base.ViewEvent +import com.metacto.core.ui.base.ViewSideEffect +import com.metacto.core.ui.base.ViewState +import com.metacto.core.ui.base.rememberViewModel +import com.metacto.core.ui.components.buttons.PrimaryFilledButton +import com.metacto.core.ui.navigation.NavManager +import org.koin.compose.koinInject + +internal class SimpleContentSheet : BaseSheet() { + + @Composable + override fun Content() { + val navManager = koinInject() + val viewModel = rememberViewModel() + + Column( + modifier = Modifier + .fillMaxWidth() + .padding(spacings.spacing24), + verticalArrangement = Arrangement.spacedBy(spacings.spacing16) + ) { + Text( + text = "Simple Content Sheet", + style = MaterialTheme.typography.headlineSmall + ) + + Text( + text = "This is a simple sheet with some text content. You can add any composable content here.", + style = MaterialTheme.typography.bodyLarge + ) + + Text( + text = "Sheets are useful for:", + style = MaterialTheme.typography.titleMedium, + modifier = Modifier.padding(top = 8.dp) + ) + + Text( + text = "• Showing additional information\n• Quick forms or inputs\n• Action menus\n• Confirmation dialogs", + style = MaterialTheme.typography.bodyMedium + ) + + PrimaryFilledButton( + text = "Close Sheet", + onClick = { + navManager.goBack() + }, + modifier = Modifier + .fillMaxWidth() + .padding(top = spacings.spacing16) + ) + } + } + + internal class SimpleSheetViewModel : BaseViewModel() { + data class State(val dummy: Boolean = false) : ViewState + sealed class Event : ViewEvent + sealed class Effect : ViewSideEffect + + override fun setInitialState() = State() + override fun handleEvents(event: Event): Any = Unit + } +} diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/theme/Colors.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/theme/Colors.kt similarity index 97% rename from sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/theme/Colors.kt rename to samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/theme/Colors.kt index 5f7f0e3c..0faa6e6d 100644 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/theme/Colors.kt +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/theme/Colors.kt @@ -1,4 +1,4 @@ -package com.sampleApp.app.presentation.theme +package com.metacto.catalogapp.presentation.theme import androidx.compose.runtime.Immutable import androidx.compose.runtime.staticCompositionLocalOf diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/theme/Shapes.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/theme/Shapes.kt similarity index 96% rename from sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/theme/Shapes.kt rename to samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/theme/Shapes.kt index 2ce47abb..f75a1e65 100644 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/theme/Shapes.kt +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/theme/Shapes.kt @@ -1,4 +1,4 @@ -package com.sampleApp.app.presentation.theme +package com.metacto.catalogapp.presentation.theme import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/theme/Spacings.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/theme/Spacings.kt new file mode 100644 index 00000000..8bea4b34 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/theme/Spacings.kt @@ -0,0 +1,119 @@ +package com.metacto.catalogapp.presentation.theme + +import androidx.compose.runtime.Immutable +import androidx.compose.runtime.staticCompositionLocalOf +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.TextUnit +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp + +@Immutable +internal data class AppSpacings( + val spacing0: Dp = 0.dp, + val spacing1: Dp = 1.dp, + val spacing2: Dp = 2.dp, + val spacing3: Dp = 3.dp, + val spacing4: Dp = 4.dp, + val spacing5: Dp = 5.dp, + val spacing6: Dp = 6.dp, + val spacing7: Dp = 7.dp, + val spacing8: Dp = 8.dp, + val spacing9: Dp = 9.dp, + val spacing10: Dp = 10.dp, + val spacing12: Dp = 12.dp, + val spacing14: Dp = 14.dp, + val spacing16: Dp = 16.dp, + val spacing18: Dp = 18.dp, + val spacing20: Dp = 20.dp, + val spacing22: Dp = 22.dp, + val spacing24: Dp = 24.dp, + val spacing26: Dp = 26.dp, + val spacing28: Dp = 28.dp, + val spacing30: Dp = 30.dp, + val spacing32: Dp = 32.dp, + val spacing34: Dp = 34.dp, + val spacing36: Dp = 36.dp, + val spacing38: Dp = 38.dp, + val spacing40: Dp = 40.dp, + val spacing42: Dp = 42.dp, + val spacing44: Dp = 44.dp, + val spacing46: Dp = 46.dp, + val spacing48: Dp = 48.dp, + val spacing50: Dp = 50.dp, + val spacing52: Dp = 52.dp, + val spacing54: Dp = 54.dp, + val spacing56: Dp = 56.dp, + val spacing58: Dp = 58.dp, + val spacing60: Dp = 60.dp, + val spacing62: Dp = 62.dp, + val spacing64: Dp = 64.dp, + val spacing66: Dp = 66.dp, + val spacing68: Dp = 68.dp, + val spacing70: Dp = 70.dp, + val spacing72: Dp = 72.dp, + val spacing74: Dp = 74.dp, + val spacing76: Dp = 76.dp, + val spacing78: Dp = 78.dp, + val spacing80: Dp = 80.dp, + val spacing82: Dp = 82.dp, + val spacing84: Dp = 84.dp, + val spacing86: Dp = 86.dp, + val spacing88: Dp = 88.dp, + val spacing90: Dp = 90.dp, + val spacing92: Dp = 92.dp, + val spacing94: Dp = 94.dp, + val spacing96: Dp = 96.dp, + val spacing98: Dp = 98.dp, + val spacing100: Dp = 100.dp, + val spacing106: Dp = 106.dp, + val spacing112: Dp = 112.dp, + val spacing114: Dp = 114.dp, + val spacing120: Dp = 120.dp, + val spacing124: Dp = 124.dp, + val spacing132: Dp = 132.dp, + val spacing136: Dp = 136.dp, + val spacing144: Dp = 144.dp, + val spacing150: Dp = 150.dp, + val spacing154: Dp = 154.dp, + val spacing152: Dp = 152.dp, + val spacing164: Dp = 164.dp, + val spacing160: Dp = 160.dp, + val spacing176: Dp = 176.dp, + val spacing180: Dp = 180.dp, + val spacing192: Dp = 192.dp, + val spacing196: Dp = 196.dp, + val spacing200: Dp = 200.dp, + val spacing210: Dp = 210.dp, + val spacing216: Dp = 216.dp, + val spacing220: Dp = 220.dp, + val spacing224: Dp = 224.dp, + val spacing240: Dp = 240.dp, + val spacing260: Dp = 260.dp, + val spacing300: Dp = 300.dp, + val spacing342: Dp = 342.dp, + val spacing500: Dp = 500.dp, + val spacing550: Dp = 550.dp, + val spacing570: Dp = 570.dp, + val spacing600: Dp = 600.dp, + val spacing650: Dp = 650.dp, + val spacing700: Dp = 700.dp, + + val text10: TextUnit = 10.sp, + val text12: TextUnit = 12.sp, + val text14: TextUnit = 14.sp, + val text16: TextUnit = 16.sp, + val text18: TextUnit = 18.sp, + val text20: TextUnit = 20.sp, + val text22: TextUnit = 22.sp, + val text24: TextUnit = 24.sp, + val text26: TextUnit = 26.sp, + val text28: TextUnit = 28.sp, + val text30: TextUnit = 30.sp, + val text32: TextUnit = 32.sp, + val text34: TextUnit = 34.sp, + val text36: TextUnit = 36.sp, + + val bottomBarHeight: Dp = 72.dp +) + +internal val LocalAppSpacings = staticCompositionLocalOf { AppSpacings() } diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/theme/Theme.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/theme/Theme.kt similarity index 52% rename from sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/theme/Theme.kt rename to samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/theme/Theme.kt index 8b3a1d9f..46196e47 100644 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/theme/Theme.kt +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/theme/Theme.kt @@ -1,4 +1,4 @@ -package com.sampleApp.app.presentation.theme +package com.metacto.catalogapp.presentation.theme import androidx.compose.foundation.background import androidx.compose.material3.MaterialTheme @@ -14,38 +14,35 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.text.TextStyle import androidx.compose.ui.unit.LayoutDirection -import com.metacto.core.presentation.theme.CoreColors -import com.metacto.core.presentation.theme.CoreShapes -import com.metacto.core.presentation.theme.CoreSpacings -import com.metacto.core.presentation.theme.CoreTypography -import com.metacto.core.presentation.theme.LocalCoreColors -import com.metacto.core.presentation.theme.LocalCoreShapes -import com.metacto.core.presentation.theme.LocalCoreSpacings -import com.metacto.core.presentation.theme.LocalCoreTypography -import com.metacto.core.utils.language.ILanguageManager +import com.metacto.core.language.ILanguageManager +import com.metacto.core.ui.theme.CoreColors +import com.metacto.core.ui.theme.CoreShapes +import com.metacto.core.ui.theme.CoreSpacings +import com.metacto.core.ui.theme.LocalCoreColors +import com.metacto.core.ui.theme.LocalCoreShapes +import com.metacto.core.ui.theme.LocalCoreSpacings +import com.metacto.core.ui.theme.LocalCoreTypography import org.koin.compose.koinInject -internal object AppTheme { - val colors - @Composable - @ReadOnlyComposable - get() = LocalAppColors.current +internal val colors + @Composable + @ReadOnlyComposable + get() = LocalAppColors.current - val typography - @Composable - @ReadOnlyComposable - get() = LocalAppTypography.current +internal val typography + @Composable + @ReadOnlyComposable + get() = LocalAppTypography.current - val spacings - @Composable - @ReadOnlyComposable - get() = LocalAppSpacings.current +internal val spacings + @Composable + @ReadOnlyComposable + get() = LocalAppSpacings.current - val shapes - @Composable - @ReadOnlyComposable - get() = LocalAppShapes.current -} +internal val shapes + @Composable + @ReadOnlyComposable + get() = LocalAppShapes.current @Composable private fun ProvideTheme( @@ -59,20 +56,16 @@ private fun ProvideTheme( } // Get font families - val fenwickFontFamily = getFenwickFontFamily() val quasimodaFontFamily = getQuasimodaFontFamily() - // Create app & core typographies - val appTypography = remember(fenwickFontFamily, quasimodaFontFamily) { + // Create typographies + val appTypography = remember(quasimodaFontFamily) { AppTypography( - fenwick = TextStyle(fontFamily = fenwickFontFamily), - quasimoda = TextStyle(fontFamily = quasimodaFontFamily), + primary = Primary(TextStyle(fontFamily = quasimodaFontFamily)) ) } - val coreTypography = remember(fenwickFontFamily, quasimodaFontFamily) { - CoreTypography( - primary = TextStyle(fontFamily = quasimodaFontFamily) - ) + val coreTypography = remember(appTypography) { + appTypography.getCoreTypography() } // Create other app & core theme sets @@ -106,20 +99,20 @@ internal fun AppThemeContent( ) { // Create material color scheme val materialColorScheme = lightColorScheme( - primary = AppTheme.colors.nectarine, - onPrimary = AppTheme.colors.midnight, - primaryContainer = AppTheme.colors.miniPeach, - onPrimaryContainer = AppTheme.colors.midnight, - secondary = AppTheme.colors.midnight, - onSecondary = AppTheme.colors.white, - secondaryContainer = AppTheme.colors.lavender, - onSecondaryContainer = AppTheme.colors.midnight, - tertiary = AppTheme.colors.gray, - onTertiary = AppTheme.colors.white, - tertiaryContainer = AppTheme.colors.white, - onTertiaryContainer = AppTheme.colors.midnight, - background = AppTheme.colors.background, - surface = AppTheme.colors.background + primary = colors.nectarine, + onPrimary = colors.midnight, + primaryContainer = colors.miniPeach, + onPrimaryContainer = colors.midnight, + secondary = colors.midnight, + onSecondary = colors.white, + secondaryContainer = colors.lavender, + onSecondaryContainer = colors.midnight, + tertiary = colors.gray, + onTertiary = colors.white, + tertiaryContainer = colors.white, + onTertiaryContainer = colors.midnight, + background = colors.background, + surface = colors.background ) // Provide different theme then render material theme @@ -128,8 +121,8 @@ internal fun AppThemeContent( colorScheme = materialColorScheme ) { Scaffold( - containerColor = AppTheme.colors.background, - modifier = Modifier.background(AppTheme.colors.background) + containerColor = colors.background, + modifier = Modifier.background(colors.background) ) { content() } diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/theme/Typography.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/theme/Typography.kt new file mode 100644 index 00000000..92ebe33e --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/presentation/theme/Typography.kt @@ -0,0 +1,98 @@ +package com.metacto.catalogapp.presentation.theme + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.Immutable +import androidx.compose.runtime.staticCompositionLocalOf +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.sp +import com.metacto.core.ui.extensions.FontFamily +import com.metacto.core.ui.theme.CoreTypography +import com.metacto.catalogapp.resources.Res +import com.metacto.catalogapp.resources.quasimoda_black +import com.metacto.catalogapp.resources.quasimoda_bold +import com.metacto.catalogapp.resources.quasimoda_light +import com.metacto.catalogapp.resources.quasimoda_medium +import com.metacto.catalogapp.resources.quasimoda_regular +import com.metacto.catalogapp.resources.quasimoda_semibold +import com.metacto.catalogapp.resources.quasimoda_thin +import org.jetbrains.compose.resources.Font + + +// Define font families +@Composable +fun getQuasimodaFontFamily() = FontFamily( + Font(Res.font.quasimoda_black, FontWeight.Black), + Font(Res.font.quasimoda_bold, FontWeight.Bold), + Font(Res.font.quasimoda_semibold, FontWeight.SemiBold), + Font(Res.font.quasimoda_medium, FontWeight.Medium), + Font(Res.font.quasimoda_regular, FontWeight.Normal), + Font(Res.font.quasimoda_light, FontWeight.Light), + Font(Res.font.quasimoda_thin, FontWeight.Thin) +) + +@Immutable +data class Primary( + val base: TextStyle +) { + val black = FontSizes(base.copy(fontWeight = FontWeight.Black)) + val extraBold = FontSizes(base.copy(fontWeight = FontWeight.ExtraBold)) + val bold = FontSizes(base.copy(fontWeight = FontWeight.Bold)) + val semiBold = FontSizes(base.copy(fontWeight = FontWeight.SemiBold)) + val medium = FontSizes(base.copy(fontWeight = FontWeight.Medium)) + val regular = FontSizes(base.copy(fontWeight = FontWeight.Normal)) + val light = FontSizes(base.copy(fontWeight = FontWeight.Light)) + val thin = FontSizes(base.copy(fontWeight = FontWeight.Thin)) +} + +@Immutable +data class FontSizes( + val base: TextStyle +) { + val _8 = base.copy(fontSize = 8.sp) + val _10 = base.copy(fontSize = 10.sp) + val _12 = base.copy(fontSize = 12.sp) + val _14 = base.copy(fontSize = 14.sp) + val _16 = base.copy(fontSize = 16.sp) + val _18 = base.copy(fontSize = 18.sp) + val _20 = base.copy(fontSize = 20.sp) + val _22 = base.copy(fontSize = 22.sp) + val _24 = base.copy(fontSize = 24.sp) + val _26 = base.copy(fontSize = 26.sp) + val _28 = base.copy(fontSize = 28.sp) + val _32 = base.copy(fontSize = 32.sp) + val _40 = base.copy(fontSize = 40.sp) + val _72 = base.copy(fontSize = 72.sp) +} + +internal val LocalAppTypography = staticCompositionLocalOf { AppTypography() } + +// Create app typography +@Immutable +data class AppTypography( + val primary: Primary = Primary(TextStyle()) +) + +// Create core typography +internal fun AppTypography.getCoreTypography(): CoreTypography { + val coreTypography = CoreTypography() + + return coreTypography.copy( + primary = primary.base, + primaryFilledButton = coreTypography.primaryFilledButton.copy( + textStyle = primary.medium._16 + ), + tertiaryFilledButton = coreTypography.tertiaryFilledButton.copy( + textStyle = primary.medium._16 + ), + primaryStrokedButton = coreTypography.primaryStrokedButton.copy( + textStyle = primary.medium._16 + ), + primaryTextButton = coreTypography.primaryTextButton.copy( + textStyle = primary.medium._16 + ), + secondaryTextButton = coreTypography.secondaryTextButton.copy( + textStyle = primary.medium._16 + ) + ) +} \ No newline at end of file diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/resources/FileResource.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/resources/FileResource.kt similarity index 87% rename from sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/resources/FileResource.kt rename to samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/resources/FileResource.kt index 7c3cc5ab..63800ab5 100644 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/resources/FileResource.kt +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/resources/FileResource.kt @@ -1,9 +1,9 @@ -package com.sampleApp.app.resources +package com.metacto.catalogapp.resources import androidx.compose.runtime.Composable import androidx.compose.runtime.State import androidx.compose.runtime.produceState -import com.metacto.core.resources.IFileResource +import com.metacto.core.ui.resources.IFileResource import org.jetbrains.compose.resources.ExperimentalResourceApi internal data class FileResource( diff --git a/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/resources/FileResources.kt b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/resources/FileResources.kt new file mode 100644 index 00000000..74e07a35 --- /dev/null +++ b/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp/resources/FileResources.kt @@ -0,0 +1,14 @@ +package com.metacto.catalogapp.resources + +import com.metacto.core.ui.resources.IFileResource + +internal val Res.file: FileResources + get() = FileResources + +internal fun String.asFileResource(): IFileResource = FileResource(path = "files/$this") + +internal object FileResources { + val app_loading = "app_loading.json".asFileResource() + val intro_video = "intro_video.mp4".asFileResource() + val people_lottie_anim = "people_lottie_anim.json".asFileResource() +} \ No newline at end of file diff --git a/samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/MainViewController.kt b/samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/MainViewController.kt new file mode 100644 index 00000000..9c313409 --- /dev/null +++ b/samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/MainViewController.kt @@ -0,0 +1,49 @@ +package com.metacto.catalogapp + +import androidx.compose.runtime.DisposableEffect +import androidx.compose.ui.uikit.OnFocusBehavior +import androidx.compose.ui.window.ComposeUIViewController +import com.metacto.catalogapp.crash.CrashLogger +import com.metacto.catalogapp.presentation.app.app.AppContent +import kotlinx.cinterop.CPointer +import kotlinx.cinterop.ExperimentalForeignApi +import kotlinx.cinterop.staticCFunction +import org.koin.compose.koinInject +import platform.Foundation.NSSetUncaughtExceptionHandler +import platform.Foundation.NSUncaughtExceptionHandler +import kotlin.experimental.ExperimentalNativeApi + +private var crashLogger: CrashLogger? = null + +@OptIn(ExperimentalNativeApi::class) +fun MainViewController() = ComposeUIViewController( + configure = { + onFocusBehavior = OnFocusBehavior.DoNothing + }, + content = { + // Handle crashes + crashLogger = koinInject() + handleNSUncaughtException() + + // Render app content + AppContent() + + // Clear crash reporter when the view is disposed + DisposableEffect(Unit) { + onDispose { + crashLogger = null + } + } + } +) + +@OptIn(ExperimentalForeignApi::class) +private fun handleNSUncaughtException() { + val handler: CPointer = staticCFunction { nsException -> + val cause = Throwable(nsException?.reason) + crashLogger?.logException( + Throwable(message = nsException?.name, cause = cause) + ) + } + NSSetUncaughtExceptionHandler(handler) +} \ No newline at end of file diff --git a/samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/crash/CrashLogger.kt b/samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/crash/CrashLogger.kt new file mode 100644 index 00000000..83171abf --- /dev/null +++ b/samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/crash/CrashLogger.kt @@ -0,0 +1,12 @@ +package com.metacto.catalogapp.crash + +import kotlin.experimental.ExperimentalNativeApi + +@OptIn(ExperimentalNativeApi::class) +internal actual fun setupCrashHandler(onCrash: () -> Unit) { + // Handle crashes + setUnhandledExceptionHook { + onCrash.invoke() + terminateWithUnhandledException(it) + } +} \ No newline at end of file diff --git a/samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/di/DiProvider.kt b/samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/di/DiProvider.kt new file mode 100644 index 00000000..792375c1 --- /dev/null +++ b/samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/di/DiProvider.kt @@ -0,0 +1,13 @@ +package com.metacto.catalogapp.di + +import com.metacto.core.deepLink.IDeepLinkManager +import com.metacto.core.notifications.INotificationManager +import com.metacto.kmm.remoteconfig.common.RemoteConfigProvider +import org.koin.core.component.KoinComponent +import org.koin.core.component.inject + +object DiProvider : KoinComponent { + val notificationManager by inject() + val deepLinkManager by inject() + val remoteConfigs by inject() +} \ No newline at end of file diff --git a/samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/di/Koin.ios.kt b/samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/di/Koin.ios.kt new file mode 100644 index 00000000..40a1f1bc --- /dev/null +++ b/samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/di/Koin.ios.kt @@ -0,0 +1,20 @@ +package com.metacto.catalogapp.di + +import com.metacto.catalogapp.constants.AppEnvironment +import com.metacto.catalogapp.crash.FirebaseCrashlytics +import com.metacto.catalogapp.presentation.app.viewsFactory.IViewsFactory +import org.koin.core.context.startKoin + +fun initKoin( + environment: AppEnvironment, + viewsFactory: IViewsFactory, + firebaseCrashlytics: () -> FirebaseCrashlytics, +) = startKoin { + modules( + *getCommonModules(environment).toTypedArray(), + getPlatformModule( + viewsFactory = viewsFactory, + firebaseCrashlytics = firebaseCrashlytics, + ) + ) +} \ No newline at end of file diff --git a/samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/di/PlatformModule.kt b/samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/di/PlatformModule.kt new file mode 100644 index 00000000..2daf7715 --- /dev/null +++ b/samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/di/PlatformModule.kt @@ -0,0 +1,17 @@ +package com.metacto.catalogapp.di + +import com.metacto.catalogapp.crash.FirebaseCrashlytics +import com.metacto.catalogapp.permissions.PermissionDelegateFactory +import com.metacto.catalogapp.presentation.app.viewsFactory.IViewsFactory +import com.metacto.core.ui.permissions.helpers.IPermissionDelegateFactory +import org.koin.dsl.module + +internal fun getPlatformModule( + viewsFactory: IViewsFactory, + firebaseCrashlytics: () -> FirebaseCrashlytics, +) = module { + // Define iOS specific dependencies here + single { PermissionDelegateFactory() } + single { viewsFactory } + single { firebaseCrashlytics() } +} \ No newline at end of file diff --git a/sampleAppShared/src/iosMain/kotlin/com/sampleApp/app/permissions/AVCapturePermissionDelegate.kt b/samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/permissions/AVCapturePermissionDelegate.kt similarity index 86% rename from sampleAppShared/src/iosMain/kotlin/com/sampleApp/app/permissions/AVCapturePermissionDelegate.kt rename to samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/permissions/AVCapturePermissionDelegate.kt index 525701e1..07df8004 100644 --- a/sampleAppShared/src/iosMain/kotlin/com/sampleApp/app/permissions/AVCapturePermissionDelegate.kt +++ b/samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/permissions/AVCapturePermissionDelegate.kt @@ -1,10 +1,10 @@ -package com.sampleApp.app.permissions +package com.metacto.catalogapp.permissions -import com.metacto.core.permissions.enums.Permission -import com.metacto.core.permissions.enums.PermissionState -import com.metacto.core.permissions.exceptions.DeniedAlwaysException -import com.metacto.core.permissions.helpers.PermissionDelegate -import com.metacto.core.utils.extensions.mainContinuation +import com.metacto.core.extensions.mainContinuation +import com.metacto.core.ui.permissions.enums.Permission +import com.metacto.core.ui.permissions.enums.PermissionState +import com.metacto.core.ui.permissions.exceptions.DeniedAlwaysException +import com.metacto.core.ui.permissions.helpers.PermissionDelegate import platform.AVFoundation.AVAuthorizationStatus import platform.AVFoundation.AVAuthorizationStatusAuthorized import platform.AVFoundation.AVAuthorizationStatusDenied diff --git a/sampleAppShared/src/iosMain/kotlin/com/sampleApp/app/permissions/BluetoothPermissionDelegate.kt b/samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/permissions/BluetoothPermissionDelegate.kt similarity index 91% rename from sampleAppShared/src/iosMain/kotlin/com/sampleApp/app/permissions/BluetoothPermissionDelegate.kt rename to samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/permissions/BluetoothPermissionDelegate.kt index fb6ad61f..561b4157 100644 --- a/sampleAppShared/src/iosMain/kotlin/com/sampleApp/app/permissions/BluetoothPermissionDelegate.kt +++ b/samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/permissions/BluetoothPermissionDelegate.kt @@ -1,10 +1,10 @@ -package com.sampleApp.app.permissions +package com.metacto.catalogapp.permissions -import com.metacto.core.permissions.enums.Permission -import com.metacto.core.permissions.enums.PermissionState -import com.metacto.core.permissions.exceptions.DeniedAlwaysException -import com.metacto.core.permissions.exceptions.DeniedException -import com.metacto.core.permissions.helpers.PermissionDelegate +import com.metacto.core.ui.permissions.enums.Permission +import com.metacto.core.ui.permissions.enums.PermissionState +import com.metacto.core.ui.permissions.exceptions.DeniedAlwaysException +import com.metacto.core.ui.permissions.exceptions.DeniedException +import com.metacto.core.ui.permissions.helpers.PermissionDelegate import kotlinx.cinterop.ExperimentalForeignApi import platform.CoreBluetooth.CBCentralManager import platform.CoreBluetooth.CBCentralManagerDelegateProtocol diff --git a/sampleAppShared/src/iosMain/kotlin/com/sampleApp/app/permissions/ContactsPermissionDelegate.kt b/samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/permissions/ContactsPermissionDelegate.kt similarity index 88% rename from sampleAppShared/src/iosMain/kotlin/com/sampleApp/app/permissions/ContactsPermissionDelegate.kt rename to samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/permissions/ContactsPermissionDelegate.kt index 0181cc86..f5630eda 100644 --- a/sampleAppShared/src/iosMain/kotlin/com/sampleApp/app/permissions/ContactsPermissionDelegate.kt +++ b/samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/permissions/ContactsPermissionDelegate.kt @@ -1,9 +1,9 @@ -package com.sampleApp.app.permissions +package com.metacto.catalogapp.permissions -import com.metacto.core.permissions.enums.Permission -import com.metacto.core.permissions.enums.PermissionState -import com.metacto.core.permissions.exceptions.DeniedAlwaysException -import com.metacto.core.permissions.helpers.PermissionDelegate +import com.metacto.core.ui.permissions.enums.Permission +import com.metacto.core.ui.permissions.enums.PermissionState +import com.metacto.core.ui.permissions.exceptions.DeniedAlwaysException +import com.metacto.core.ui.permissions.helpers.PermissionDelegate import platform.Contacts.CNAuthorizationStatus import platform.Contacts.CNAuthorizationStatusAuthorized import platform.Contacts.CNAuthorizationStatusDenied diff --git a/sampleAppShared/src/iosMain/kotlin/com/sampleApp/app/permissions/GalleryPermissionDelegate.kt b/samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/permissions/GalleryPermissionDelegate.kt similarity index 83% rename from sampleAppShared/src/iosMain/kotlin/com/sampleApp/app/permissions/GalleryPermissionDelegate.kt rename to samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/permissions/GalleryPermissionDelegate.kt index d2ff4fcb..cdf08190 100644 --- a/sampleAppShared/src/iosMain/kotlin/com/sampleApp/app/permissions/GalleryPermissionDelegate.kt +++ b/samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/permissions/GalleryPermissionDelegate.kt @@ -1,10 +1,10 @@ -package com.sampleApp.app.permissions +package com.metacto.catalogapp.permissions -import com.metacto.core.permissions.enums.Permission -import com.metacto.core.permissions.enums.PermissionState -import com.metacto.core.permissions.exceptions.DeniedAlwaysException -import com.metacto.core.permissions.helpers.PermissionDelegate -import com.metacto.core.utils.extensions.mainContinuation +import com.metacto.core.extensions.mainContinuation +import com.metacto.core.ui.permissions.enums.Permission +import com.metacto.core.ui.permissions.enums.PermissionState +import com.metacto.core.ui.permissions.exceptions.DeniedAlwaysException +import com.metacto.core.ui.permissions.helpers.PermissionDelegate import platform.Photos.PHAuthorizationStatus import platform.Photos.PHAuthorizationStatusAuthorized import platform.Photos.PHAuthorizationStatusDenied diff --git a/sampleAppShared/src/iosMain/kotlin/com/sampleApp/app/permissions/LocationManagerDelegate.kt b/samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/permissions/LocationManagerDelegate.kt similarity index 95% rename from sampleAppShared/src/iosMain/kotlin/com/sampleApp/app/permissions/LocationManagerDelegate.kt rename to samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/permissions/LocationManagerDelegate.kt index 20fa9b46..f9d99590 100644 --- a/sampleAppShared/src/iosMain/kotlin/com/sampleApp/app/permissions/LocationManagerDelegate.kt +++ b/samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/permissions/LocationManagerDelegate.kt @@ -1,4 +1,4 @@ -package com.sampleApp.app.permissions +package com.metacto.catalogapp.permissions import platform.CoreLocation.CLAuthorizationStatus import platform.CoreLocation.CLLocationManager diff --git a/sampleAppShared/src/iosMain/kotlin/com/sampleApp/app/permissions/LocationPermissionDelegate.kt b/samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/permissions/LocationPermissionDelegate.kt similarity index 86% rename from sampleAppShared/src/iosMain/kotlin/com/sampleApp/app/permissions/LocationPermissionDelegate.kt rename to samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/permissions/LocationPermissionDelegate.kt index 3ffed981..6f9bd517 100644 --- a/sampleAppShared/src/iosMain/kotlin/com/sampleApp/app/permissions/LocationPermissionDelegate.kt +++ b/samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/permissions/LocationPermissionDelegate.kt @@ -1,9 +1,9 @@ -package com.sampleApp.app.permissions +package com.metacto.catalogapp.permissions -import com.metacto.core.permissions.enums.Permission -import com.metacto.core.permissions.enums.PermissionState -import com.metacto.core.permissions.exceptions.DeniedAlwaysException -import com.metacto.core.permissions.helpers.PermissionDelegate +import com.metacto.core.ui.permissions.enums.Permission +import com.metacto.core.ui.permissions.enums.PermissionState +import com.metacto.core.ui.permissions.exceptions.DeniedAlwaysException +import com.metacto.core.ui.permissions.helpers.PermissionDelegate import platform.CoreLocation.CLAuthorizationStatus import platform.CoreLocation.CLLocationManager import platform.CoreLocation.kCLAuthorizationStatusAuthorizedAlways diff --git a/sampleAppShared/src/iosMain/kotlin/com/sampleApp/app/permissions/MotionPermissionDelegate.kt b/samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/permissions/MotionPermissionDelegate.kt similarity index 85% rename from sampleAppShared/src/iosMain/kotlin/com/sampleApp/app/permissions/MotionPermissionDelegate.kt rename to samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/permissions/MotionPermissionDelegate.kt index a50ff733..e1349d1b 100644 --- a/sampleAppShared/src/iosMain/kotlin/com/sampleApp/app/permissions/MotionPermissionDelegate.kt +++ b/samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/permissions/MotionPermissionDelegate.kt @@ -1,7 +1,7 @@ -package com.sampleApp.app.permissions +package com.metacto.catalogapp.permissions -import com.metacto.core.permissions.enums.PermissionState -import com.metacto.core.permissions.helpers.PermissionDelegate +import com.metacto.core.ui.permissions.enums.PermissionState +import com.metacto.core.ui.permissions.helpers.PermissionDelegate import platform.CoreMotion.CMAuthorizationStatusAuthorized import platform.CoreMotion.CMAuthorizationStatusDenied import platform.CoreMotion.CMAuthorizationStatusNotDetermined @@ -27,7 +27,7 @@ internal class MotionPermissionDelegate : PermissionDelegate { return when (status) { CMAuthorizationStatusAuthorized, CMAuthorizationStatusRestricted, - -> PermissionState.Granted + -> PermissionState.Granted CMAuthorizationStatusDenied -> PermissionState.DeniedAlways CMAuthorizationStatusNotDetermined -> PermissionState.NotDetermined diff --git a/sampleAppShared/src/iosMain/kotlin/com/sampleApp/app/permissions/PermissionDelegateFactory.kt b/samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/permissions/PermissionDelegateFactory.kt similarity index 81% rename from sampleAppShared/src/iosMain/kotlin/com/sampleApp/app/permissions/PermissionDelegateFactory.kt rename to samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/permissions/PermissionDelegateFactory.kt index dd433940..498e82a8 100644 --- a/sampleAppShared/src/iosMain/kotlin/com/sampleApp/app/permissions/PermissionDelegateFactory.kt +++ b/samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/permissions/PermissionDelegateFactory.kt @@ -1,9 +1,9 @@ -package com.sampleApp.app.permissions +package com.metacto.catalogapp.permissions -import com.metacto.core.permissions.enums.Permission -import com.metacto.core.permissions.helpers.AlwaysGrantedPermissionDelegate -import com.metacto.core.permissions.helpers.IPermissionDelegateFactory -import com.metacto.core.permissions.helpers.PermissionDelegate +import com.metacto.core.ui.permissions.enums.Permission +import com.metacto.core.ui.permissions.helpers.AlwaysGrantedPermissionDelegate +import com.metacto.core.ui.permissions.helpers.IPermissionDelegateFactory +import com.metacto.core.ui.permissions.helpers.PermissionDelegate import platform.AVFoundation.AVMediaTypeAudio import platform.AVFoundation.AVMediaTypeVideo import platform.Contacts.CNContactStore @@ -45,8 +45,9 @@ class PermissionDelegateFactory : IPermissionDelegateFactory { Permission.REMOTE_NOTIFICATION -> RemoteNotificationPermissionDelegate() Permission.GALLERY -> GalleryPermissionDelegate() - Permission.STORAGE, Permission.WRITE_STORAGE -> AlwaysGrantedPermissionDelegate() Permission.MOTION -> MotionPermissionDelegate() + Permission.STORAGE, + Permission.WRITE_STORAGE, Permission.CALENDER -> AlwaysGrantedPermissionDelegate() } } diff --git a/sampleAppShared/src/iosMain/kotlin/com/sampleApp/app/permissions/RemoteNotificationPermissionDelegate.kt b/samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/permissions/RemoteNotificationPermissionDelegate.kt similarity index 91% rename from sampleAppShared/src/iosMain/kotlin/com/sampleApp/app/permissions/RemoteNotificationPermissionDelegate.kt rename to samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/permissions/RemoteNotificationPermissionDelegate.kt index f6f6da5c..2f47b86c 100644 --- a/sampleAppShared/src/iosMain/kotlin/com/sampleApp/app/permissions/RemoteNotificationPermissionDelegate.kt +++ b/samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/permissions/RemoteNotificationPermissionDelegate.kt @@ -1,10 +1,10 @@ -package com.sampleApp.app.permissions +package com.metacto.catalogapp.permissions -import com.metacto.core.permissions.enums.Permission -import com.metacto.core.permissions.enums.PermissionState -import com.metacto.core.permissions.exceptions.DeniedAlwaysException -import com.metacto.core.permissions.helpers.PermissionDelegate -import com.metacto.core.utils.extensions.mainContinuation +import com.metacto.core.extensions.mainContinuation +import com.metacto.core.ui.permissions.enums.Permission +import com.metacto.core.ui.permissions.enums.PermissionState +import com.metacto.core.ui.permissions.exceptions.DeniedAlwaysException +import com.metacto.core.ui.permissions.helpers.PermissionDelegate import platform.UserNotifications.UNAuthorizationOptionAlert import platform.UserNotifications.UNAuthorizationOptionBadge import platform.UserNotifications.UNAuthorizationOptionSound diff --git a/samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/presentation/app/viewsFactory/IViewsFactory.kt b/samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/presentation/app/viewsFactory/IViewsFactory.kt new file mode 100644 index 00000000..3be1e560 --- /dev/null +++ b/samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/presentation/app/viewsFactory/IViewsFactory.kt @@ -0,0 +1,9 @@ +package com.metacto.catalogapp.presentation.app.viewsFactory + +import platform.UIKit.UIView +import platform.UIKit.UIViewController + +interface IViewsFactory { + fun create(type: UIViewControllerType): UIViewController + fun create(type: UIViewType): UIView +} \ No newline at end of file diff --git a/samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/presentation/app/viewsFactory/UIViewControllerType.kt b/samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/presentation/app/viewsFactory/UIViewControllerType.kt new file mode 100644 index 00000000..ee766a77 --- /dev/null +++ b/samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/presentation/app/viewsFactory/UIViewControllerType.kt @@ -0,0 +1,5 @@ +package com.metacto.catalogapp.presentation.app.viewsFactory + +sealed class UIViewControllerType { + // Add custom view controller types here when needed +} \ No newline at end of file diff --git a/samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/presentation/app/viewsFactory/UIViewType.kt b/samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/presentation/app/viewsFactory/UIViewType.kt new file mode 100644 index 00000000..d6f98774 --- /dev/null +++ b/samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/presentation/app/viewsFactory/UIViewType.kt @@ -0,0 +1,8 @@ +package com.metacto.catalogapp.presentation.app.viewsFactory + +sealed class UIViewType { + // Add custom UI view types here when needed + class ApplePayButton( + val onClick: () -> Unit + ) : UIViewType() +} \ No newline at end of file diff --git a/samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/presentation/main/applepay/components/ApplePayButton.ios.kt b/samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/presentation/main/applepay/components/ApplePayButton.ios.kt new file mode 100644 index 00000000..05b023f2 --- /dev/null +++ b/samples/catalog-app-shared/src/iosMain/kotlin/com/metacto/catalogapp/presentation/main/applepay/components/ApplePayButton.ios.kt @@ -0,0 +1,36 @@ +package com.metacto.catalogapp.presentation.main.applepay.components + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.ExperimentalComposeUiApi +import androidx.compose.ui.Modifier +import androidx.compose.ui.viewinterop.UIKitInteropInteractionMode +import androidx.compose.ui.viewinterop.UIKitInteropProperties +import androidx.compose.ui.viewinterop.UIKitView +import com.metacto.catalogapp.presentation.app.viewsFactory.IViewsFactory +import com.metacto.catalogapp.presentation.app.viewsFactory.UIViewType +import org.koin.compose.koinInject + +@OptIn(ExperimentalComposeUiApi::class) +@Composable +internal actual fun ApplePayButton( + modifier: Modifier, + onClick: () -> Unit +) { + val viewsFactory = koinInject() + val uiView = remember { + viewsFactory.create( + UIViewType.ApplePayButton( + onClick = onClick + ) + ) + } + + UIKitView( + modifier = modifier, + factory = { uiView }, + properties = UIKitInteropProperties( + interactionMode = UIKitInteropInteractionMode.NonCooperative + ) + ) +} \ No newline at end of file diff --git a/iosApp/Configurations/Dev.xcconfig b/samples/catalog-ios-app/Configurations/Dev.xcconfig similarity index 73% rename from iosApp/Configurations/Dev.xcconfig rename to samples/catalog-ios-app/Configurations/Dev.xcconfig index 50b0b3a5..de569f37 100644 --- a/iosApp/Configurations/Dev.xcconfig +++ b/samples/catalog-ios-app/Configurations/Dev.xcconfig @@ -9,5 +9,5 @@ // Configuration settings file format documentation can be found at: // https://help.apple.com/xcode/#/dev745c5c974 -DISPLAY_NAME = SampleApp (Dev) -PRODUCT_BUNDLE_IDENTIFIER = com.sampleApp.app.dev +DISPLAY_NAME = CatalogApp (Dev) +PRODUCT_BUNDLE_IDENTIFIER = com.metacto.catalogapp.dev diff --git a/iosApp/Configurations/Prod.xcconfig b/samples/catalog-ios-app/Configurations/Prod.xcconfig similarity index 74% rename from iosApp/Configurations/Prod.xcconfig rename to samples/catalog-ios-app/Configurations/Prod.xcconfig index a64b594e..82dc6e92 100644 --- a/iosApp/Configurations/Prod.xcconfig +++ b/samples/catalog-ios-app/Configurations/Prod.xcconfig @@ -9,5 +9,5 @@ // Configuration settings file format documentation can be found at: // https://help.apple.com/xcode/#/dev745c5c974 -DISPLAY_NAME = SampleApp -PRODUCT_BUNDLE_IDENTIFIER = com.sampleApp.app.prod +DISPLAY_NAME = CatalogApp +PRODUCT_BUNDLE_IDENTIFIER = com.metacto.catalogapp.prod diff --git a/apns_key.p8 b/samples/catalog-ios-app/apns_key.p8 similarity index 100% rename from apns_key.p8 rename to samples/catalog-ios-app/apns_key.p8 diff --git a/iosApp/ci_scripts/ci_post_clone.sh b/samples/catalog-ios-app/ci_scripts/ci_post_clone.sh similarity index 100% rename from iosApp/ci_scripts/ci_post_clone.sh rename to samples/catalog-ios-app/ci_scripts/ci_post_clone.sh diff --git a/iosApp/ci_scripts/ci_post_xcodebuild.sh b/samples/catalog-ios-app/ci_scripts/ci_post_xcodebuild.sh similarity index 100% rename from iosApp/ci_scripts/ci_post_xcodebuild.sh rename to samples/catalog-ios-app/ci_scripts/ci_post_xcodebuild.sh diff --git a/samples/catalog-ios-app/iosApp.xcodeproj/project.pbxproj b/samples/catalog-ios-app/iosApp.xcodeproj/project.pbxproj new file mode 100644 index 00000000..0069de5b --- /dev/null +++ b/samples/catalog-ios-app/iosApp.xcodeproj/project.pbxproj @@ -0,0 +1,522 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + 058557BB273AAA24004C7B11 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 058557BA273AAA24004C7B11 /* Assets.xcassets */; }; + 058557D9273AAEEB004C7B11 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 058557D8273AAEEB004C7B11 /* Preview Assets.xcassets */; }; + 2152FB042600AC8F00CF470E /* iOSApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2152FB032600AC8F00CF470E /* iOSApp.swift */; }; + 6B325BAE2E93CBA800E580B8 /* ApplePayButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B325BAD2E93CBA300E580B8 /* ApplePayButton.swift */; }; + 6B438A682E4D2012009F3FC4 /* FirebaseCrashlyticsImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B438A662E4D2012009F3FC4 /* FirebaseCrashlyticsImpl.swift */; }; + 6B47EDD92E4C7C7C006FBC7A /* ViewsFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B47EDD42E4C7C7C006FBC7A /* ViewsFactory.swift */; }; + 6B47EDDB2E4C7C9A006FBC7A /* FirebaseCrashlytics in Frameworks */ = {isa = PBXBuildFile; productRef = 6B47EDDA2E4C7C9A006FBC7A /* FirebaseCrashlytics */; }; + 6BB0E4E62DC4AE2A0065FAA2 /* FirebaseMessaging in Frameworks */ = {isa = PBXBuildFile; productRef = 6BB0E4E52DC4AE2A0065FAA2 /* FirebaseMessaging */; }; + 6BB0E4E82DC4AFFC0065FAA2 /* DiProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BB0E4E72DC4AFF80065FAA2 /* DiProvider.swift */; }; + 6BFA2DB72DC49699004981FB /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BFA2DB62DC49697004981FB /* AppDelegate.swift */; }; + 6BFA2DBA2DC4AD22004981FB /* FirebaseMessaging in Frameworks */ = {isa = PBXBuildFile; productRef = 6BFA2DB92DC4AD22004981FB /* FirebaseMessaging */; }; + 7555FF83242A565900829871 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7555FF82242A565900829871 /* ContentView.swift */; }; + 8C78AE7D2B04F236003398E5 /* Launch Screen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8C78AE7C2B04F236003398E5 /* Launch Screen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 058557BA273AAA24004C7B11 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 058557D8273AAEEB004C7B11 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; + 2152FB032600AC8F00CF470E /* iOSApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = iOSApp.swift; sourceTree = ""; }; + 6B325BAD2E93CBA300E580B8 /* ApplePayButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApplePayButton.swift; sourceTree = ""; }; + 6B438A662E4D2012009F3FC4 /* FirebaseCrashlyticsImpl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FirebaseCrashlyticsImpl.swift; sourceTree = ""; }; + 6B47EDD42E4C7C7C006FBC7A /* ViewsFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewsFactory.swift; sourceTree = ""; }; + 6BB0E4E72DC4AFF80065FAA2 /* DiProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiProvider.swift; sourceTree = ""; }; + 6BFA2DB62DC49697004981FB /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7555FF7B242A565900829871 /* My Atlas - DEV.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "My Atlas - DEV.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 7555FF82242A565900829871 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; + 7555FF8C242A565B00829871 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 8C29F3452B04D35300A67CB1 /* Dev.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Dev.xcconfig; sourceTree = ""; }; + 8C29F3462B04D36600A67CB1 /* Prod.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Prod.xcconfig; sourceTree = ""; }; + 8C78AE7C2B04F236003398E5 /* Launch Screen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = "Launch Screen.storyboard"; sourceTree = ""; }; + 8C7A86E52B04DBBE0037F3D8 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; + 8C7A86E72B04DBF10037F3D8 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; + B47ACE555717B23986187489 /* Pods_iosApp.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_iosApp.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + CBBF6BC32A71787F00A56862 /* iosApp.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = iosApp.entitlements; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 93C54575B140DDC0BCCFD8F8 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 6B47EDDB2E4C7C9A006FBC7A /* FirebaseCrashlytics in Frameworks */, + 6BB0E4E62DC4AE2A0065FAA2 /* FirebaseMessaging in Frameworks */, + 6BFA2DBA2DC4AD22004981FB /* FirebaseMessaging in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 058557D7273AAEEB004C7B11 /* Preview Content */ = { + isa = PBXGroup; + children = ( + 058557D8273AAEEB004C7B11 /* Preview Assets.xcassets */, + ); + path = "Preview Content"; + sourceTree = ""; + }; + 6B438A672E4D2012009F3FC4 /* Crash */ = { + isa = PBXGroup; + children = ( + 6B438A662E4D2012009F3FC4 /* FirebaseCrashlyticsImpl.swift */, + ); + path = Crash; + sourceTree = ""; + }; + 6B47EDD52E4C7C7C006FBC7A /* CustomViews */ = { + isa = PBXGroup; + children = ( + 6B325BAD2E93CBA300E580B8 /* ApplePayButton.swift */, + 6B47EDD42E4C7C7C006FBC7A /* ViewsFactory.swift */, + ); + path = CustomViews; + sourceTree = ""; + }; + 7555FF72242A565900829871 = { + isa = PBXGroup; + children = ( + 8C29F3432B04D31800A67CB1 /* Configurations */, + 7555FF7D242A565900829871 /* iosApp */, + 7555FF7C242A565900829871 /* Products */, + 97ACDD949D232C2D6821387A /* Frameworks */, + ); + sourceTree = ""; + }; + 7555FF7C242A565900829871 /* Products */ = { + isa = PBXGroup; + children = ( + 7555FF7B242A565900829871 /* My Atlas - DEV.app */, + ); + name = Products; + sourceTree = ""; + }; + 7555FF7D242A565900829871 /* iosApp */ = { + isa = PBXGroup; + children = ( + 6B438A672E4D2012009F3FC4 /* Crash */, + 6B47EDD52E4C7C7C006FBC7A /* CustomViews */, + 8C29F3442B04D32C00A67CB1 /* Configuration */, + 8C78AE7B2B04F206003398E5 /* Resources */, + CBBF6BC32A71787F00A56862 /* iosApp.entitlements */, + 6BB0E4E72DC4AFF80065FAA2 /* DiProvider.swift */, + 6BFA2DB62DC49697004981FB /* AppDelegate.swift */, + 2152FB032600AC8F00CF470E /* iOSApp.swift */, + 7555FF82242A565900829871 /* ContentView.swift */, + 058557D7273AAEEB004C7B11 /* Preview Content */, + ); + path = iosApp; + sourceTree = ""; + }; + 8C29F3432B04D31800A67CB1 /* Configurations */ = { + isa = PBXGroup; + children = ( + 8C29F3452B04D35300A67CB1 /* Dev.xcconfig */, + 8C29F3462B04D36600A67CB1 /* Prod.xcconfig */, + ); + path = Configurations; + sourceTree = ""; + }; + 8C29F3442B04D32C00A67CB1 /* Configuration */ = { + isa = PBXGroup; + children = ( + 8C7A86E42B04DB620037F3D8 /* Dev */, + 8C7A86E32B04DB5B0037F3D8 /* Prod */, + 7555FF8C242A565B00829871 /* Info.plist */, + ); + path = Configuration; + sourceTree = ""; + }; + 8C78AE7B2B04F206003398E5 /* Resources */ = { + isa = PBXGroup; + children = ( + 058557BA273AAA24004C7B11 /* Assets.xcassets */, + 8C78AE7C2B04F236003398E5 /* Launch Screen.storyboard */, + ); + path = Resources; + sourceTree = ""; + }; + 8C7A86E32B04DB5B0037F3D8 /* Prod */ = { + isa = PBXGroup; + children = ( + 8C7A86E72B04DBF10037F3D8 /* GoogleService-Info.plist */, + ); + path = Prod; + sourceTree = ""; + }; + 8C7A86E42B04DB620037F3D8 /* Dev */ = { + isa = PBXGroup; + children = ( + 8C7A86E52B04DBBE0037F3D8 /* GoogleService-Info.plist */, + ); + path = Dev; + sourceTree = ""; + }; + 97ACDD949D232C2D6821387A /* Frameworks */ = { + isa = PBXGroup; + children = ( + B47ACE555717B23986187489 /* Pods_iosApp.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 7555FF7A242A565900829871 /* iosApp */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7555FFA5242A565B00829871 /* Build configuration list for PBXNativeTarget "iosApp" */; + buildPhases = ( + 6BFA2DB52DC495A8004981FB /* Compile Kotlin Framework */, + 7555FF77242A565900829871 /* Sources */, + 8C7A86E92B04DCD90037F3D8 /* Google Analytics Run Script */, + 7555FF79242A565900829871 /* Resources */, + 93C54575B140DDC0BCCFD8F8 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = iosApp; + productName = iosApp; + productReference = 7555FF7B242A565900829871 /* My Atlas - DEV.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 7555FF73242A565900829871 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1130; + LastUpgradeCheck = 1130; + ORGANIZATIONNAME = orgName; + TargetAttributes = { + 7555FF7A242A565900829871 = { + CreatedOnToolsVersion = 11.3.1; + }; + }; + }; + buildConfigurationList = 7555FF76242A565900829871 /* Build configuration list for PBXProject "iosApp" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 7555FF72242A565900829871; + packageReferences = ( + 6BB0E4E42DC4AE2A0065FAA2 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */, + ); + productRefGroup = 7555FF7C242A565900829871 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 7555FF7A242A565900829871 /* iosApp */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 7555FF79242A565900829871 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8C78AE7D2B04F236003398E5 /* Launch Screen.storyboard in Resources */, + 058557D9273AAEEB004C7B11 /* Preview Assets.xcassets in Resources */, + 058557BB273AAA24004C7B11 /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 6BFA2DB52DC495A8004981FB /* Compile Kotlin Framework */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Compile Kotlin Framework"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if [ \"YES\" = \"$OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED\" ]; then\n echo \"Skipping Gradle build task invocation due to OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED environment variable set to \\\"YES\\\"\"\n exit 0\nfi\ncd \"$SRCROOT/../..\"\n./gradlew :samples:catalog-app-shared:embedAndSignAppleFrameworkForXcode\n"; + }; + 8C7A86E92B04DCD90037F3D8 /* Google Analytics Run Script */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Google Analytics Run Script"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n# Name of the resource to copy\nINFO_PLIST_FILE=GoogleService-Info.plist\n\n# Get references to debug and production versions of the plist file\nDEVELOPMENT_INFO_PLIST_FILE=${PROJECT_DIR}/${TARGET_NAME}/Configuration/Dev/${INFO_PLIST_FILE}\nPRODUCTION_INFO_PLIST_FILE=${PROJECT_DIR}/${TARGET_NAME}/Configuration/Prod/${INFO_PLIST_FILE}\n\n# Make sure the debug version exists\necho \"Looking for ${INFO_PLIST_FILE} in ${DEVELOPMENT_INFO_PLIST_FILE}\"\nif [ ! -f $DEVELOPMENT_INFO_PLIST_FILE ] ; then\n echo \"File GoogleService-Info.plist (development) not found.\"\n exit 1\nfi\n\n# Make sure the production version exists\necho \"Looking for ${INFO_PLIST_FILE} in ${PRODUCTION_INFO_PLIST_FILE}\"\nif [ ! -f $PRODUCTION_INFO_PLIST_FILE ] ; then\n echo \"File GoogleService-Info.plist (production) not found.\"\n exit 1\nfi\n\n# Get a reference to the destination location for the plist file\nPLIST_DESTINATION=${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app\necho \"Copying ${INFO_PLIST_FILE} to final destination: ${PLIST_DESTINATION}\"\n\n# Copy the appropiate file to app bundle\nif [ \"${CONFIGURATION}\" == \"Debug\" ] \nthen\n echo \"File ${DEVELOPMENT_INFO_PLIST_FILE} copied\"\n cp \"${DEVELOPMENT_INFO_PLIST_FILE}\" \"${PLIST_DESTINATION}\"\nelse\n echo \"File ${PRODUCTION_INFO_PLIST_FILE} copied\"\n cp \"${PRODUCTION_INFO_PLIST_FILE}\" \"${PLIST_DESTINATION}\"\nfi\n"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 7555FF77242A565900829871 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6BFA2DB72DC49699004981FB /* AppDelegate.swift in Sources */, + 6B47EDD92E4C7C7C006FBC7A /* ViewsFactory.swift in Sources */, + 6B438A682E4D2012009F3FC4 /* FirebaseCrashlyticsImpl.swift in Sources */, + 2152FB042600AC8F00CF470E /* iOSApp.swift in Sources */, + 7555FF83242A565900829871 /* ContentView.swift in Sources */, + 6BB0E4E82DC4AFFC0065FAA2 /* DiProvider.swift in Sources */, + 6B325BAE2E93CBA800E580B8 /* ApplePayButton.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 7555FFA3242A565B00829871 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 8C29F3452B04D35300A67CB1 /* Dev.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = "My Atlas - DEV"; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 7555FFA4242A565B00829871 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 8C29F3462B04D36600A67CB1 /* Prod.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_NAME = "My Atlas"; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 7555FFA6242A565B00829871 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = iosApp/iosApp.entitlements; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_ASSET_PATHS = "\"iosApp/Preview Content\""; + DEVELOPMENT_TEAM = 6BKFZSVD59; + ENABLE_PREVIEWS = YES; + INFOPLIST_FILE = iosApp/Configuration/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + OTHER_LDFLAGS = "-Wl,-ld_classic"; + PRODUCT_NAME = "My Atlas - DEV"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 7555FFA7242A565B00829871 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = iosApp/iosApp.entitlements; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_ASSET_PATHS = "\"iosApp/Preview Content\""; + DEVELOPMENT_TEAM = 6BKFZSVD59; + ENABLE_PREVIEWS = YES; + INFOPLIST_FILE = iosApp/Configuration/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + OTHER_LDFLAGS = "-Wl,-ld_classic"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 7555FF76242A565900829871 /* Build configuration list for PBXProject "iosApp" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7555FFA3242A565B00829871 /* Debug */, + 7555FFA4242A565B00829871 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 7555FFA5242A565B00829871 /* Build configuration list for PBXNativeTarget "iosApp" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7555FFA6242A565B00829871 /* Debug */, + 7555FFA7242A565B00829871 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCRemoteSwiftPackageReference section */ + 6BB0E4E42DC4AE2A0065FAA2 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/firebase/firebase-ios-sdk.git"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 11.12.0; + }; + }; + 6BFA2DB82DC4AD22004981FB /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/firebase/firebase-ios-sdk.git"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 11.12.0; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 6B47EDDA2E4C7C9A006FBC7A /* FirebaseCrashlytics */ = { + isa = XCSwiftPackageProductDependency; + package = 6BB0E4E42DC4AE2A0065FAA2 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */; + productName = FirebaseCrashlytics; + }; + 6BB0E4E52DC4AE2A0065FAA2 /* FirebaseMessaging */ = { + isa = XCSwiftPackageProductDependency; + package = 6BB0E4E42DC4AE2A0065FAA2 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */; + productName = FirebaseMessaging; + }; + 6BFA2DB92DC4AD22004981FB /* FirebaseMessaging */ = { + isa = XCSwiftPackageProductDependency; + package = 6BFA2DB82DC4AD22004981FB /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */; + productName = FirebaseMessaging; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = 7555FF73242A565900829871 /* Project object */; +} diff --git a/samples/catalog-ios-app/iosApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/samples/catalog-ios-app/iosApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..919434a6 --- /dev/null +++ b/samples/catalog-ios-app/iosApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/samples/catalog-ios-app/iosApp.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/samples/catalog-ios-app/iosApp.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 00000000..eb5ef23b --- /dev/null +++ b/samples/catalog-ios-app/iosApp.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,123 @@ +{ + "originHash" : "a1569f9895aa2be8e24832f98525d5da4eb90b5d158a82691c15b47eb72a13d7", + "pins" : [ + { + "identity" : "abseil-cpp-binary", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/abseil-cpp-binary.git", + "state" : { + "revision" : "bbe8b69694d7873315fd3a4ad41efe043e1c07c5", + "version" : "1.2024072200.0" + } + }, + { + "identity" : "app-check", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/app-check.git", + "state" : { + "revision" : "61b85103a1aeed8218f17c794687781505fbbef5", + "version" : "11.2.0" + } + }, + { + "identity" : "firebase-ios-sdk", + "kind" : "remoteSourceControl", + "location" : "https://github.com/firebase/firebase-ios-sdk.git", + "state" : { + "revision" : "fbd463894af94d90eb4d6a4e54080459a8179519", + "version" : "11.12.0" + } + }, + { + "identity" : "googleappmeasurement", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GoogleAppMeasurement.git", + "state" : { + "revision" : "f7460ea630bddf172115c28493ae8b3798d95ce3", + "version" : "11.12.0" + } + }, + { + "identity" : "googledatatransport", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GoogleDataTransport.git", + "state" : { + "revision" : "617af071af9aa1d6a091d59a202910ac482128f9", + "version" : "10.1.0" + } + }, + { + "identity" : "googleutilities", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GoogleUtilities.git", + "state" : { + "revision" : "53156c7ec267db846e6b64c9f4c4e31ba4cf75eb", + "version" : "8.0.2" + } + }, + { + "identity" : "grpc-binary", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/grpc-binary.git", + "state" : { + "revision" : "cc0001a0cf963aa40501d9c2b181e7fc9fd8ec71", + "version" : "1.69.0" + } + }, + { + "identity" : "gtm-session-fetcher", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/gtm-session-fetcher.git", + "state" : { + "revision" : "4d70340d55d7d07cc2fdf8e8125c4c126c1d5f35", + "version" : "4.4.0" + } + }, + { + "identity" : "interop-ios-for-google-sdks", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/interop-ios-for-google-sdks.git", + "state" : { + "revision" : "040d087ac2267d2ddd4cca36c757d1c6a05fdbfe", + "version" : "101.0.0" + } + }, + { + "identity" : "leveldb", + "kind" : "remoteSourceControl", + "location" : "https://github.com/firebase/leveldb.git", + "state" : { + "revision" : "a0bc79961d7be727d258d33d5a6b2f1023270ba1", + "version" : "1.22.5" + } + }, + { + "identity" : "nanopb", + "kind" : "remoteSourceControl", + "location" : "https://github.com/firebase/nanopb.git", + "state" : { + "revision" : "b7e1104502eca3a213b46303391ca4d3bc8ddec1", + "version" : "2.30910.0" + } + }, + { + "identity" : "promises", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/promises.git", + "state" : { + "revision" : "540318ecedd63d883069ae7f1ed811a2df00b6ac", + "version" : "2.4.0" + } + }, + { + "identity" : "swift-protobuf", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-protobuf.git", + "state" : { + "revision" : "d72aed98f8253ec1aa9ea1141e28150f408cf17f", + "version" : "1.29.0" + } + } + ], + "version" : 3 +} diff --git a/iosApp/iosApp.xcodeproj/xcshareddata/xcschemes/My Atlas - Dev.xcscheme b/samples/catalog-ios-app/iosApp.xcodeproj/xcshareddata/xcschemes/My Atlas - Dev.xcscheme similarity index 100% rename from iosApp/iosApp.xcodeproj/xcshareddata/xcschemes/My Atlas - Dev.xcscheme rename to samples/catalog-ios-app/iosApp.xcodeproj/xcshareddata/xcschemes/My Atlas - Dev.xcscheme diff --git a/iosApp/iosApp.xcodeproj/xcshareddata/xcschemes/My Atlas.xcscheme b/samples/catalog-ios-app/iosApp.xcodeproj/xcshareddata/xcschemes/My Atlas.xcscheme similarity index 100% rename from iosApp/iosApp.xcodeproj/xcshareddata/xcschemes/My Atlas.xcscheme rename to samples/catalog-ios-app/iosApp.xcodeproj/xcshareddata/xcschemes/My Atlas.xcscheme diff --git a/samples/catalog-ios-app/iosApp/AppDelegate.swift b/samples/catalog-ios-app/iosApp/AppDelegate.swift new file mode 100644 index 00000000..188645fa --- /dev/null +++ b/samples/catalog-ios-app/iosApp/AppDelegate.swift @@ -0,0 +1,39 @@ +import SwiftUI +import AVFAudio +import appShared +import FirebaseMessaging + +class AppDelegate: NSObject, UIApplicationDelegate { + + func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil + ) -> Bool { + requestPIPBackgroundMode() + return true + } + + private func requestPIPBackgroundMode() { + let session = AVAudioSession.sharedInstance() + do { + try session.setCategory(.playback, mode: .moviePlayback) + } catch let error { + print(error.localizedDescription) + } + } + + func application( + _ application: UIApplication, + didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data + ) { + Messaging.messaging().apnsToken = deviceToken + } + + func application( + _ application: UIApplication, + didReceiveRemoteNotification userInfo: [AnyHashable : Any] + ) async -> UIBackgroundFetchResult { + DiProvider.notificationManager.onApplicationDidReceiveRemoteNotification(userInfo: userInfo) + return UIBackgroundFetchResult.newData + } +} diff --git a/iosApp/iosApp/Configuration/Dev/GoogleService-Info.plist b/samples/catalog-ios-app/iosApp/Configuration/Dev/GoogleService-Info.plist similarity index 82% rename from iosApp/iosApp/Configuration/Dev/GoogleService-Info.plist rename to samples/catalog-ios-app/iosApp/Configuration/Dev/GoogleService-Info.plist index 20545681..7597391f 100644 --- a/iosApp/iosApp/Configuration/Dev/GoogleService-Info.plist +++ b/samples/catalog-ios-app/iosApp/Configuration/Dev/GoogleService-Info.plist @@ -9,11 +9,11 @@ PLIST_VERSION 1 BUNDLE_ID - com.sampleApp.app.dev + com.metacto.catalogapp.dev PROJECT_ID metactosampleapp STORAGE_BUCKET - metactosampleapp.appspot.com + metactosampleapp.firebasestorage.app IS_ADS_ENABLED IS_ANALYTICS_ENABLED @@ -25,6 +25,6 @@ IS_SIGNIN_ENABLED GOOGLE_APP_ID - 1:211134116667:ios:9390105adbe9019f827d1e + 1:211134116667:ios:39b81c69fa571375827d1e \ No newline at end of file diff --git a/iosApp/iosApp/Configuration/Info.plist b/samples/catalog-ios-app/iosApp/Configuration/Info.plist similarity index 100% rename from iosApp/iosApp/Configuration/Info.plist rename to samples/catalog-ios-app/iosApp/Configuration/Info.plist diff --git a/samples/catalog-ios-app/iosApp/Configuration/Prod/GoogleService-Info.plist b/samples/catalog-ios-app/iosApp/Configuration/Prod/GoogleService-Info.plist new file mode 100644 index 00000000..a5488c5c --- /dev/null +++ b/samples/catalog-ios-app/iosApp/Configuration/Prod/GoogleService-Info.plist @@ -0,0 +1,30 @@ + + + + + API_KEY + AIzaSyDajYri8haLIsgotDqfbWTX3IoTIQHCON4 + GCM_SENDER_ID + 211134116667 + PLIST_VERSION + 1 + BUNDLE_ID + com.metacto.catalogapp.prod + PROJECT_ID + metactosampleapp + STORAGE_BUCKET + metactosampleapp.firebasestorage.app + IS_ADS_ENABLED + + IS_ANALYTICS_ENABLED + + IS_APPINVITE_ENABLED + + IS_GCM_ENABLED + + IS_SIGNIN_ENABLED + + GOOGLE_APP_ID + 1:211134116667:ios:f86b1fab684b7f91827d1e + + \ No newline at end of file diff --git a/samples/catalog-ios-app/iosApp/ContentView.swift b/samples/catalog-ios-app/iosApp/ContentView.swift new file mode 100644 index 00000000..be2d77a7 --- /dev/null +++ b/samples/catalog-ios-app/iosApp/ContentView.swift @@ -0,0 +1,16 @@ +import SwiftUI +import appShared + +struct ComposeView: UIViewControllerRepresentable { + func makeUIViewController(context: Context) -> UIViewController { + MainViewControllerKt.MainViewController() + } + + func updateUIViewController(_ uiViewController: UIViewController, context: Context) {} +} + +struct ContentView: View { + var body: some View { + ComposeView().ignoresSafeArea(.all) + } +} diff --git a/samples/catalog-ios-app/iosApp/Crash/FirebaseCrashlyticsImpl.swift b/samples/catalog-ios-app/iosApp/Crash/FirebaseCrashlyticsImpl.swift new file mode 100644 index 00000000..3eaddef7 --- /dev/null +++ b/samples/catalog-ios-app/iosApp/Crash/FirebaseCrashlyticsImpl.swift @@ -0,0 +1,38 @@ +// +// FirebaseCrashlyticsImpl.swift +// iosApp +// +// Created by Claude AI on 13/08/2025. +// Copyright © 2025 orgName. All rights reserved. +// + +import Foundation +import FirebaseCrashlytics +import appShared + +class FirebaseCrashlyticsImpl: FirebaseCrashlytics { + private let crashlytics = Crashlytics.crashlytics() + + func setCustomKey(key: String, value: String) { + crashlytics.setCustomValue(value, forKey: key) + } + + func setUserId(userId: String) { + crashlytics.setUserID(userId) + } + + func log(message: String) { + crashlytics.log(message) + } + + func recordException(exception: KotlinThrowable) { + let nsError = NSError( + domain: "com.metacto.catalogapp", + code: 0, + userInfo: [ + NSLocalizedDescriptionKey: exception.message ?? "Unknown error" + ] + ) + crashlytics.record(error: nsError) + } +} \ No newline at end of file diff --git a/samples/catalog-ios-app/iosApp/CustomViews/ApplePayButton.swift b/samples/catalog-ios-app/iosApp/CustomViews/ApplePayButton.swift new file mode 100644 index 00000000..1568127d --- /dev/null +++ b/samples/catalog-ios-app/iosApp/CustomViews/ApplePayButton.swift @@ -0,0 +1,50 @@ +// +// ApplePayButton.swift +// iosApp +// +// Created by Mahmoud Elshamy on 06/10/2025. +// Copyright © 2025 orgName. All rights reserved. +// + +import UIKit +import PassKit +import appShared + +final class ApplePayButton: UIView { + private var config: UIViewType.ApplePayButton? + private var paymentButton: PKPaymentButton! + + init(frame: CGRect, config: UIViewType.ApplePayButton) { + self.config = config + super.init(frame: frame) + setupButton() + } + + required init?(coder: NSCoder) { + super.init(coder: coder) + setupButton() + } + + private func setupButton() { + paymentButton = PKPaymentButton( + paymentButtonType: .continue, + paymentButtonStyle: .black + ) + + paymentButton.translatesAutoresizingMaskIntoConstraints = false + paymentButton.addTarget(self, action: #selector(handlePaymentButtonTapped), for: .touchUpInside) + + addSubview(paymentButton) + + NSLayoutConstraint.activate([ + paymentButton.topAnchor.constraint(equalTo: topAnchor), + paymentButton.leadingAnchor.constraint(equalTo: leadingAnchor), + paymentButton.trailingAnchor.constraint(equalTo: trailingAnchor), + paymentButton.bottomAnchor.constraint(equalTo: bottomAnchor) + ]) + } + + @objc private func handlePaymentButtonTapped() { + config?.onClick() + } +} diff --git a/samples/catalog-ios-app/iosApp/CustomViews/ViewsFactory.swift b/samples/catalog-ios-app/iosApp/CustomViews/ViewsFactory.swift new file mode 100644 index 00000000..d5568e2c --- /dev/null +++ b/samples/catalog-ios-app/iosApp/CustomViews/ViewsFactory.swift @@ -0,0 +1,25 @@ +import UIKit +import Foundation +import appShared + +public class ViewsFactory: NSObject, IViewsFactory { + + public func create(type: UIViewControllerType) -> UIViewController { + // Add implementations here when needed + return UIViewController() + } + + public func create(type_ type: UIViewType) -> UIView { + switch type { + case is UIViewType.ApplePayButton: + return ApplePayButton( + frame: .zero, + config: type as! UIViewType.ApplePayButton + ) + + + default: + return UIView() + } + } +} diff --git a/samples/catalog-ios-app/iosApp/DiProvider.swift b/samples/catalog-ios-app/iosApp/DiProvider.swift new file mode 100644 index 00000000..e6682585 --- /dev/null +++ b/samples/catalog-ios-app/iosApp/DiProvider.swift @@ -0,0 +1,11 @@ +// +// DiProvider.swift +// iosApp +// +// Created by Mahmoud Elshamy on 02/05/2025. +// Copyright © 2025 orgName. All rights reserved. +// + +import appShared + +let DiProvider = appShared.DiProvider.shared diff --git a/iosApp/iosApp/Preview Content/Preview Assets.xcassets/Contents.json b/samples/catalog-ios-app/iosApp/Preview Content/Preview Assets.xcassets/Contents.json similarity index 100% rename from iosApp/iosApp/Preview Content/Preview Assets.xcassets/Contents.json rename to samples/catalog-ios-app/iosApp/Preview Content/Preview Assets.xcassets/Contents.json diff --git a/iosApp/iosApp/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon.png b/samples/catalog-ios-app/iosApp/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon.png similarity index 100% rename from iosApp/iosApp/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon.png rename to samples/catalog-ios-app/iosApp/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon.png diff --git a/iosApp/iosApp/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json b/samples/catalog-ios-app/iosApp/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from iosApp/iosApp/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json rename to samples/catalog-ios-app/iosApp/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json diff --git a/iosApp/iosApp/Resources/Assets.xcassets/Contents.json b/samples/catalog-ios-app/iosApp/Resources/Assets.xcassets/Contents.json similarity index 100% rename from iosApp/iosApp/Resources/Assets.xcassets/Contents.json rename to samples/catalog-ios-app/iosApp/Resources/Assets.xcassets/Contents.json diff --git a/iosApp/iosApp/Resources/Assets.xcassets/splashLogo.imageset/Contents.json b/samples/catalog-ios-app/iosApp/Resources/Assets.xcassets/splashLogo.imageset/Contents.json similarity index 100% rename from iosApp/iosApp/Resources/Assets.xcassets/splashLogo.imageset/Contents.json rename to samples/catalog-ios-app/iosApp/Resources/Assets.xcassets/splashLogo.imageset/Contents.json diff --git a/iosApp/iosApp/Resources/Assets.xcassets/splashLogo.imageset/MicrosoftTeams-image (18).png b/samples/catalog-ios-app/iosApp/Resources/Assets.xcassets/splashLogo.imageset/MicrosoftTeams-image (18).png similarity index 100% rename from iosApp/iosApp/Resources/Assets.xcassets/splashLogo.imageset/MicrosoftTeams-image (18).png rename to samples/catalog-ios-app/iosApp/Resources/Assets.xcassets/splashLogo.imageset/MicrosoftTeams-image (18).png diff --git a/iosApp/iosApp/Resources/Launch Screen.storyboard b/samples/catalog-ios-app/iosApp/Resources/Launch Screen.storyboard similarity index 100% rename from iosApp/iosApp/Resources/Launch Screen.storyboard rename to samples/catalog-ios-app/iosApp/Resources/Launch Screen.storyboard diff --git a/samples/catalog-ios-app/iosApp/iOSApp.swift b/samples/catalog-ios-app/iosApp/iOSApp.swift new file mode 100644 index 00000000..9c5d26f8 --- /dev/null +++ b/samples/catalog-ios-app/iosApp/iOSApp.swift @@ -0,0 +1,38 @@ +import SwiftUI +import appShared + +@main +struct iOSApp: App { + @UIApplicationDelegateAdaptor(AppDelegate.self) private var appDelegate: AppDelegate + + init() { + // Prepare environment + var environment: AppEnvironment + #if DEBUG + environment = AppEnvironment.Dev() + #else + environment = AppEnvironment.Prod() + #endif + + Koin_iosKt.doInitKoin( + environment: environment, + viewsFactory: ViewsFactory(), + firebaseCrashlytics: { () -> FirebaseCrashlytics in + return FirebaseCrashlyticsImpl() + } + ) + } + + var body: some Scene { + WindowGroup { + ContentView() + .onOpenURL { url in + DiProvider.deepLinkManager.emitDeepLink(link: url.absoluteString) + }.onContinueUserActivity(NSUserActivityTypeBrowsingWeb) { activity in + if let url = activity.webpageURL?.absoluteString { + DiProvider.deepLinkManager.emitDeepLink(link: url) + } + } + } + } +} diff --git a/iosApp/iosApp/iosApp.entitlements b/samples/catalog-ios-app/iosApp/iosApp.entitlements similarity index 100% rename from iosApp/iosApp/iosApp.entitlements rename to samples/catalog-ios-app/iosApp/iosApp.entitlements diff --git a/samples/playground-app-shared/build.gradle.kts b/samples/playground-app-shared/build.gradle.kts new file mode 100644 index 00000000..b7c004c3 --- /dev/null +++ b/samples/playground-app-shared/build.gradle.kts @@ -0,0 +1,151 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget +import org.jetbrains.kotlin.gradle.plugin.mpp.apple.XCFramework + +plugins { + alias(libs.plugins.multiplatform) + alias(libs.plugins.android.application) + alias(libs.plugins.kotlin.parcelize) + alias(libs.plugins.compose) + alias(libs.plugins.kotlin.compose) + alias(libs.plugins.kotlin.serialization) + alias(libs.plugins.firebase.crashlytics) +} + +kotlin { + androidTarget { + compilerOptions { + jvmTarget.value(JvmTarget.JVM_17) + freeCompilerArgs.addAll("-P", "plugin:org.jetbrains.kotlin.parcelize:additionalAnnotation=com.metacto.kmm.core.CommonParcelize") + } + compilations.all { + kotlinOptions { + jvmTarget = libs.versions.jvm.get() + } + } + } + + val xcf = XCFramework() + listOf( + iosX64(), + iosArm64(), + iosSimulatorArm64() + ).forEach { + it.binaries.framework(PlaygroundConfigs.FRAMEWORK_NAME) { + baseName = PlaygroundConfigs.FRAMEWORK_NAME + xcf.add(this) + isStatic = true + } + } + + metadata { + compilations.matching { it.name == "iosMain" }.all { + compileTaskProvider.configure { enabled = false } + } + } + + sourceSets { + commonMain.dependencies { + implementation(project(":ui:core-ui")) + } + + androidMain.dependencies { + // ANDROID DEPENDENCIES + } + + iosMain.dependencies { + // IOS DEPENDENCIES + } + } +} + +android { + namespace = PlaygroundConfigs.NAMESPACE + compileSdk = libs.versions.compileSdk.get().toInt() + + sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml") + sourceSets["main"].res.srcDirs("src/androidMain/res") + sourceSets["main"].resources.srcDirs("src/commonMain/resources") + sourceSets["main"].res.srcDirs("src/androidMain/res", "src/commonMain/resources") + + defaultConfig { + minSdk = libs.versions.minSdk.get().toInt() + targetSdk = libs.versions.targetSdk.get().toInt() + versionCode = PlaygroundConfigs.VERSION_CODE + versionName = PlaygroundConfigs.VERSION_NAME + + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), "./proguard-rules.pro" + ) + } + + compileOptions { + sourceCompatibility = JavaVersion.toVersion(libs.versions.jvm.get()) + targetCompatibility = JavaVersion.toVersion(libs.versions.jvm.get()) + } + + signingConfigs { + Buildable.all().forEach { + maybeCreate(it.name).apply { + storeFile = file(it.storeFile) + storePassword = it.storePassword + keyAlias = it.keyAlias + keyPassword = it.keyPassword + } + } + } + + buildTypes { + Buildable.all().forEach { + maybeCreate(it.name).apply { + isDebuggable = it.isDebuggable + isMinifyEnabled = it.isMinifyEnabled + isShrinkResources = it.isShrinkResources + signingConfig = signingConfigs.getByName(it.name) + } + } + } + + flavorDimensions("default") + productFlavors { + PlaygroundProductFlavor.all().forEach { flavor -> + maybeCreate(flavor.toString()).apply { + applicationId = flavor.applicationId + versionNameSuffix = flavor.versionNameSuffix + resValue( + type = "string", + name = "app_name", + value = flavor.appName + ) + } + } + } + + lint { + abortOnError = false + checkReleaseBuilds = false + } + + buildFeatures { + compose = true + buildConfig = true + } + + composeOptions { + kotlinCompilerExtensionVersion = libs.versions.compose.android.get() + } + + compileOptions { + sourceCompatibility = JavaVersion.toVersion(libs.versions.jvm.get()) + targetCompatibility = JavaVersion.toVersion(libs.versions.jvm.get()) + } + + kotlin { + jvmToolchain(libs.versions.jvm.get().toInt()) + } +} + +compose.resources { + publicResClass = false + packageOfResClass = "${PlaygroundConfigs.NAMESPACE}.resources" + generateResClass = always +} diff --git a/samples/playground-app-shared/google-services.json b/samples/playground-app-shared/google-services.json new file mode 100644 index 00000000..e6975687 --- /dev/null +++ b/samples/playground-app-shared/google-services.json @@ -0,0 +1,124 @@ +{ + "project_info": { + "project_number": "211134116667", + "project_id": "metactosampleapp", + "storage_bucket": "metactosampleapp.firebasestorage.app" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:211134116667:android:633de12b60b915a9827d1e", + "android_client_info": { + "package_name": "com.metacto.catalogapp.dev" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyBSqPW4Jn4HksPCcHoRqfXQ2IUxWY_oVro" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:211134116667:android:11c05db275bd39c4827d1e", + "android_client_info": { + "package_name": "com.metacto.catalogapp.prod" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyBSqPW4Jn4HksPCcHoRqfXQ2IUxWY_oVro" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:211134116667:android:57cbac40ee2b5a80827d1e", + "android_client_info": { + "package_name": "com.metacto.playground.dev" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyBSqPW4Jn4HksPCcHoRqfXQ2IUxWY_oVro" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:211134116667:android:147bb91290ee9879827d1e", + "android_client_info": { + "package_name": "com.metacto.playground.prod" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyBSqPW4Jn4HksPCcHoRqfXQ2IUxWY_oVro" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:211134116667:android:0f5bd66d529ccdbc827d1e", + "android_client_info": { + "package_name": "com.sampleApp.app.dev" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyBSqPW4Jn4HksPCcHoRqfXQ2IUxWY_oVro" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:211134116667:android:499f537d887e9ce1827d1e", + "android_client_info": { + "package_name": "com.sampleApp.app.prod" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyBSqPW4Jn4HksPCcHoRqfXQ2IUxWY_oVro" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/samples/playground-app-shared/signing/debug.keystore b/samples/playground-app-shared/signing/debug.keystore new file mode 100644 index 00000000..8878ea51 Binary files /dev/null and b/samples/playground-app-shared/signing/debug.keystore differ diff --git a/samples/playground-app-shared/signing/release.keystore b/samples/playground-app-shared/signing/release.keystore new file mode 100644 index 00000000..8878ea51 Binary files /dev/null and b/samples/playground-app-shared/signing/release.keystore differ diff --git a/samples/playground-app-shared/src/androidMain/AndroidManifest.xml b/samples/playground-app-shared/src/androidMain/AndroidManifest.xml new file mode 100644 index 00000000..320fe70a --- /dev/null +++ b/samples/playground-app-shared/src/androidMain/AndroidManifest.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/playground-app-shared/src/androidMain/kotlin/com/metacto/playground/MainActivity.kt b/samples/playground-app-shared/src/androidMain/kotlin/com/metacto/playground/MainActivity.kt new file mode 100644 index 00000000..a9997a02 --- /dev/null +++ b/samples/playground-app-shared/src/androidMain/kotlin/com/metacto/playground/MainActivity.kt @@ -0,0 +1,29 @@ +package com.metacto.playground + +import android.os.Bundle +import androidx.activity.compose.setContent +import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen +import androidx.core.view.WindowCompat +import androidx.fragment.app.FragmentActivity +import com.metacto.playground.presentation.app.app.AppContent +import com.metacto.playground.presentation.app.app.AppViewModel +import com.metacto.playground.presentation.app.app.AppContract.Event +import org.koin.android.ext.android.inject + +class MainActivity : FragmentActivity() { + private val appViewModel by inject() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + // Config activity + installSplashScreen() + WindowCompat.setDecorFitsSystemWindows(window, false) + appViewModel.setEvent(Event.Init) + + // Render app content + setContent { + AppContent() + } + } +} \ No newline at end of file diff --git a/samples/playground-app-shared/src/androidMain/kotlin/com/metacto/playground/PlaygroundApp.kt b/samples/playground-app-shared/src/androidMain/kotlin/com/metacto/playground/PlaygroundApp.kt new file mode 100644 index 00000000..803a17f3 --- /dev/null +++ b/samples/playground-app-shared/src/androidMain/kotlin/com/metacto/playground/PlaygroundApp.kt @@ -0,0 +1,24 @@ +package com.metacto.playground + +import android.app.Application +import com.metacto.playground.constants.AppEnvironment +import com.metacto.playground.di.initKoin +import org.koin.android.ext.koin.androidContext + +class PlaygroundApp : Application() { + override fun onCreate() { + super.onCreate() + + // Prepare environment + val environment = if (BuildConfig.FLAVOR == "qa") { + AppEnvironment.Dev + } else { + AppEnvironment.Prod + } + + // Init koin + initKoin(environment) { + androidContext(this@PlaygroundApp) + } + } +} \ No newline at end of file diff --git a/sampleAppShared/src/androidMain/kotlin/com/sampleApp/app/di/PlatformModule.kt b/samples/playground-app-shared/src/androidMain/kotlin/com/metacto/playground/di/PlatformModule.kt similarity index 77% rename from sampleAppShared/src/androidMain/kotlin/com/sampleApp/app/di/PlatformModule.kt rename to samples/playground-app-shared/src/androidMain/kotlin/com/metacto/playground/di/PlatformModule.kt index ab541f4b..41b20d16 100644 --- a/sampleAppShared/src/androidMain/kotlin/com/sampleApp/app/di/PlatformModule.kt +++ b/samples/playground-app-shared/src/androidMain/kotlin/com/metacto/playground/di/PlatformModule.kt @@ -1,4 +1,4 @@ -package com.sampleApp.app.di +package com.metacto.playground.di import org.koin.dsl.module diff --git a/samples/playground-app-shared/src/androidMain/kotlin/com/metacto/playground/presentation/Main.android.kt b/samples/playground-app-shared/src/androidMain/kotlin/com/metacto/playground/presentation/Main.android.kt new file mode 100644 index 00000000..1a3cc9a9 --- /dev/null +++ b/samples/playground-app-shared/src/androidMain/kotlin/com/metacto/playground/presentation/Main.android.kt @@ -0,0 +1,9 @@ +package com.metacto.playground.presentation + +import androidx.compose.runtime.Composable +import com.metacto.playground.presentation.app.app.AppContent + +@Composable +fun MainView() { + AppContent() +} \ No newline at end of file diff --git a/samples/playground-app-shared/src/androidMain/res/mipmap/ic_launcher.png b/samples/playground-app-shared/src/androidMain/res/mipmap/ic_launcher.png new file mode 100644 index 00000000..6134c1fe Binary files /dev/null and b/samples/playground-app-shared/src/androidMain/res/mipmap/ic_launcher.png differ diff --git a/samples/playground-app-shared/src/androidMain/res/mipmap/ic_launcher_rounded.png b/samples/playground-app-shared/src/androidMain/res/mipmap/ic_launcher_rounded.png new file mode 100644 index 00000000..42b9e9bd Binary files /dev/null and b/samples/playground-app-shared/src/androidMain/res/mipmap/ic_launcher_rounded.png differ diff --git a/samples/playground-app-shared/src/androidMain/res/values-v27/themes.xml b/samples/playground-app-shared/src/androidMain/res/values-v27/themes.xml new file mode 100644 index 00000000..4f8cacba --- /dev/null +++ b/samples/playground-app-shared/src/androidMain/res/values-v27/themes.xml @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/samples/playground-app-shared/src/androidMain/res/values/colors.xml b/samples/playground-app-shared/src/androidMain/res/values/colors.xml new file mode 100644 index 00000000..8812332d --- /dev/null +++ b/samples/playground-app-shared/src/androidMain/res/values/colors.xml @@ -0,0 +1,4 @@ + + + #FAF4F0 + \ No newline at end of file diff --git a/samples/playground-app-shared/src/androidMain/res/values/themes.xml b/samples/playground-app-shared/src/androidMain/res/values/themes.xml new file mode 100644 index 00000000..4ef2e192 --- /dev/null +++ b/samples/playground-app-shared/src/androidMain/res/values/themes.xml @@ -0,0 +1,23 @@ + + + + + + + + \ No newline at end of file diff --git a/samples/playground-app-shared/src/commonMain/composeResources/drawable/ic_star_empty.xml b/samples/playground-app-shared/src/commonMain/composeResources/drawable/ic_star_empty.xml new file mode 100644 index 00000000..6b1c08de --- /dev/null +++ b/samples/playground-app-shared/src/commonMain/composeResources/drawable/ic_star_empty.xml @@ -0,0 +1,10 @@ + + + \ No newline at end of file diff --git a/samples/playground-app-shared/src/commonMain/composeResources/drawable/ic_star_filled.xml b/samples/playground-app-shared/src/commonMain/composeResources/drawable/ic_star_filled.xml new file mode 100644 index 00000000..aa1b6c98 --- /dev/null +++ b/samples/playground-app-shared/src/commonMain/composeResources/drawable/ic_star_filled.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/samples/playground-app-shared/src/commonMain/composeResources/files/app_loading.json b/samples/playground-app-shared/src/commonMain/composeResources/files/app_loading.json new file mode 100644 index 00000000..925ed2f2 --- /dev/null +++ b/samples/playground-app-shared/src/commonMain/composeResources/files/app_loading.json @@ -0,0 +1 @@ +{"v":"5.5.8","fr":50,"ip":0,"op":147,"w":800,"h":600,"nm":"Paperplane","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"planete Outlines - Group 4","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":38,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":88,"s":[50]},{"t":120,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[468.336,323.378,0],"to":[-29,0,0],"ti":[29,0,0]},{"t":102,"s":[294.336,323.378,0]}],"ix":2},"a":{"a":0,"k":[453.672,304.756,0],"ix":1},"s":{"a":0,"k":[50,50,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[6.742,0],[0.741,-0.14],[0,0.074],[13.484,0],[1.669,-0.361],[19.79,0],[3.317,-19.082],[2.691,0],[0,-13.484],[-0.048,-0.629],[2.405,0],[0,-6.742],[-6.742,0],[0,0],[0,6.743]],"o":[[-0.781,0],[0.001,-0.074],[0,-13.484],[-1.778,0],[-3.594,-18.742],[-20.03,0],[-2.421,-0.804],[-13.485,0],[0,0.642],[-1.89,-1.199],[-6.742,0],[0,6.743],[0,0],[6.742,0],[0,-6.742]],"v":[[75.134,16.175],[72.85,16.396],[72.856,16.175],[48.44,-8.241],[43.262,-7.685],[3.406,-40.591],[-36.571,-6.995],[-44.269,-8.241],[-68.685,16.175],[-68.604,18.079],[-75.133,16.175],[-87.341,28.383],[-75.133,40.592],[75.134,40.592],[87.342,28.383]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.815686334348,0.823529471603,0.827451040231,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[453.672,304.756],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":151,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Merged Shape Layer","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.547],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.845],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":77,"s":[35]},{"t":150,"s":[0]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[390.319,298.2,0],"to":[0,-2.583,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":44,"s":[390.319,282.7,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":110,"s":[390.319,319.25,0],"to":[0,0,0],"ti":[0,0,0]},{"t":150,"s":[390.319,298.2,0]}],"ix":2},"a":{"a":0,"k":[664.319,256.2,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[18.967,-3.189],[-18.967,19.935],[-0.949,-19.935]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.223528981209,0.192156970501,0.674510002136,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[236.879,292.737],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[633.939,275.369],"ix":2},"a":{"a":0,"k":[236.879,292.737],"ix":1},"s":{"a":0,"k":[50,50],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"planete Outlines - Group 1","np":1,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-98.335,64.79],[-105.619,4.984],[105.619,-64.79],[-80.316,24.919]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.278430998325,0.294117987156,0.847059011459,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[316.247,247.882],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[673.623,252.941],"ix":2},"a":{"a":0,"k":[316.247,247.882],"ix":1},"s":{"a":0,"k":[50,50],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"planete Outlines - Group 2","np":1,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-133.812,-42.171],[133.812,-75.141],[5.765,75.141],[-61.708,18.402],[124.227,-71.307],[-87.011,-1.534]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.365000009537,0.407999992371,0.976000010967,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[297.638,254.4],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[664.319,256.2],"ix":2},"a":{"a":0,"k":[297.638,254.4],"ix":1},"s":{"a":0,"k":[50,50],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"planete Outlines - Group 3","np":1,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":151,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"planete Outlines - Group 5","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":45,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":102,"s":[100]},{"t":150,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[327.38,267.583,0],"to":[25.833,0,0],"ti":[-25.833,0,0]},{"t":150,"s":[482.38,267.583,0]}],"ix":2},"a":{"a":0,"k":[171.76,193.166,0],"ix":1},"s":{"a":0,"k":[50,50,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[13.485,0],[4.38,-4.171],[21.913,0],[3.575,-18.765],[1.851,0],[0,-13.484],[-0.011,-0.291],[1.599,0],[0,-6.743],[-6.742,0],[0,0],[0,13.485]],"o":[[-6.526,0],[-0.793,-21.719],[-19.806,0],[-1.734,-0.391],[-13.485,0],[0,0.293],[-1.4,-0.559],[-6.742,0],[0,6.742],[0,0],[13.485,0],[0,-13.484]],"v":[[59.669,-8.242],[42.84,-1.506],[2.287,-40.592],[-37.576,-7.638],[-42.962,-8.242],[-67.378,16.174],[-67.356,17.049],[-71.878,16.174],[-84.086,28.383],[-71.878,40.591],[59.669,40.591],[84.086,16.174]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.816000007181,0.823999980852,0.827000038297,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[171.76,193.166],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":151,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Pre-comp 1","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[406,306,0],"ix":2},"a":{"a":0,"k":[400,300,0],"ix":1},"s":{"a":0,"k":[179,179,100],"ix":6}},"ao":0,"w":800,"h":600,"ip":0,"op":147,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/samples/playground-app-shared/src/commonMain/composeResources/files/intro_video.mp4 b/samples/playground-app-shared/src/commonMain/composeResources/files/intro_video.mp4 new file mode 100644 index 00000000..ed8c35bd Binary files /dev/null and b/samples/playground-app-shared/src/commonMain/composeResources/files/intro_video.mp4 differ diff --git a/samples/playground-app-shared/src/commonMain/composeResources/files/people_lottie_anim.json b/samples/playground-app-shared/src/commonMain/composeResources/files/people_lottie_anim.json new file mode 100644 index 00000000..13cf412b --- /dev/null +++ b/samples/playground-app-shared/src/commonMain/composeResources/files/people_lottie_anim.json @@ -0,0 +1 @@ +{"v":"4.8.0","meta":{"g":"LottieFiles AE 3.5.4","a":"","k":"","d":"","tc":""},"fr":29.9700012207031,"ip":0,"op":300.00001221925,"w":1000,"h":1067,"nm":"People - 02","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Layer 2 Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":-32,"s":[927.036,771.459,0],"to":[-152,272,0],"ti":[218.978,396.815,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":67.886,"s":[87.036,771.459,0],"to":[-204.757,-371.045,0],"ti":[-302.071,-14.596,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":167.77,"s":[495.036,63.459,0],"to":[525.804,25.407,0],"ti":[106,-164,0]},{"t":266.000010834402,"s":[927.036,771.459,0]}],"ix":2},"a":{"a":0,"k":[63.359,55.959,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0,0,0.667],"y":[1,1,1]},"o":{"x":[0.826,0.826,0.333],"y":[0,0,0]},"t":92.849,"s":[0,0,100]},{"i":{"x":[0,0,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":121,"s":[100,100,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":205.45,"s":[100,100,100]},{"t":232.880009485397,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.74,7.74],[0,0],[-8.679,0]],"o":[[0,0],[2.74,7.74],[8.679,0]],"v":[[18.782,-6.648],[-18.782,-6.648],[0,6.648]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.807843197093,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[106.318,41.589],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-2.334],[-0.736,-2.082],[0,0],[0,2.335],[0.738,2.082],[0,0]],"o":[[0,2.334],[0,0],[0.738,-2.082],[0,-2.334],[0,0],[-0.736,2.082]],"v":[[-19.941,0],[-18.783,6.647],[18.781,6.647],[19.941,0],[18.781,-6.647],[-18.783,-6.647]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.89019613827,0.023529413635,0.074509803922,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[106.318,28.294],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":4,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[2.74,-7.738],[0,0],[8.679,0]],"o":[[0,0],[-2.74,-7.74],[-8.679,0.002]],"v":[[-18.782,6.647],[18.782,6.647],[0,-6.647]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[106.317,15],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":4,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.074,3.821],[0.567,-1.852],[8.389,0.093],[0,0],[3.333,10.882],[0.51,2.41],[-7.042,-1.676],[-3.783,1.892]],"o":[[-0.448,2.231],[-3.334,10.882],[0,0],[-8.388,0.093],[-0.71,-2.315],[1.565,3.599],[9.929,2.364],[2.738,-1.37]],"v":[[19.644,-8.506],[18.126,-2.318],[0.222,9.471],[0.08,9.471],[-17.823,-2.318],[-19.644,-9.478],[-7.324,2.234],[11.351,1.524]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.780392216701,0.576470588235,0.223529426724,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[56.232,72.795],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":4,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.111,0.266],[0.799,1.462],[-0.268,-0.611],[-0.705,-1.461]],"o":[[-0.637,-1.531],[-0.336,-0.614],[0.654,1.486],[0.123,0.255]],"v":[[1.471,2.394],[-0.395,-2.231],[-1.314,-1.693],[1.008,2.589]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.760784373564,0.427451010311,0.149019607843,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[72.892,16.48],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":4,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.046,0.258],[0.337,1.49],[-0.151,-0.626],[-0.422,-1.454]],"o":[[-0.267,-1.499],[-0.142,-0.625],[0.356,1.479],[0.075,0.258]],"v":[[0.908,2.376],[0.16,-2.119],[-0.803,-1.854],[0.51,2.486]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.760784373564,0.427451010311,0.149019607843,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[78.838,19.046],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":4,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.256,-0.151],[1.157,-0.475],[7.518,1.503],[4.28,1.673],[1.941,2.54],[0.148,0.225],[-0.121,-0.133],[-0.176,-0.167],[-3.463,-1.139],[-3.966,-0.806],[-7.216,2.917],[-0.821,0.439]],"o":[[-1.114,0.648],[-7.043,2.898],[-4.5,-0.901],[-2.935,-1.145],[-0.164,-0.21],[-0.099,-0.151],[0.169,0.179],[2.602,2.54],[3.842,1.262],[7.515,1.531],[0.855,-0.342],[0.263,-0.138]],"v":[[23.653,1.213],[20.24,2.895],[-2.083,4.157],[-15.502,0.441],[-23.344,-4.818],[-23.81,-5.469],[-23.56,-5.66],[-23.045,-5.139],[-13.832,-0.102],[-2.08,3.046],[20.903,1.984],[23.418,0.811]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.760784373564,0.427451010311,0.149019607843,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[54.01,27.968],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":4,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-4.978,1.762],[0.722,-1.136],[1.642,-0.256],[0.034,0.08]],"o":[[0,0],[-3.086,-0.425],[-1.185,-1.306],[0.2,0.043]],"v":[[6.46,-1.378],[5.496,0.779],[-4.605,1.378],[-6.46,-1.375]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.980392216701,0.925490255917,0.89019613827,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[56.815,64.773],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":4,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-4.978,1.762],[0.722,-1.136],[2.691,-0.114],[1.151,1.272],[0.034,0.08]],"o":[[0,0],[-0.87,1.355],[-2.148,0.092],[-1.185,-1.306],[0.2,0.043]],"v":[[6.46,-2.62],[5.496,-0.463],[0.367,2.528],[-4.605,0.136],[-6.46,-2.617]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.709803921569,0.349019607843,0.207843152214,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[56.815,66.015],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9","np":4,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.16,-0.355],[-1.274,-1.526],[-0.69,1.315],[0.418,-0.063],[0.393,0.102],[0.211,0.435],[-0.416,1.068]],"o":[[-0.703,1.562],[0.721,0.863],[0.215,-0.409],[-0.382,0.057],[-0.474,-0.124],[-0.537,-1.106],[0.14,-0.36]],"v":[[-0.818,-3.161],[-1.146,1.864],[2.206,2.201],[1.651,1.478],[0.574,1.608],[-0.533,0.673],[-0.19,-2.896]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.921568687289,0.639215686275,0.470588265213,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[56.768,55.277],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 10","np":4,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.259,-0.037],[-0.535,-0.651],[-0.469,0.562],[0.099,0.209],[1.308,0.108]],"o":[[0.844,0.12],[0.225,0.274],[0.149,-0.178],[-0.601,-1.266],[-0.257,-0.021]],"v":[[-1.607,-1.049],[0.473,0.221],[1.692,0.963],[1.767,0.381],[-1.545,-1.504]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.941176530427,0.694117647059,0.498039245605,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[31.827,51.571],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 11","np":4,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.18,-0.21],[-0.36,-1.019],[-0.602,-0.473],[-0.122,0.206],[0.384,0.73],[0.806,0.8]],"o":[[0.703,0.822],[0.247,0.699],[0.171,0.134],[0.471,-0.79],[-0.532,-1.01],[-0.201,-0.199]],"v":[[-1.622,-2.34],[-0.035,0.494],[0.798,2.709],[1.332,2.64],[0.751,-0.005],[-1.316,-2.647]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.941176530427,0.694117647059,0.498039245605,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[32.622,50.731],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 12","np":4,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.147,-0.126],[-0.123,-1.681],[-0.135,0.388],[-0.313,0.707],[-0.542,0.554]],"o":[[-1.177,1.016],[0.029,0.405],[0.25,-0.717],[0.311,-0.704],[0.138,-0.141]],"v":[[1.063,-2.284],[-1.293,1.925],[-0.59,2.021],[0.051,-0.137],[1.277,-2.068]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.941176530427,0.694117647059,0.498039245605,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[80.38,49.805],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 13","np":4,"cix":2,"bm":0,"ix":13,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.322,-0.142],[0.727,-0.806],[-0.399,-0.759],[-0.125,0.039],[-0.169,0.35],[-0.316,0.401],[-0.92,0.454]],"o":[[-0.989,0.435],[-0.492,0.546],[0.061,0.117],[0.381,-0.119],[0.222,-0.459],[0.634,-0.804],[0.326,-0.161]],"v":[[1.786,-2.127],[-0.87,-0.293],[-1.994,2.088],[-1.646,2.23],[-1.039,1.556],[-0.24,0.261],[2.066,-1.646]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.941176530427,0.694117647059,0.498039245605,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[80.7,51.035],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 14","np":4,"cix":2,"bm":0,"ix":14,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.248,0.391],[0.368,0.2],[1.458,-0.058],[-1.186,-0.638],[-1.77,0.811]],"o":[[-0.433,-0.681],[-1.267,-0.689],[-2.227,0.088],[1.578,0.849],[0.549,-0.251]],"v":[[4.121,0.496],[2.129,-1.112],[-2.142,-2.266],[-3.171,0.272],[3.819,1.514]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784313725,0.270588235294,0.207843152214,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[66.757,41.711],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 15","np":4,"cix":2,"bm":0,"ix":15,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.271,0.375],[-0.379,0.178],[-1.451,-0.143],[1.22,-0.567],[1.72,0.914]],"o":[[0.472,-0.654],[1.304,-0.613],[2.218,0.219],[-1.626,0.754],[-0.533,-0.283]],"v":[[-4.169,0.293],[-2.087,-1.196],[2.243,-2.097],[3.123,0.499],[-3.928,1.326]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784313725,0.270588235294,0.207843152214,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[46.086,41.677],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 16","np":4,"cix":2,"bm":0,"ix":16,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.37,-1.105],[13.752,0],[9.756,8.215],[-0.142,0.068],[-16.653,3.765],[-3.861,4.154]],"o":[[-9.756,8.215],[-13.749,0],[0.13,-0.059],[5.154,2.157],[10.509,-2.38],[4.879,2.802]],"v":[[36.105,-3.321],[-0.001,9.842],[-36.105,-3.321],[-35.697,-3.512],[3.428,1.253],[24.004,-9.842]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.152941176471,0.337254901961,0.580392156863,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[56.353,102.618],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 17","np":4,"cix":2,"bm":0,"ix":17,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.401,0],[0,1.699],[1.401,0],[0,-1.7]],"o":[[1.401,0],[0,-1.7],[-1.401,0],[0,1.699]],"v":[[0,3.077],[2.537,0],[0,-3.077],[-2.537,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784313725,0.270588235294,0.207843152214,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[67.034,47.372],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 18","np":4,"cix":2,"bm":0,"ix":18,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.401,0],[0,1.699],[1.401,0],[0,-1.7]],"o":[[1.401,0],[0,-1.7],[-1.401,0],[0,1.699]],"v":[[0,3.077],[2.537,0],[0,-3.077],[-2.537,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784313725,0.270588235294,0.207843152214,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[45.732,47.372],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 19","np":4,"cix":2,"bm":0,"ix":19,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.335,1.652],[2.057,0.416],[0.334,-1.652],[-2.057,-0.416]],"o":[[0.335,-1.652],[-2.058,-0.417],[-0.335,1.652],[2.058,0.417]],"v":[[3.725,0.754],[0.606,-2.991],[-3.725,-0.754],[-0.606,2.991]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.741176470588,0.6,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[67.52,54.696],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 20","np":4,"cix":2,"bm":0,"ix":20,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.096,0.12],[0.096,1.682],[2.096,-0.12],[-0.097,-1.682]],"o":[[2.096,-0.12],[-0.097,-1.683],[-2.095,0.12],[0.096,1.683]],"v":[[0.175,3.046],[3.795,-0.217],[-0.175,-3.047],[-3.794,0.217]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.741176470588,0.6,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[45.466,54.711],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 21","np":4,"cix":2,"bm":0,"ix":21,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-1.733,-0.473],[0.946,-1.734],[1.418,0.158]],"o":[[0,0],[1.734,0.473],[-0.945,1.733],[-1.419,-0.157]],"v":[[-6.698,2.758],[4.176,-6.54],[5.752,5.28],[-1.182,1.024]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.929411824544,0.878431432387,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[63.026,89.371],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 22","np":4,"cix":2,"bm":0,"ix":22,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[1.733,-0.473],[-0.946,-1.734],[-1.418,0.158]],"o":[[0,0],[-1.734,0.473],[0.945,1.733],[1.419,-0.157]],"v":[[6.698,2.758],[-4.176,-6.54],[-5.752,5.28],[1.182,1.024]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.929411824544,0.878431432387,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[49.679,89.371],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 23","np":4,"cix":2,"bm":0,"ix":23,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[2.299,-11.511],[0.568,-1.851],[8.388,0.092],[0,0],[3.333,10.882],[0.509,2.411],[0,0],[0,0],[0,0],[-4.274,-4.929],[-3.783,-0.077],[-3.602,4.231],[0,0]],"o":[[0,0],[-0.448,2.232],[-3.333,10.882],[0,0],[-8.388,0.092],[-0.71,-2.314],[0,0],[-2.003,-9.45],[0,0],[0,0],[3.321,3.83],[5.315,0.112],[4.231,-4.963],[0,0]],"v":[[22.457,-22.196],[19.405,4.126],[17.886,10.314],[-0.017,22.104],[-0.159,22.104],[-18.062,10.314],[-19.883,3.154],[-19.883,3.151],[-22.457,-15.366],[-20.512,-21.144],[-14.498,-2.864],[-0.471,2.336],[14.183,-2.549],[18.991,-20.764]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.839215746113,0.513725490196,0.243137269862,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[56.471,60.163],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 24","np":4,"cix":2,"bm":0,"ix":24,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.37,-1.105],[13.752,0],[9.756,8.215],[-0.142,0.068],[-3.655,3.191],[0,0],[0,0],[-5.666,-3.256]],"o":[[-9.756,8.215],[-13.749,0],[0.13,-0.059],[5.475,-2.636],[0,0],[0,0],[1.852,1.695],[4.879,2.802]],"v":[[36.105,0.91],[-0.001,14.074],[-36.105,0.91],[-35.697,0.719],[-10.944,-13.938],[0.04,-6.296],[10.791,-14.074],[24.004,-5.611]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.180392156863,0.400000029919,0.690196078431,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[56.353,98.386],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 25","np":4,"cix":2,"bm":0,"ix":25,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-1.288,4.597],[4.413,-0.735],[0,0]],"o":[[0,0],[1.287,-4.598],[0,0],[0,0]],"v":[[-3.218,6.988],[4.874,1.655],[-2.85,-6.253],[-6.16,2.39]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.800000059838,0.690196078431,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[79.51,50.781],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 26","np":4,"cix":2,"bm":0,"ix":26,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.568,-1.725],[0,0],[0,0],[-0.07,0.169],[-0.046,2.852],[0,0],[-3.009,-0.901]],"o":[[-11.509,5.438],[0,0],[0.303,-0.278],[0.571,-1.334],[0,0],[0,0],[0.016,2.717]],"v":[[10.444,3.136],[-9.715,6.843],[-10.444,4.053],[-9.873,3.377],[-9.089,-4.682],[3.759,-7.104],[9.74,-5.759]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.815686334348,0.701960784314,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[56.021,80.242],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 27","np":4,"cix":2,"bm":0,"ix":27,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.657,-0.476],[1.756,-0.747],[4.66,-0.864],[6.284,1.802],[1.815,1.271],[0,0],[0.606,1.053],[-0.034,0.033],[-0.105,0.105],[-3.463,-1.139],[-3.966,-0.805],[-7.215,2.917]],"o":[[0,0],[-0.679,0.497],[-2.232,0.95],[-7.645,1.419],[-2.941,-0.846],[-0.04,-4.047],[0,0],[0.031,-0.034],[0.096,-0.108],[2.602,2.539],[3.842,1.262],[7.515,1.531],[0,0]],"v":[[22.287,0.455],[21.389,1.23],[17.831,3.162],[7.683,6.023],[-14.498,5.014],[-21.763,1.795],[-21.071,-4.761],[-22.288,-6.381],[-22.195,-6.482],[-21.896,-6.803],[-12.683,-1.767],[-0.931,1.381],[22.052,0.319]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.815686334348,0.701960784314,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[52.86,29.633],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 28","np":4,"cix":2,"bm":0,"ix":28,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.892,2.309],[0,0],[0,0],[0.5,-2.376],[0,0],[0.034,3.54],[0,0],[0.605,1.052],[-0.096,2.074],[-13.607,1.657],[0,0],[-1.655,0.367],[0,0],[-0.552,-6.253]],"o":[[-2.595,-2.444],[-0.182,-0.472],[-12.138,2.76],[0.599,2.453],[-1.185,5.632],[-2.232,-5.237],[-0.04,-4.046],[0,0],[-0.639,-1.105],[0.185,-4.046],[13.611,-1.654],[0,0],[1.657,-0.367],[0.185,-2.756],[0.549,6.252]],"v":[[20.83,18.391],[14.493,6.635],[14.209,5.885],[-17.789,1.105],[-17.834,8.487],[-22.201,18.758],[-25.099,5.268],[-24.409,-1.287],[-25.625,-2.907],[-26.8,-7.725],[-9.148,-17.104],[15.497,-10.851],[16.599,-13.425],[21.932,-8.644],[26.347,-3.126]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.839215746113,0.513725490196,0.243137269862,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[56.197,26.159],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 29","np":4,"cix":2,"bm":0,"ix":29,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-5.126,-2.398],[13.752,0],[9.755,8.212],[-3.746,3.274],[-0.052,0.049],[-0.071,0.17],[-0.046,2.851],[0,0],[0,0],[-0.009,-1.309],[-0.568,-1.725],[-0.03,-0.074],[-0.312,-0.287]],"o":[[-9.756,8.213],[-13.749,0],[5.061,-2.37],[0.062,-0.055],[0.303,-0.278],[0.571,-1.333],[0.028,-1.864],[0,0],[0,0],[0.016,2.716],[0.028,0.086],[0.074,0.173],[3.444,3.154]],"v":[[36.101,6.934],[-0.002,20.094],[-36.101,6.934],[-10.946,-7.916],[-10.776,-8.07],[-10.205,-8.747],[-9.421,-16.804],[-9.418,-20.094],[9.415,-20.094],[9.408,-17.881],[10.112,-8.988],[10.201,-8.747],[10.791,-8.053]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.800000059838,0.690196078431,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[56.353,92.365],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 30","np":4,"cix":2,"bm":0,"ix":30,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[1.287,5.885],[-2.39,-1.287]],"o":[[0,0],[-1.287,-5.884],[2.391,1.287]],"v":[[4.689,6.068],[-3.954,1.655],[2.85,-6.253]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.800000059838,0.690196078431,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[31.88,51.537],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 31","np":4,"cix":2,"bm":0,"ix":31,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[19.863,-5.885],[-0.438,17.042],[-0.219,1.265],[-11.138,-3.95],[0,0]],"o":[[-18.375,5.444],[0.034,-1.376],[2.234,-12.86],[3.512,1.247],[0,0]],"v":[[5.924,23.569],[-25.349,-12.181],[-24.969,-16.154],[11.899,-18.372],[17.695,-16.154]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.800000059838,0.690196078431,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[58.412,47.093],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 32","np":4,"cix":2,"bm":0,"ix":32,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-30.986],[12.228,-10.29],[0,0],[13.752,0],[9.755,8.212],[0,0],[0,17.233],[-30.983,0]],"o":[[0,17.233],[0,0],[-9.756,8.213],[-13.749,0],[0,0],[-12.228,-10.29],[0,-30.986],[30.985,0]],"v":[[56.103,0],[36.104,42.942],[36.101,42.945],[-0.002,56.105],[-36.101,42.945],[-36.104,42.942],[-56.103,0],[-0.001,-56.105]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.039215686275,0.145098039216,0.250980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[56.353,56.355],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 33","np":4,"cix":2,"bm":0,"ix":33,"mn":"ADBE Vector Group","hd":false}],"ip":-32.0000013033867,"op":868.000035354365,"st":-32.0000013033867,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Layer 4 Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[499.382,60.423,0],"to":[122,-36.333,0],"ti":[104.863,-468.495,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":99.886,"s":[967.382,670.423,0],"to":[-72.598,324.348,0],"ti":[264.617,505.635,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":199.77,"s":[57.382,732.423,0],"to":[-86.029,-164.385,0],"ti":[-501.333,33,0]},{"t":298.000012137789,"s":[499.382,60.423,0]}],"ix":2},"a":{"a":0,"k":[64.377,59.425,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0,0,0.667],"y":[1,1,1]},"o":{"x":[0.826,0.826,0.333],"y":[0,0,0]},"t":161,"s":[0,0,100]},{"i":{"x":[0,0,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":189.153,"s":[100,100,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":273.604,"s":[100,100,100]},{"t":299.87626221421,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-0.093,0.121],[0.093,0.121],[0,-0.121]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[108.319,26.974],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-0.311,-0.377],[-1.135,-0.377],[-0.505,0.156],[-0.701,0.957],[0,0.523],[0.701,0.957],[0.505,0.156],[1.135,-0.377],[0.312,-0.377],[0.093,-0.957],[-0.092,-0.957]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[108.317,28.052],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":4,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-0.092,0.121],[0.092,0.121],[0.001,-0.121]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[103.384,26.974],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":4,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-0.311,-0.377],[-1.135,-0.377],[-0.505,0.156],[-0.701,0.957],[0,0.523],[0.701,0.957],[0.503,0.156],[1.135,-0.377],[0.312,-0.377],[0.091,-0.957],[-0.092,-0.957]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[103.385,28.052],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":4,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-0.092,0.121],[0.092,0.121],[-0.001,-0.121]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.451,26.974],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":4,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-0.312,-0.377],[-1.134,-0.377],[-0.504,0.156],[-0.701,0.957],[-0.001,0.523],[0.702,0.957],[0.505,0.156],[1.134,-0.377],[0.313,-0.377],[0.092,-0.957],[-0.092,-0.957]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.451,28.052],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":4,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-0.092,0.121],[0.092,0.121],[-0.001,-0.121]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.517,26.974],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":4,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-0.311,-0.377],[-1.135,-0.377],[-0.503,0.156],[-0.701,0.957],[0,0.523],[0.701,0.957],[0.505,0.156],[1.135,-0.377],[0.312,-0.377],[0.093,-0.957],[-0.091,-0.957]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.516,28.052],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":4,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.001,0.01],[0,0]],"v":[[0.505,0.672],[1.133,0.141],[0.312,0.141],[0,-0.682],[-0.31,0.141],[-1.133,0.141],[-0.505,0.672],[0.508,0.682]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[108.319,23.463],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9","np":4,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0,-0.039],[0.701,0.395],[0.507,-0.395],[-0.507,-0.395],[-0.701,0.395]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[108.318,24.543],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 10","np":4,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.002,0.01],[0,0]],"v":[[0.506,0.672],[1.134,0.141],[0.311,0.141],[0.001,-0.682],[-0.311,0.141],[-1.134,0.141],[-0.504,0.672],[0.507,0.682]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[103.383,23.463],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 11","np":4,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0,-0.039],[0.701,0.395],[0.507,-0.395],[-0.507,-0.395],[-0.701,0.395]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[103.384,24.543],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 12","np":4,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.001,0.01],[0,0]],"v":[[0.504,0.672],[1.134,0.141],[0.312,0.141],[0,-0.682],[-0.311,0.141],[-1.134,0.141],[-0.505,0.672],[0.507,0.682]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.452,23.463],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 13","np":4,"cix":2,"bm":0,"ix":13,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0,-0.039],[0.702,0.395],[0.509,-0.395],[-0.507,-0.395],[-0.702,0.395]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.45,24.543],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 14","np":4,"cix":2,"bm":0,"ix":14,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.003,0.01],[0,0]],"v":[[0.504,0.672],[1.134,0.141],[0.31,0.141],[-0.001,-0.682],[-0.313,0.141],[-1.134,0.141],[-0.505,0.672],[0.507,0.682]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.518,23.463],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 15","np":4,"cix":2,"bm":0,"ix":15,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0,-0.039],[0.701,0.395],[0.507,-0.395],[-0.507,-0.395],[-0.701,0.395]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.516,24.543],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 16","np":4,"cix":2,"bm":0,"ix":16,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.035,0],[0,0],[0.034,0],[0,0]],"v":[[1.133,-0.243],[0.311,-0.243],[0,-1.066],[-0.312,-0.243],[-1.133,-0.243],[-0.504,0.29],[-0.694,1.066],[0.002,0.656],[0.663,1.066],[0.507,0.29]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.853,26.029],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 17","np":4,"cix":2,"bm":0,"ix":17,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.035,0],[0,0],[0.035,0],[0,0]],"v":[[1.133,-0.243],[0.311,-0.243],[0,-1.066],[-0.312,-0.243],[-1.133,-0.243],[-0.504,0.29],[-0.694,1.066],[0,0.656],[0.661,1.066],[0.505,0.29]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.918,26.029],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 18","np":4,"cix":2,"bm":0,"ix":18,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.035,0],[0,0],[0.034,0],[0,0]],"v":[[1.135,-0.243],[0.311,-0.243],[0,-1.066],[-0.312,-0.243],[-1.135,-0.243],[-0.505,0.29],[-0.697,1.066],[-0.002,0.656],[0.659,1.066],[0.503,0.29]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[95.984,26.029],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 19","np":4,"cix":2,"bm":0,"ix":19,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0.031,-0.393],[0,0],[0,0]],"o":[[0,0],[-0.055,0.386],[0,0],[0.035,0],[0,0]],"v":[[0.354,-0.655],[-0.216,-0.655],[-0.354,0.511],[-0.121,0.655],[-0.276,-0.121]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[91.831,26.441],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 20","np":4,"cix":2,"bm":0,"ix":20,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-0.7,1.079],[0.001,0.646],[0.7,1.079],[0.506,0.278],[1.134,-0.254],[0.311,-0.254],[0.001,-1.079],[-0.311,-0.254],[-1.134,-0.254],[-0.506,0.278]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[108.317,19.786],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 21","np":4,"cix":2,"bm":0,"ix":21,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.312,-0.255],[0,-1.079],[-0.312,-0.255],[-1.135,-0.255],[-0.505,0.277],[-0.701,1.079],[0,0.645],[0.701,1.079],[0.503,0.277],[1.135,-0.255]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[103.384,19.786],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 22","np":4,"cix":2,"bm":0,"ix":22,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.312,-0.255],[-0.001,-1.079],[-0.313,-0.255],[-1.134,-0.255],[-0.505,0.277],[-0.702,1.079],[-0.001,0.645],[0.701,1.079],[0.504,0.277],[1.134,-0.255]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.451,19.786],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 23","np":4,"cix":2,"bm":0,"ix":23,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0.211,-0.469],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[-0.246,0.449],[0,0],[0,0]],"v":[[0.357,0.771],[0.16,-0.031],[0.788,-0.563],[-0.035,-0.563],[-0.113,-0.771],[-0.788,0.61],[-0.348,0.337]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.861,20.095],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 24","np":4,"cix":2,"bm":0,"ix":24,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[0,-0.153],[-0.116,0.153],[0.116,0.153]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.852,21.042],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 25","np":4,"cix":2,"bm":0,"ix":25,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-1.134,-0.408],[-0.505,0.124],[-0.701,0.926],[0,0.492],[0.702,0.926],[0.505,0.124],[1.134,-0.408],[0.311,-0.41],[0.116,-0.926],[-0.116,-0.926],[-0.311,-0.41]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.851,22.123],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 26","np":4,"cix":2,"bm":0,"ix":26,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[0.001,-0.153],[-0.117,0.153],[0.117,0.153]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.917,21.042],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 27","np":4,"cix":2,"bm":0,"ix":27,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-1.134,-0.408],[-0.504,0.124],[-0.702,0.926],[0.001,0.492],[0.702,0.926],[0.504,0.124],[1.134,-0.408],[0.312,-0.41],[0.117,-0.926],[-0.117,-0.926],[-0.312,-0.41]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.917,22.123],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 28","np":4,"cix":2,"bm":0,"ix":28,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[0,-0.153],[-0.116,0.153],[0.116,0.153]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[95.984,21.042],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 29","np":4,"cix":2,"bm":0,"ix":29,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-1.134,-0.408],[-0.505,0.124],[-0.702,0.926],[-0.001,0.492],[0.701,0.926],[0.504,0.124],[1.134,-0.408],[0.312,-0.41],[0.115,-0.926],[-0.117,-0.926],[-0.312,-0.41]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[95.984,22.123],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 30","np":4,"cix":2,"bm":0,"ix":30,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[0,-0.332],[-0.252,0.332],[0.252,0.332]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[108.317,14.967],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 31","np":4,"cix":2,"bm":0,"ix":31,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-1.134,-0.586],[-0.505,-0.054],[-0.701,0.747],[0,0.314],[0.7,0.747],[0.505,-0.054],[1.134,-0.586],[0.311,-0.586],[0.252,-0.747],[-0.251,-0.747],[-0.311,-0.586]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[108.317,16.045],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 32","np":4,"cix":2,"bm":0,"ix":32,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[0,-0.332],[-0.252,0.332],[0.252,0.332]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[103.385,14.967],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 33","np":4,"cix":2,"bm":0,"ix":33,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-1.134,-0.586],[-0.505,-0.054],[-0.701,0.747],[0,0.314],[0.702,0.747],[0.503,-0.054],[1.134,-0.586],[0.311,-0.586],[0.252,-0.747],[-0.251,-0.747],[-0.311,-0.586]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[103.384,16.045],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 34","np":4,"cix":2,"bm":0,"ix":34,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-0.001,-0.332],[-0.251,0.332],[0.251,0.332]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.45,14.967],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 35","np":4,"cix":2,"bm":0,"ix":35,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-1.134,-0.586],[-0.505,-0.054],[-0.702,0.747],[-0.001,0.314],[0.701,0.747],[0.504,-0.054],[1.134,-0.586],[0.312,-0.586],[0.251,-0.747],[-0.251,-0.747],[-0.312,-0.586]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.451,16.045],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 36","np":4,"cix":2,"bm":0,"ix":36,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.018,0.073],[0,0]],"v":[[0.504,0.642],[1.133,0.109],[0.312,0.109],[0,-0.715],[-0.311,0.109],[-1.133,0.109],[-0.503,0.642],[0.524,0.715]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.853,17.532],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 37","np":4,"cix":2,"bm":0,"ix":37,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0,-0.072],[0.701,0.364],[0.522,-0.364],[-0.523,-0.364],[-0.701,0.364]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.851,18.613],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 38","np":4,"cix":2,"bm":0,"ix":38,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.018,0.073],[0,0]],"v":[[0.504,0.642],[1.133,0.109],[0.312,0.109],[0,-0.715],[-0.311,0.109],[-1.133,0.109],[-0.503,0.642],[0.523,0.715]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.918,17.532],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 39","np":4,"cix":2,"bm":0,"ix":39,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.001,-0.072],[0.702,0.364],[0.522,-0.364],[-0.522,-0.364],[-0.702,0.364]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.918,18.613],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 40","np":4,"cix":2,"bm":0,"ix":40,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.019,0.073],[0,0]],"v":[[0.506,0.642],[1.134,0.109],[0.311,0.109],[0.001,-0.715],[-0.311,0.109],[-1.134,0.109],[-0.504,0.642],[0.522,0.715]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[95.983,17.532],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 41","np":4,"cix":2,"bm":0,"ix":41,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0,-0.072],[0.702,0.364],[0.522,-0.364],[-0.522,-0.364],[-0.702,0.364]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[95.983,18.613],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 42","np":4,"cix":2,"bm":0,"ix":42,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[1.135,-0.069],[0.311,-0.069],[0,-0.894],[-0.312,-0.069],[-1.135,-0.069],[-0.505,0.463],[-0.609,0.894],[-0.103,0.894],[0,0.831],[0.104,0.894],[0.612,0.894],[0.505,0.463]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[108.317,11.457],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 43","np":4,"cix":2,"bm":0,"ix":43,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[0.298,0.185],[0.209,-0.185],[-0.298,-0.185]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[108.72,12.536],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 44","np":4,"cix":2,"bm":0,"ix":44,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-0.299,0.185],[0.299,-0.185],[-0.208,-0.185]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[107.916,12.536],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 45","np":4,"cix":2,"bm":0,"ix":45,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.05,-0.02],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.05,0.02],[0,0],[0,0]],"v":[[-1.134,-0.155],[-0.504,0.378],[-0.611,0.807],[-0.104,0.807],[-0.001,0.744],[0.103,0.807],[0.61,0.807],[0.504,0.378],[1.134,-0.155],[0.311,-0.155],[0.064,-0.807],[-0.087,-0.752],[-0.312,-0.156]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[103.384,11.542],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 46","np":4,"cix":2,"bm":0,"ix":46,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[0.299,0.185],[0.208,-0.185],[-0.299,-0.185]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[103.786,12.536],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 47","np":4,"cix":2,"bm":0,"ix":47,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-0.298,0.185],[0.298,-0.185],[-0.209,-0.185]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.981,12.536],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 48","np":4,"cix":2,"bm":0,"ix":48,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-0.7,1.079],[0.001,0.645],[0.7,1.079],[0.506,0.277],[1.134,-0.254],[0.311,-0.256],[0.001,-1.079],[-0.311,-0.256],[-1.134,-0.254],[-0.506,0.277]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.851,13.825],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 49","np":4,"cix":2,"bm":0,"ix":49,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-0.701,1.079],[0,0.645],[0.701,1.079],[0.505,0.277],[1.133,-0.254],[0.312,-0.256],[0,-1.079],[-0.312,-0.256],[-1.133,-0.254],[-0.505,0.277]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.917,13.825],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 50","np":4,"cix":2,"bm":0,"ix":50,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0.946,-0.601],[0,0]],"o":[[0,0],[0,0],[0,0],[-1.05,0.431],[0,0],[0,0]],"v":[[1.078,0.348],[0.448,-0.184],[1.272,-0.184],[1.496,-0.78],[-1.496,0.78],[0.974,0.78]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.16862745098,0.564705882353,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.802,11.572],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 51","np":4,"cix":2,"bm":0,"ix":51,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-0.103,0.031],[0.103,0.031],[-0.001,-0.031]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.16862745098,0.564705882353,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[108.318,12.319],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 52","np":4,"cix":2,"bm":0,"ix":52,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[1.927,-0.771],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.175,0.104],[0,0],[0,0]],"v":[[-2.49,0.512],[-3.12,1.044],[-3.013,1.474],[0.701,1.474],[0.807,1.044],[0.177,0.512],[1,0.512],[1.311,-0.311],[1.622,0.512],[2.445,0.512],[1.815,1.044],[1.92,1.474],[3.557,1.474],[3.557,-1.474],[2.623,-1.474],[-3.557,-0.142],[-3.31,0.51]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.16862745098,0.564705882353,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[107.009,10.876],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 53","np":4,"cix":2,"bm":0,"ix":53,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-0.103,0.031],[0.103,0.031],[0,-0.031]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.16862745098,0.564705882353,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[103.384,12.319],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 54","np":4,"cix":2,"bm":0,"ix":54,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-3.032,-0.255],[-2.721,-1.078],[-2.409,-0.255],[-1.587,-0.255],[-2.217,0.277],[-2.022,1.077],[-2.722,0.643],[-3.423,1.077],[-3.226,0.277],[-3.855,-0.255]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[1.903,-0.255],[2.214,-1.078],[2.526,-0.255],[3.347,-0.255],[2.718,0.277],[2.915,1.077],[2.214,0.643],[1.514,1.077],[1.711,0.277],[1.081,-0.255]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[1.072,-1.121],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.314,0.838]],"v":[[-6.927,1.474],[-5.439,1.474],[-5.187,0.81],[-4.935,1.474],[-0.504,1.474],[-0.252,0.81],[-0.001,1.474],[4.429,1.474],[4.681,0.81],[4.933,1.474],[6.927,1.474],[6.927,-1.474],[5.29,-1.474],[5.382,-1.105],[4.784,-1.474],[4.577,-1.474],[3.978,-1.105],[4.07,-1.474],[0.356,-1.474],[0.447,-1.105],[-0.151,-1.474],[-0.358,-1.474],[-0.956,-1.105],[-0.865,-1.474],[-3.335,-1.474]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.16862745098,0.564705882353,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[103.637,13.825],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 55","np":7,"cix":2,"bm":0,"ix":55,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.674,-1.059],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.863,0.903],[0,0],[0.018,-0.073],[0,0],[0,0],[0,0],[0,0],[0,0],[0.018,0.073],[0.018,-0.073],[0,0],[0,0],[0,0],[0,0],[0,0],[0.019,0.073],[0.019,-0.073],[0,0],[0,0],[0,0],[0,0],[0,0],[0.018,0.073],[0,0],[0,0],[0,0]],"v":[[6.143,-1.316],[6.965,-1.316],[6.335,-0.783],[6.532,0.019],[5.832,-0.415],[5.131,0.019],[5.328,-0.783],[4.699,-1.316],[5.522,-1.316],[5.581,-1.475],[1.152,-1.475],[1.211,-1.316],[2.035,-1.316],[1.405,-0.783],[1.602,0.019],[0.902,-0.415],[0.201,0.019],[0.396,-0.783],[-0.233,-1.316],[0.59,-1.316],[0.65,-1.475],[-3.781,-1.475],[-3.722,-1.316],[-2.9,-1.316],[-3.53,-0.783],[-3.332,0.019],[-4.033,-0.415],[-4.734,0.019],[-4.537,-0.783],[-5.166,-1.316],[-4.343,-1.316],[-4.283,-1.475],[-5.771,-1.475],[-8.08,1.475],[-7.02,1.475],[-7.631,0.868],[-6.808,0.868],[-6.497,0.045],[-6.185,0.868],[-5.362,0.868],[-5.991,1.402],[-2.085,1.475],[-2.696,0.868],[-1.875,0.868],[-1.563,0.045],[-1.252,0.868],[-0.43,0.868],[-1.06,1.402],[2.846,1.475],[2.235,0.868],[3.057,0.868],[3.368,0.045],[3.68,0.868],[4.501,0.868],[3.872,1.402],[8.08,1.475],[8.08,-1.475],[6.085,-1.475]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.16862745098,0.564705882353,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.486,16.775],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 56","np":4,"cix":2,"bm":0,"ix":56,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[6.292,-0.193],[6.603,-1.016],[6.915,-0.193],[7.736,-0.193],[7.106,0.34],[7.303,1.142],[6.603,0.707],[5.902,1.142],[6.1,0.34],[5.47,-0.193]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[2.371,1.142],[1.67,0.707],[0.968,1.142],[1.165,0.34],[0.535,-0.193],[1.358,-0.193],[1.67,-1.016],[1.981,-0.193],[2.804,-0.193],[2.175,0.34]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-2.562,1.142],[-3.264,0.707],[-3.965,1.142],[-3.767,0.34],[-4.397,-0.193],[-3.574,-0.193],[-3.262,-1.016],[-2.95,-0.193],[-2.129,-0.193],[-2.759,0.34]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.202,-0.367],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.07,-0.168],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.226,0.353],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.074,0.166],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[4.837,-0.748],[4.137,-1.181],[3.436,-0.748],[3.615,-1.475],[-0.273,-1.475],[-0.095,-0.748],[-0.796,-1.181],[-1.496,-0.748],[-1.317,-1.475],[-5.205,-1.475],[-5.027,-0.748],[-5.726,-1.181],[-6.428,-0.748],[-6.249,-1.475],[-7.309,-1.475],[-7.962,-0.402],[-7.882,-0.193],[-7.059,-0.193],[-7.689,0.34],[-7.491,1.142],[-8.191,0.707],[-8.632,0.98],[-8.855,1.475],[-5.842,1.475],[-5.725,1.168],[-5.609,1.475],[-0.908,1.475],[-0.791,1.168],[-0.676,1.475],[4.025,1.475],[4.142,1.168],[4.257,1.475],[8.855,1.475],[8.855,-1.475],[4.663,-1.475]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.16862745098,0.564705882353,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.715,19.724],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 57","np":8,"cix":2,"bm":0,"ix":57,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.238,-1.016],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.391,0.946],[0,0],[0.003,-0.01],[0,0],[0,0],[0,0],[0,0],[0,0],[0.003,0.01],[0.001,-0.01],[0,0],[0,0],[0,0],[0,0],[0,0],[0.002,0.01],[0.002,-0.01],[0,0],[0,0],[0,0],[0,0],[0,0],[0.004,0.01],[0.002,-0.01],[0,0],[0,0],[0,0],[0,0],[0,0],[0.004,0.01],[0,0],[0,0],[0,0]],"v":[[4.921,-0.955],[5.743,-0.955],[5.113,-0.422],[5.31,0.378],[4.61,-0.057],[3.909,0.378],[4.106,-0.422],[3.476,-0.955],[4.298,-0.955],[4.494,-1.471],[-0.208,-1.471],[-0.012,-0.955],[0.809,-0.955],[0.18,-0.422],[0.375,0.378],[-0.325,-0.057],[-1.026,0.378],[-0.829,-0.422],[-1.458,-0.955],[-0.637,-0.955],[-0.441,-1.471],[-5.143,-1.471],[-4.947,-0.955],[-4.124,-0.955],[-4.753,-0.422],[-4.556,0.378],[-5.257,-0.057],[-5.958,0.378],[-5.762,-0.422],[-6.392,-0.955],[-5.568,-0.955],[-5.373,-1.471],[-8.386,-1.471],[-9.322,1.477],[-8.23,1.477],[-8.858,0.933],[-8.037,0.933],[-7.725,0.11],[-7.414,0.933],[-6.59,0.933],[-7.22,1.466],[-3.297,1.476],[-3.925,0.932],[-3.102,0.932],[-2.79,0.109],[-2.479,0.932],[-1.657,0.932],[-2.287,1.464],[1.636,1.474],[1.008,0.93],[1.831,0.93],[2.143,0.107],[2.454,0.93],[3.278,0.93],[2.648,1.463],[6.571,1.472],[5.943,0.929],[6.766,0.929],[7.078,0.106],[7.389,0.929],[8.211,0.929],[7.581,1.461],[9.322,1.471],[9.322,-1.477],[4.726,-1.477]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.16862745098,0.564705882353,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.241,22.668],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 58","np":4,"cix":2,"bm":0,"ix":58,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-0.66,0.204],[0.66,0.204],[-0.001,-0.204]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.16862745098,0.564705882353,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[95.984,26.89],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 59","np":4,"cix":2,"bm":0,"ix":59,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.003,-0.048],[0,0],[0,0]],"o":[[0,0],[0,0],[-0.004,0.046]],"v":[[-0.12,0.072],[0.12,0.072],[-0.113,-0.072]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.16862745098,0.564705882353,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[91.589,27.023],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 60","np":4,"cix":2,"bm":0,"ix":60,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.079,-0.555],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.126,0.538],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[7.956,-0.685],[7.254,-1.118],[6.555,-0.685],[6.748,-1.475],[2.829,-1.475],[3.022,-0.685],[2.322,-1.118],[1.621,-0.685],[1.814,-1.475],[-2.105,-1.475],[-1.91,-0.685],[-2.611,-1.118],[-3.312,-0.685],[-3.118,-1.475],[-7.038,-1.475],[-6.845,-0.685],[-7.544,-1.118],[-8.246,-0.685],[-8.051,-1.475],[-9.144,-1.475],[-9.447,0.165],[-8.876,0.165],[-9.507,0.699],[-9.316,1.475],[-7.635,1.475],[-7.543,1.23],[-7.45,1.475],[-5.77,1.475],[-5.58,0.699],[-6.21,0.165],[-5.387,0.165],[-5.074,-0.659],[-4.764,0.165],[-3.941,0.165],[-4.569,0.699],[-4.379,1.475],[-2.699,1.475],[-2.606,1.23],[-2.514,1.475],[-0.835,1.475],[-0.644,0.699],[-1.273,0.165],[-0.452,0.165],[-0.14,-0.659],[0.171,0.165],[0.993,0.165],[0.363,0.699],[0.555,1.475],[2.233,1.475],[2.327,1.23],[2.42,1.475],[4.1,1.475],[4.29,0.699],[3.66,0.165],[4.481,0.165],[4.793,-0.659],[5.105,0.165],[5.926,0.165],[5.296,0.699],[5.488,1.475],[7.167,1.475],[7.259,1.23],[7.353,1.475],[9.507,1.475],[9.507,-1.475],[7.767,-1.475]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.16862745098,0.564705882353,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.063,25.622],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 61","np":4,"cix":2,"bm":0,"ix":61,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-0.66,0.204],[0.66,0.204],[0.001,-0.204]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.16862745098,0.564705882353,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.917,26.89],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 62","np":4,"cix":2,"bm":0,"ix":62,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-0.661,0.204],[0.661,0.204],[0,-0.204]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.16862745098,0.564705882353,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.852,26.89],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 63","np":4,"cix":2,"bm":0,"ix":63,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,-0.482],[-0.038,-0.502],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.035,0.472],[0,0.513],[0,0],[0,0],[0,0]],"v":[[9.57,-1.475],[7.416,-1.475],[7.637,-0.895],[8.458,-0.895],[7.829,-0.361],[8.026,0.439],[7.325,0.004],[6.625,0.439],[6.822,-0.361],[6.192,-0.895],[7.016,-0.895],[7.236,-1.475],[5.556,-1.475],[4.201,-1.475],[2.487,-1.475],[2.707,-0.895],[3.53,-0.895],[2.901,-0.361],[3.098,0.439],[2.397,0.004],[1.696,0.439],[1.892,-0.361],[1.262,-0.895],[2.086,-0.895],[2.306,-1.475],[0.626,-1.475],[-0.729,-1.475],[-2.443,-1.475],[-2.223,-0.895],[-1.401,-0.895],[-2.031,-0.361],[-1.834,0.439],[-2.534,0.004],[-3.235,0.439],[-3.038,-0.361],[-3.667,-0.895],[-2.844,-0.895],[-2.625,-1.475],[-4.305,-1.475],[-5.66,-1.475],[-7.375,-1.475],[-7.155,-0.895],[-6.331,-0.895],[-6.961,-0.361],[-6.764,0.439],[-7.464,0.004],[-8.165,0.439],[-7.968,-0.361],[-8.597,-0.895],[-7.776,-0.895],[-7.555,-1.475],[-9.235,-1.475],[-9.51,-1.475],[-9.583,-0.046],[-9.507,1.475],[9.583,1.475],[9.583,-1.475]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.16862745098,0.564705882353,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.994,28.57],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 64","np":4,"cix":2,"bm":0,"ix":64,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[3.423,0.166],[0,0]],"o":[[0,0],[-2.72,-1.729],[0,0],[0,0]],"v":[[-5.129,1.474],[5.129,1.474],[-4.196,-1.474],[-5.129,-1.474]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.89019613827,0.023529413635,0.074509803922,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[115.693,10.876],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 65","np":4,"cix":2,"bm":0,"ix":65,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[1.317,0.837],[0,0]],"o":[[0,0],[-1.072,-1.123],[0,0],[0,0]],"v":[[-6.927,1.474],[6.927,1.474],[3.332,-1.474],[-6.927,-1.474]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[117.49,13.825],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 66","np":4,"cix":2,"bm":0,"ix":66,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0.863,0.903],[0,0]],"o":[[0,0],[-0.674,-1.059],[0,0],[0,0]],"v":[[-8.081,1.474],[8.081,1.474],[5.772,-1.474],[-8.081,-1.474]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.89019613827,0.023529413635,0.074509803922,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[118.645,16.774],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 67","np":4,"cix":2,"bm":0,"ix":67,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0.595,0.935],[0,0]],"o":[[0,0],[-0.427,-1.034],[0,0],[0,0]],"v":[[-8.855,1.474],[8.855,1.474],[7.308,-1.474],[-8.855,-1.474]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[119.418,19.722],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 68","np":4,"cix":2,"bm":0,"ix":68,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0.391,0.946],[0,0],[0,0]],"o":[[0,0],[-0.237,-1.016],[0,0],[0,0],[0,0]],"v":[[-9.323,1.474],[9.323,1.474],[8.389,-1.474],[-9.321,-1.474],[-9.321,1.474]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.89019613827,0.023529413635,0.074509803922,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[119.886,22.673],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 69","np":4,"cix":2,"bm":0,"ix":69,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0.224,0.958],[0,0]],"o":[[0,0],[-0.075,-1.007],[0,0],[0,0]],"v":[[-9.547,1.474],[9.547,1.474],[9.099,-1.474],[-9.547,-1.474]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[120.111,25.622],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 70","np":4,"cix":2,"bm":0,"ix":70,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0.514],[0.035,0.474],[0,0]],"o":[[0,0],[0.04,-0.504],[0,-0.482],[0,0],[0,0]],"v":[[-9.583,1.474],[9.507,1.474],[9.583,-0.047],[9.512,-1.474],[-9.583,-1.474]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.89019613827,0.023529413635,0.074509803922,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[120.146,28.569],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 71","np":4,"cix":2,"bm":0,"ix":71,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.229,-0.958],[0,0],[-0.079,1.007],[0,0]],"o":[[0.079,1.007],[0,0],[0.228,-0.958],[0,0],[0,0]],"v":[[-19.09,-1.475],[-18.621,1.475],[18.622,1.475],[19.09,-1.475],[0,-1.475]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[110.564,31.519],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 72","np":4,"cix":2,"bm":0,"ix":72,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.398,-0.944],[0,0],[-0.244,1.014],[0,0]],"o":[[0,0],[0.398,-0.944],[0,0],[0.244,1.014]],"v":[[-17.675,1.474],[17.675,1.474],[18.622,-1.474],[-18.622,-1.474]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.89019613827,0.023529413635,0.074509803922,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[110.565,34.467],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 73","np":4,"cix":2,"bm":0,"ix":73,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.601,-0.933],[0,0],[-0.435,1.036],[0,0]],"o":[[0,0],[0.601,-0.933],[0,0],[0.434,1.036]],"v":[[-16.105,1.474],[16.104,1.474],[17.675,-1.474],[-17.675,-1.474]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[110.564,37.416],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 74","np":4,"cix":2,"bm":0,"ix":74,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.873,-0.903],[0,0],[-0.684,1.059],[0,0]],"o":[[0,0],[0.873,-0.901],[0,0],[0.682,1.059]],"v":[[-13.768,1.474],[13.767,1.474],[16.105,-1.474],[-16.105,-1.474]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.89019613827,0.023529413635,0.074509803922,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[110.564,40.364],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 75","np":4,"cix":2,"bm":0,"ix":75,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.34,-0.835],[0,0],[-1.094,1.128],[0,0]],"o":[[0,0],[1.341,-0.833],[0,0],[1.09,1.128]],"v":[[-10.105,1.474],[10.103,1.474],[13.768,-1.474],[-13.768,-1.474]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[110.566,43.313],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 76","np":4,"cix":2,"bm":0,"ix":76,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.714,0],[-2.937,1.829],[0,0]],"o":[[3.714,0],[0,0],[2.935,1.827]],"v":[[-0.001,1.451],[10.104,-1.451],[-10.104,-1.451]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.89019613827,0.023529413635,0.074509803922,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[110.565,46.239],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 77","np":4,"cix":2,"bm":0,"ix":77,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.92,-0.61],[1.396,-5.13],[0.844,-0.124],[-0.12,0.986],[-0.16,1.867],[0.887,4.88]],"o":[[-0.25,8.686],[-0.832,0.161],[0.074,-0.524],[0.16,-1.316],[0.45,-5.217],[1.534,0.573]],"v":[[2.961,-10.285],[-0.446,11.58],[-2.961,12.005],[-2.662,9.703],[-2.16,4.847],[-2.317,-12.004]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.298039215686,0.760784373564,0.729411764706,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[67.346,99.686],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 78","np":4,"cix":2,"bm":0,"ix":78,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.345,-2.542],[1.184,0.333],[0.262,8.005],[-1.759,0.66],[0.089,-1.504],[-0.028,-1.676]],"o":[[-1.211,-0.253],[-1.322,-5.084],[2.234,-0.73],[-0.237,1.301],[-0.096,1.596],[0.092,5.839]],"v":[[3.352,11.702],[-0.241,10.824],[-3.353,-9.706],[2.785,-11.703],[2.308,-7.466],[2.218,-2.521]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.298039215686,0.760784373564,0.729411764706,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[41.39,99.384],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 79","np":4,"cix":2,"bm":0,"ix":79,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.036,0.242],[0.633,2.21],[0.571,0.965],[0.972,0.353],[-0.079,-0.302],[-0.498,-0.764],[-0.388,-1.005],[0.239,-2.096]],"o":[[0.34,-2.263],[-0.309,-1.078],[-0.507,-0.855],[-0.323,-0.117],[0.235,0.896],[0.588,0.903],[0.757,1.966],[-0.027,0.241]],"v":[[1.998,5.941],[1.657,-0.765],[0.329,-3.84],[-1.722,-6.067],[-2.258,-5.528],[-0.755,-3.208],[0.726,-0.323],[1.571,5.883]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.411764735802,0.298039215686,0.211764720842,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[52.937,17.717],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 80","np":4,"cix":2,"bm":0,"ix":80,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.14,-0.096],[2.2,-3.146],[1.742,-1.17],[0.265,1.625],[-0.592,0.947],[0.343,-0.196],[-1.994,-1.722],[-1.388,1.525],[-4.376,3.207]],"o":[[-3.231,2.214],[-1.186,1.696],[-1.017,0.683],[-0.203,-1.242],[0.219,-0.35],[-1.799,1.025],[1.985,1.714],[3.582,-3.934],[0.133,-0.097]],"v":[[8.585,-8.065],[1.196,0.6],[-3.054,5.297],[-6.284,4.667],[-4.765,1.491],[-5.318,0.938],[-6.855,6.447],[-1.057,4.808],[8.716,-7.841]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.411764735802,0.298039215686,0.211764720842,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[36.45,30.615],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 81","np":4,"cix":2,"bm":0,"ix":81,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.295,0.215],[-3.021,-0.852],[-1.125,-1.12],[-0.952,-1.471],[-3.051,0.743],[-0.166,1.255],[1.201,0.133],[-0.165,-0.293],[0.173,-0.709],[0.862,0.061],[0.932,1.17],[2.188,1.698],[3.84,-3.02]],"o":[[2.553,-1.863],[1.523,0.429],[1.253,1.246],[1.454,2.244],[1.197,-0.292],[0.144,-1.1],[-0.384,-0.042],[0.317,0.563],[-0.23,0.941],[-1.579,-0.113],[-1.69,-2.123],[-3.885,-3.016],[-0.283,0.224]],"v":[[-12.388,-3.357],[-3.443,-4.827],[0.639,-2.498],[3.695,1.796],[10.541,6.208],[12.918,3.747],[11.356,1.256],[10.935,1.99],[11.53,3.753],[9.349,5.01],[5.567,2.434],[0.561,-3.934],[-12.779,-3.861]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.411764735802,0.298039215686,0.211764720842,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[67.216,27.382],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 82","np":4,"cix":2,"bm":0,"ix":82,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.164,-0.214],[1.3,-6.587],[2.177,-6.783],[1.323,-0.909],[0.444,0.085],[0.241,0.046],[-0.136,-0.333],[1.31,-0.36],[-0.403,-1.191],[-2.38,2.631],[-0.374,1.589],[-0.319,1.902],[-2.294,7.642],[-2.296,3.668]],"o":[[-4.076,5.306],[-1.37,6.941],[-0.465,1.449],[-0.445,0.306],[-0.32,-0.061],[0.14,0.027],[-0.474,-1.158],[-1.156,0.318],[1.174,3.468],[1.109,-1.225],[0.441,-1.875],[1.315,-7.84],[1.243,-4.142],[0.152,-0.244]],"v":[[10.134,-24.06],[1.915,-6.265],[-1.6,14.594],[-4.052,18.88],[-5.201,19.122],[-5.749,18.93],[-5.785,19.003],[-8.638,17.384],[-10.257,20.236],[-2.273,21.643],[-0.201,17.278],[1.025,11.637],[5.176,-11.92],[10.508,-23.841]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.458823559331,0.345098039216,0.266666666667,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[22.388,40.716],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 83","np":4,"cix":2,"bm":0,"ix":83,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.248,0.39],[0.367,0.2],[1.454,-0.057],[-1.183,-0.636],[-1.767,0.809]],"o":[[-0.432,-0.68],[-1.264,-0.687],[-2.224,0.088],[1.576,0.847],[0.549,-0.251]],"v":[[4.114,0.495],[2.126,-1.112],[-2.137,-2.263],[-3.167,0.271],[3.812,1.512]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784313725,0.270588235294,0.207843152214,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[64.958,36.929],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 84","np":4,"cix":2,"bm":0,"ix":84,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.27,0.375],[-0.378,0.178],[-1.449,-0.143],[1.218,-0.565],[1.717,0.912]],"o":[[0.471,-0.653],[1.303,-0.612],[2.214,0.219],[-1.623,0.753],[-0.532,-0.283]],"v":[[-4.163,0.292],[-2.084,-1.195],[2.24,-2.094],[3.117,0.497],[-3.922,1.325]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784313725,0.270588235294,0.207843152214,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[44.321,36.895],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 85","np":4,"cix":2,"bm":0,"ix":85,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.331,-0.382],[-1.175,-0.946],[-0.693,0.093],[0.082,0.712],[0.144,0.029],[0.367,-0.116],[0.381,0.2],[-0.558,0.703]],"o":[[-0.932,1.077],[0.55,0.443],[0.55,-0.074],[-0.015,-0.131],[-0.404,-0.082],[-0.409,0.13],[-0.801,-0.418],[0.302,-0.381]],"v":[[-1.325,-1.943],[-1.144,1.712],[0.812,2.231],[2.236,1.15],[2.006,0.846],[0.98,1.118],[-0.295,1.014],[-0.778,-1.397]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.921568687289,0.639215686275,0.470588265213,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[54.645,52.024],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 86","np":4,"cix":2,"bm":0,"ix":86,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.361,-0.016],[-0.584,-0.47],[-0.531,0.009],[-0.047,0.125],[0.488,0.262],[0.798,-0.011]],"o":[[0.75,0.034],[0.383,0.309],[0.141,-0.002],[0.247,-0.663],[-0.707,-0.38],[-0.364,0.005]],"v":[[-1.713,-0.586],[0.305,0.206],[1.544,1.151],[1.83,0.934],[0.593,-0.634],[-1.713,-1.149]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.921568687289,0.639215686275,0.470588265213,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[32.688,48.119],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 87","np":4,"cix":2,"bm":0,"ix":87,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.272,-0.236],[-0.32,-1.004],[-0.361,-0.742],[-0.143,0.284],[0.379,0.825],[0.901,0.698]],"o":[[0.799,0.692],[0.254,0.798],[0.141,0.291],[0.435,-0.858],[-0.481,-1.045],[-0.271,-0.211]],"v":[[-1.538,-2.356],[0.101,0.221],[0.615,2.664],[1.375,2.664],[1.031,-0.172],[-1.151,-2.743]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.921568687289,0.639215686275,0.470588265213,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[33.544,47.9],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 88","np":4,"cix":2,"bm":0,"ix":88,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.267,-0.072],[0.638,-0.467],[-0.047,-0.69],[-0.198,0.083],[-0.407,0.4],[-0.714,0.239]],"o":[[-0.758,0.205],[-0.502,0.369],[0.015,0.228],[0.533,-0.227],[0.535,-0.525],[0.258,-0.087]],"v":[[1.525,-1.441],[-0.646,-0.471],[-1.849,1.189],[-1.43,1.43],[-0.182,0.131],[1.638,-1.03]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.921568687289,0.639215686275,0.470588265213,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[76.799,48.202],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 89","np":4,"cix":2,"bm":0,"ix":89,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.247,-0.223],[0.549,-1.16],[-0.484,-0.89],[-0.151,0.202],[-0.277,0.825],[-0.857,0.833]],"o":[[-0.945,0.853],[-0.404,0.853],[0.14,0.258],[0.516,-0.689],[0.379,-1.131],[0.241,-0.235]],"v":[[1.342,-3.006],[-0.995,-0.035],[-1.466,2.97],[-0.849,2.97],[-0.12,0.335],[1.71,-2.637]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.921568687289,0.639215686275,0.470588265213,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[76.289,47.657],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 90","np":4,"cix":2,"bm":0,"ix":90,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.399,0],[0,1.697],[1.399,0],[0,-1.697]],"o":[[1.399,0],[0,-1.697],[-1.399,0],[0,1.697]],"v":[[0,3.072],[2.533,0],[0,-3.072],[-2.533,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784313725,0.270588235294,0.207843152214,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[65.188,44.993],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 91","np":4,"cix":2,"bm":0,"ix":91,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.399,0],[0,1.697],[1.399,0],[0,-1.697]],"o":[[1.399,0],[0,-1.697],[-1.399,0],[0,1.697]],"v":[[0,3.072],[2.533,0],[0,-3.072],[-2.533,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784313725,0.270588235294,0.207843152214,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[44.015,44.993],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 92","np":4,"cix":2,"bm":0,"ix":92,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.277,1.97],[2.454,0.346],[0.278,-1.97],[-2.454,-0.346]],"o":[[0.277,-1.97],[-2.454,-0.345],[-0.277,1.97],[2.453,0.345]],"v":[[4.444,0.625],[0.503,-3.568],[-4.444,-0.626],[-0.501,3.567]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.690196078431,0.521568627451,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[66.794,52.467],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 93","np":4,"cix":2,"bm":0,"ix":93,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.474,0.142],[0.114,1.987],[2.474,-0.142],[-0.113,-1.986]],"o":[[2.474,-0.142],[-0.113,-1.986],[-2.474,0.142],[0.114,1.987]],"v":[[0.207,3.596],[4.479,-0.257],[-0.207,-3.597],[-4.48,0.257]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.690196078431,0.521568627451,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[41.463,52.465],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 94","np":4,"cix":2,"bm":0,"ix":94,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-6.525,1.818],[0.961,-1.133],[1.918,0.73],[0.243,0.545]],"o":[[0,0],[-4.872,1.472],[-0.414,-0.538],[0,0]],"v":[[7.028,-1.73],[5.458,0.41],[-6.028,-0.245],[-7.028,-1.883]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.980392216701,0.925490255917,0.89019613827,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[54.602,59.071],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 95","np":4,"cix":2,"bm":0,"ix":95,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-4.872,1.472],[1.706,-0.209],[1.659,2.154]],"o":[[-1.133,1.331],[-2.524,0.309],[1.918,0.73]],"v":[[5.743,-1.347],[1.276,1.692],[-5.743,-2.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.788235353956,0.388235324037,0.231372563979,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[54.316,60.828],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 96","np":4,"cix":2,"bm":0,"ix":96,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-5.192,-0.708],[-2.596,3.54],[0,0],[1.888,3.776],[0,0],[5.458,4.248],[0,0],[5.458,-4.249],[0,0],[1.888,-3.776],[-4.72,-0.236],[-2.596,-3.541]],"o":[[5.192,-0.708],[2.596,-3.54],[4.72,-0.236],[-1.888,-3.776],[0,0],[-5.458,-4.249],[0,0],[-5.458,4.248],[0,0],[-1.888,3.776],[0,0],[2.596,3.54]],"v":[[0,27.141],[16.048,16.757],[19.117,7.552],[25.253,-1.416],[19.353,-4.248],[9.882,-22.892],[0,-21.948],[-9.882,-22.892],[-19.353,-4.248],[-25.253,-1.416],[-19.117,7.552],[-16.048,16.757]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.768627510819,0.611764705882,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[54.602,46.093],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 97","np":4,"cix":2,"bm":0,"ix":97,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.376,-3.768],[2.351,-0.659],[0.228,1.575],[0,0]],"o":[[0,0],[-4.643,3.42],[-0.16,-4.788],[0,0],[0,0]],"v":[[7.05,-6.359],[6.192,0.589],[-5.839,6.36],[-7.05,-5.962],[-3.614,-6.359]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.768627510819,0.611764705882,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[54.632,72.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 98","np":4,"cix":2,"bm":0,"ix":98,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[7.101,-1.031],[1.204,6.621],[-4.782,-2.428]],"o":[[0,0],[-6.194,3.611],[0.941,-6.666],[3.398,1.268],[7.111,3.61]],"v":[[11.331,3.357],[8.746,4.979],[-11.331,12.004],[-10.687,-12.004],[2.017,-7.333]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.298039215686,0.760784373564,0.729411764706,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[75.716,99.686],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 99","np":4,"cix":2,"bm":0,"ix":99,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.887,-6.532],[6.381,4.727],[-3.601,2.089],[-3.613,1.354]],"o":[[-7.989,-1.67],[1.453,-3.25],[4.109,-2.429],[-1.183,6.486]],"v":[[10.895,11.702],[-10.895,1.914],[-2.998,-6.679],[10.328,-11.702]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.298039215686,0.760784373564,0.729411764706,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[33.847,99.384],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 100","np":4,"cix":2,"bm":0,"ix":100,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[2.296,-5.602],[4.082,-0.596],[8.361,2.718],[0,0],[-16.049,2.36]],"o":[[-3.792,1.444],[-8.295,1.21],[0,0],[0,0],[8.982,-1.319]],"v":[[17.149,3.688],[5.299,6.773],[-20.072,4.646],[-17.231,-6.193],[11.09,-6.664]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.800000059838,1,0.952941236309,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[59.087,104.918],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 101","np":4,"cix":2,"bm":0,"ix":101,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.024,-0.024],[17.712,13.122],[-5.454,2.921],[-1.653,3.068],[0.48,3.085],[0,0],[-1.471,-2.732],[-1.969,-0.733],[0,0],[-4.224,-2.261]],"o":[[-2.058,2.951],[-19.633,11.414],[0.668,-1.495],[6.597,-3.532],[1.473,-2.733],[0,0],[-0.465,3.078],[0.598,1.11],[0,0],[3.488,1.304],[6.606,3.541]],"v":[[31.756,10.557],[29.75,13.432],[-31.756,10.061],[-23.234,1.116],[-6.478,-6.202],[-7.184,-24.846],[6.974,-24.846],[6.265,-6.202],[10.32,-3.558],[10.32,-3.555],[23.024,1.116]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.768627510819,0.611764705882,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[54.709,91.237],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 102","np":4,"cix":2,"bm":0,"ix":102,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.285,3.947],[-7.41,-3.812],[13.69,4.012],[-0.096,0.502],[-2.789,-8.122],[0,0],[0,0],[0,0],[-0.237,2.123],[4.181,16.756],[7.999,-8.652],[-0.709,2.123],[-0.971,5.189],[-0.289,5.925],[-11.055,-6.184],[-5.663,9.675],[-3.186,2.36],[-0.444,0.253],[-0.071,0.037],[-0.567,-2.626],[-2.021,-3.165],[-1.537,-0.637],[-0.29,0.265],[-0.065,0.207],[-0.025,0.093],[-1.187,-0.536],[1.618,-1.743],[1.957,0.977]],"o":[[0.884,6.588],[0,0],[-13.527,-3.962],[-0.136,0.33],[2.831,8.261],[0,0],[0,0],[0,0],[0.238,-2.126],[0,0],[0,0],[0.709,-2.126],[0.61,-3.254],[1.208,3.266],[13.924,7.786],[4.006,-6.843],[0.478,-0.351],[0.07,-0.04],[0.342,2.644],[0.789,3.648],[0.866,1.355],[0.395,0.164],[0.169,-0.151],[0.003,-0.099],[-0.253,-1.398],[2.249,1.02],[-1.507,1.618],[-3.906,-1.951]],"v":[[28.434,-9.017],[39.249,7.024],[25.088,19.767],[15.644,-5.714],[14.233,12.921],[16.356,22.599],[5.263,21.182],[-33.51,24.013],[-36.746,18.587],[-33.51,-10.678],[-39.577,15.281],[-42.646,7.495],[-37.716,-4.857],[-36.342,-19.41],[-20.015,-1.394],[15.385,-9.183],[26.465,-22.987],[27.849,-23.896],[28.061,-24.013],[29.355,-16.1],[33.333,-5.63],[37.061,-1.687],[38.044,-1.671],[38.269,-2.346],[38.309,-2.636],[40.848,-4.324],[41.67,1.126],[35.948,2.097]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.458823559331,0.345098039216,0.266666666667,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[61.086,72.348],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 103","np":4,"cix":2,"bm":0,"ix":103,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.618,-1.744],[1.957,0.977],[1.285,3.947],[0.009,0.034],[0.154,4.689],[1.584,5.712],[-0.053,-0.157],[-0.607,-4.794],[-0.102,-0.789],[-0.567,-2.625],[-2.021,-3.164],[-1.537,-0.637],[-0.289,0.265],[-0.065,0.207],[-0.025,0.093],[-1.186,-0.536]],"o":[[-1.507,1.618],[-3.907,-1.95],[-0.012,-0.034],[-1.454,-4.511],[-0.194,-5.913],[-0.046,-0.163],[1.516,4.668],[0.099,0.792],[0.342,2.644],[0.789,3.649],[0.866,1.356],[0.394,0.164],[0.169,-0.151],[0.003,-0.099],[-0.253,-1.398],[2.25,1.019]],"v":[[7.669,19.981],[1.947,20.952],[-5.568,9.839],[-5.602,9.736],[-7.537,-4.132],[-9.241,-21.7],[-8.991,-21.772],[-6.243,-7.527],[-5.941,-5.158],[-4.647,2.754],[-0.669,13.225],[3.059,17.168],[4.042,17.184],[4.267,16.509],[4.307,16.22],[6.846,14.532]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.458823559331,0.345098039216,0.266666666667,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[95.088,53.493],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 104","np":4,"cix":2,"bm":0,"ix":104,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-7.41,-3.811],[13.69,4.011],[-0.096,0.503],[-2.789,-8.122],[0,0],[0,0],[0,0],[-0.237,2.123],[4.181,16.755],[7.999,-8.652],[-0.709,2.123],[-0.97,5.189],[-0.289,5.925],[0.031,4.557],[-7.314,3.069],[0,0],[-10.858,-4.011],[-3.802,-15.969],[-0.16,-3.165],[-0.018,-0.826],[-0.623,-4.601]],"o":[[0,0],[-13.527,-3.963],[-0.136,0.33],[2.831,8.261],[0,0],[0,0],[0,0],[0.238,-2.126],[0,0],[0,0],[0.709,-2.126],[0.61,-3.254],[0.225,-4.631],[-0.105,-15.499],[7.318,-3.069],[0,0],[10.855,4.012],[0.755,3.18],[0.04,0.832],[0.142,5.219],[0.884,6.587]],"v":[[41.302,29.03],[27.141,41.774],[17.697,16.292],[16.286,34.927],[18.409,44.605],[7.316,43.188],[-31.457,46.021],[-34.693,40.594],[-31.457,11.329],[-37.524,37.289],[-40.593,29.503],[-35.663,17.149],[-34.289,2.597],[-33.984,-11.564],[-20.769,-39.411],[-8.496,-38.231],[6.845,-42.01],[28.558,-13.924],[29.812,-4.375],[29.901,-1.888],[30.487,12.99]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.458823559331,0.345098039216,0.266666666667,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[59.033,50.341],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 105","np":4,"cix":2,"bm":0,"ix":105,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-30.935],[15.488,-9.557],[12.715,9.419],[0,0],[0,18.456],[-30.935,0]],"o":[[0,19.559],[-26.814,16.547],[0,0],[-13.773,-10.208],[0,-30.935],[30.935,0]],"v":[[56.012,-3.657],[30.785,43.123],[-33.309,41.378],[-33.312,41.378],[-56.012,-3.657],[-0.001,-59.67]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.039215686275,0.145098039216,0.250980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[56.261,59.92],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 106","np":4,"cix":2,"bm":0,"ix":106,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":900.000036657751,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Layer 5 Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[56.915,730.796,0],"to":[-94.162,-145,0],"ti":[-493.838,17.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":99.886,"s":[499.941,64.796,0],"to":[152.188,-5.444,0],"ti":[73.004,-473.316,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":199.77,"s":[967.941,660.796,0],"to":[-54.629,354.187,0],"ti":[241.838,506.333,0]},{"t":298.000012137789,"s":[56.915,730.796,0]}],"ix":2},"a":{"a":0,"k":[64.457,57.881,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":38.898,"s":[100,100,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.826,0.826,0.333],"y":[0,0,0]},"t":69.588,"s":[0,0,100]},{"i":{"x":[0,0,0.667],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":229,"s":[0,0,100]},{"t":259.690010577391,"s":[100,100,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.009,-0.004],[-0.037,-0.166],[-0.068,0.014],[0,0],[0.038,0],[0.011,0.113]],"o":[[0.037,0.166],[0.067,-0.015],[0,0],[-0.11,-0.004],[-0.034,-0.042],[-0.118,-0.011]],"v":[[-0.228,-0.256],[-0.117,0.246],[0.085,0.203],[0.212,0.175],[0.025,0.18],[-0.092,-0.252]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0.039,0.17],[-0.016,-0.051],[-0.042,0.009],[-0.037,0.003],[0,0],[0.07,-0.015]],"o":[[-0.041,-0.178],[0.177,0.115],[0.04,0.002],[0.032,-0.007],[-0.025,0.058],[-0.069,0.014],[0,0]],"v":[[-0.127,0.263],[-0.244,-0.26],[0.016,0.166],[0.141,0.15],[0.244,0.133],[0.088,0.217],[-0.12,0.262]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.141176470588,0.141176470588,0.133333333333,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.096,28.575],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":6,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.113,-0.023],[0.039,0.17],[-0.025,0.008],[-0.002,-0.032],[-0.011,-0.036],[-0.09,0.009]],"o":[[-0.039,-0.171],[0.034,-0.014],[0.032,-0.009],[0.011,0.113],[0.074,0.003],[-0.142,0.069]],"v":[[-0.126,0.279],[-0.241,-0.237],[-0.158,-0.27],[-0.089,-0.228],[0.006,0.198],[0.241,0.164]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.099,28.55],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":4,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.012,-0.019],[-0.085,0.014],[0.003,0.071],[0.064,0.039],[0.019,0.046],[-0.014,0.029],[-0.032,-0.014],[0.078,-0.017],[0.019,-0.042],[-0.016,-0.035],[-0.062,-0.023],[-0.013,-0.05],[0.032,-0.016],[0.04,0.016],[0.018,0.037]],"o":[[0.111,0.058],[0.099,-0.018],[-0.002,-0.056],[-0.053,-0.033],[-0.011,-0.024],[0.096,-0.047],[0.005,-0.054],[-0.055,0.013],[-0.016,0.034],[0.03,0.071],[0.028,0.009],[0.008,0.039],[-0.049,0.025],[-0.034,-0.012],[-0.014,0.021]],"v":[[-0.214,0.234],[0.054,0.275],[0.199,0.143],[0.066,0.005],[-0.062,-0.109],[-0.066,-0.199],[0.107,-0.231],[-0.055,-0.258],[-0.173,-0.174],[-0.174,-0.067],[-0.007,0.059],[0.1,0.146],[0.043,0.234],[-0.098,0.248],[-0.176,0.173]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.031,0],[0.049,0.023],[-0.018,0.032],[-0.033,-0.012],[-0.044,0.023],[0.007,0.028],[0.053,0.019],[0.033,0.076],[-0.019,0.037],[-0.058,0.012],[-0.081,-0.078],[0.053,-0.013],[-0.051,-0.032],[-0.004,-0.065],[0.108,-0.018]],"o":[[-0.048,0],[-0.029,-0.062],[0.03,0.043],[0.037,0.014],[0.028,-0.014],[-0.007,-0.029],[-0.065,-0.023],[-0.016,-0.039],[0.023,-0.046],[0.078,-0.018],[-0.131,-0.006],[-0.012,0.144],[0.067,0.042],[0.003,0.079],[-0.033,0.005]],"v":[[-0.044,0.3],[-0.187,0.269],[-0.182,0.149],[-0.094,0.232],[0.036,0.218],[0.084,0.148],[-0.012,0.072],[-0.189,-0.063],[-0.186,-0.18],[-0.057,-0.273],[0.202,-0.222],[-0.02,-0.215],[0.073,-0.006],[0.213,0.144],[0.055,0.291]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.141176470588,0.141176470588,0.133333333333,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[94.344,28.462],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":6,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.007,0.007],[-0.018,0.032],[-0.072,0.035],[0.008,0.035],[0.049,0.018],[0.03,0.07],[-0.108,0.025],[-0.082,-0.076],[0.039,-0.011],[-0.014,-0.037],[-0.005,-0.111],[0.069,-0.013],[0.081,0.039]],"o":[[0.014,-0.025],[0.042,0.111],[0.03,-0.014],[-0.009,-0.036],[-0.069,-0.024],[-0.037,-0.087],[0.072,-0.016],[-0.131,-0.021],[-0.055,0.014],[0.039,0.095],[0.006,0.096],[-0.083,0.014],[-0.009,-0.005]],"v":[[-0.217,0.232],[-0.169,0.152],[0.044,0.224],[0.096,0.145],[-0.005,0.063],[-0.176,-0.067],[-0.049,-0.269],[0.202,-0.221],[-0.014,-0.226],[-0.049,-0.113],[0.21,0.141],[0.061,0.281],[-0.178,0.258]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[94.338,28.465],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":4,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.078,0.18],[0.071,-0.139],[0,0],[0.039,0.071],[-0.051,-0.09]],"o":[[0.145,-0.175],[-0.103,0.12],[-0.007,0.012],[-0.042,-0.078],[-0.081,0.115],[0,0]],"v":[[-0.012,0.265],[0.285,-0.265],[0.062,0.136],[-0.037,-0.019],[-0.159,-0.242],[-0.136,0.053]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0.057,0.095],[-0.031,0.005],[-0.044,-0.078],[0,0],[-0.039,0.116],[0,0],[0.077,-0.182]],"o":[[-0.088,-0.004],[-0.053,-0.093],[0.039,-0.016],[0.105,0.067],[0,0],[0.067,-0.136],[0.002,-0.006],[-0.085,0.196],[0,0]],"v":[[0.067,0.281],[-0.146,0.06],[-0.311,-0.222],[-0.212,-0.249],[-0.021,-0.028],[0.059,0.115],[0.214,-0.275],[0.311,-0.281],[0.073,0.276]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.141176470588,0.141176470588,0.133333333333,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.675,28.451],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":6,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.099,0.17],[-0.055,0.009],[-0.074,-0.135],[-0.048,0.138],[0.077,-0.18]],"o":[[0.053,-0.009],[0.065,0.12],[0.066,-0.131],[-0.002,0.186],[-0.17,-0.164]],"v":[[-0.262,-0.227],[-0.112,-0.252],[0.098,0.132],[0.262,-0.273],[0.105,0.273]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.631,28.452],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":4,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.012,-0.004],[-0.022,-0.033],[0.002,0.041],[0.015,0.021],[0.048,-0.018]],"o":[[0.053,0.113],[0.079,-0.026],[-0.001,-0.031],[-0.041,-0.056],[-0.014,0.005]],"v":[[-0.114,-0.195],[-0.02,-0.008],[0.094,-0.107],[0.056,-0.188],[-0.075,-0.209]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0.021,0.046],[-0.046,-0.064],[-0.003,-0.035],[0.092,-0.03]],"o":[[-0.026,-0.041],[0.062,-0.124],[0.02,0.026],[0.004,0.048],[0,0]],"v":[[-0.026,0.01],[-0.093,-0.119],[0.066,-0.2],[0.112,-0.107],[-0.019,0.01]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0.032,-0.012],[-0.039,-0.094],[-0.028,-0.068],[-0.028,0.012],[0,0],[0.025,0.111],[0.064,-0.021],[0.069,-0.026]],"o":[[0.039,0.096],[0.028,0.069],[0.035,-0.014],[0.026,-0.011],[0.189,-0.081],[-0.05,-0.08],[-0.07,0.023],[-0.028,0.009]],"v":[[-0.25,-0.181],[-0.133,0.102],[-0.047,0.308],[0.045,0.27],[-0.019,0.045],[0.22,-0.2],[0.048,-0.287],[-0.16,-0.213]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0,0],[0.028,0.071],[0.04,0.098],[-0.033,0.013],[-0.071,0.023],[-0.052,-0.085],[0.131,-0.053],[0,0],[0.037,-0.015]],"o":[[-0.032,-0.078],[-0.041,-0.095],[0.037,-0.021],[0.069,-0.024],[0.072,-0.023],[0.028,0.124],[-0.049,0.023],[-0.069,0.028],[0,0]],"v":[[-0.054,0.326],[-0.144,0.107],[-0.264,-0.183],[-0.162,-0.229],[0.047,-0.303],[0.236,-0.209],[0.052,0.028],[0.093,0.266],[-0.047,0.323]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.141176470588,0.141176470588,0.133333333333,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[92.464,28.686],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":8,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.018,0.023],[0.065,-0.015],[-0.036,-0.055],[0.004,0.057]],"o":[[-0.055,-0.076],[0.037,0.075],[0.06,-0.02],[-0.002,-0.035]],"v":[[0.06,-0.196],[-0.122,-0.2],[-0.021,0.002],[0.104,-0.106]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.051,-0.021],[0.07,0.171],[-0.102,0.034],[-0.048,-0.08],[0.131,-0.053],[-0.03,-0.072]],"o":[[-0.069,-0.164],[0.102,-0.037],[0.071,-0.023],[0.026,0.115],[-0.024,0.101],[-0.039,0.016]],"v":[[-0.048,0.318],[-0.256,-0.185],[0.049,-0.295],[0.23,-0.203],[0.049,0.023],[0.083,0.265]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[92.461,28.684],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":6,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.002,-0.071],[-0.072,0.002],[-0.041,-0.002],[0,0],[0.002,0.055],[-0.023,0.095],[0,0]],"o":[[0.094,0.03],[0.041,0],[0,-0.049],[0.004,-0.066],[-0.002,-0.099],[0,0],[-0.007,0.104]],"v":[[-0.182,0.229],[0.06,0.257],[0.184,0.257],[-0.05,0.208],[-0.048,0.031],[-0.028,-0.258],[-0.159,-0.258]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0.042,-0.001],[0.076,0.009],[-0.007,0.098],[0,0],[-0.002,-0.102],[0.003,-0.057],[0,0],[0,0]],"o":[[-0.051,-0.001],[-0.074,0.002],[-0.034,-0.097],[0,-0.007],[-0.026,0.106],[0.001,0.053],[0,0],[0,0],[0,0]],"v":[[0.198,0.271],[0.06,0.271],[-0.164,0.264],[-0.175,-0.266],[-0.011,-0.273],[-0.035,0.031],[-0.037,0.194],[0.196,0.194],[0.196,0.271]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.141176470588,0.141176470588,0.133333333333,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.245,28.522],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9","np":6,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.011,-0.164],[0,0],[0.118,0.012],[-0.007,0.102],[0,0]],"o":[[0,0],[-0.116,0.06],[-0.027,-0.089],[0,0],[-0.039,0.15]],"v":[[-0.043,0.198],[0.19,0.198],[-0.163,0.255],[-0.167,-0.267],[-0.02,-0.267]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.245,28.524],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 10","np":4,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.012,-0.087],[0,0],[0,0.049],[-0.035,0.057],[-0.059,-0.002],[0.106,0.016],[0,0]],"o":[[0,0],[0.004,-0.025],[0.005,-0.129],[0.062,0.006],[-0.052,-0.023],[0.029,0.049],[0,0.03]],"v":[[-0.098,0.26],[0.036,0.26],[0.042,0.143],[0.087,-0.218],[0.252,-0.209],[-0.252,-0.274],[-0.054,-0.226]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.003,0.06],[0,0],[-0.003,0],[0.057,0.007],[0.003,-0.123],[0.003,-0.025]],"o":[[0,0],[0.011,-0.067],[0,0],[0.053,-0.067],[-0.049,0.048],[-0.03,0.057],[-0.002,0.055],[0,0]],"v":[[0.049,0.277],[-0.116,0.277],[-0.07,-0.209],[-0.23,-0.209],[0.248,-0.244],[0.096,-0.205],[0.056,0.144],[0.049,0.271]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.141176470588,0.141176470588,0.133333333333,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.737,28.535],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 11","np":6,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0.025],[0,0],[0,0],[0.059,0.009],[0.011,-0.081]],"o":[[0.011,-0.064],[0,0],[0.05,-0.051],[-0.047,0.033],[-0.047,0.076],[0,0]],"v":[[-0.117,0.268],[-0.074,-0.217],[-0.238,-0.217],[0.238,-0.236],[0.083,-0.214],[0.033,0.268]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.747,28.534],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 12","np":4,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.028,-0.019],[-0.069,-0.093],[0,0],[-0.042,0.131],[0,0],[0.012,-0.04],[0.014,-0.015],[0.076,0.113]],"o":[[0.067,0.095],[0,0],[0.106,-0.157],[0,0],[-0.055,-0.002],[-0.005,0.016],[-0.092,-0.12],[-0.083,0]],"v":[[-0.287,-0.2],[-0.084,0.084],[0.052,0.275],[0.241,-0.142],[0.285,-0.281],[0.218,-0.241],[0.1,0.121],[-0.144,-0.223]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0.069,0.097],[-0.046,-0.002],[-0.08,-0.117],[-0.009,0.032],[-0.045,0],[0,0],[0.04,-0.131]],"o":[[-0.004,-0.006],[-0.069,-0.097],[0.044,-0.043],[0.104,0.115],[0.023,-0.058],[0.014,-0.044],[0.035,0.01],[-0.04,0.13],[-0.08,0.039]],"v":[[0.047,0.295],[-0.096,0.093],[-0.303,-0.198],[-0.165,-0.239],[0.093,0.102],[0.204,-0.244],[0.268,-0.295],[0.255,-0.136],[0.132,0.254]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.141176470588,0.141176470588,0.133333333333,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[104.57,28.547],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 13","np":6,"cix":2,"bm":0,"ix":13,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.081,-0.12],[-0.008,0.028],[-0.07,-0.002],[0.056,-0.178],[0.116,0.162],[-0.053,0]],"o":[[0.011,-0.014],[0.015,-0.048],[-0.058,0.18],[-0.189,-0.127],[0.047,-0.038],[0.078,0.117]],"v":[[0.095,0.138],[0.211,-0.222],[0.296,-0.268],[0.125,0.27],[-0.296,-0.183],[-0.14,-0.212]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[104.568,28.527],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 14","np":4,"cix":2,"bm":0,"ix":14,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.044,-0.027],[-0.03,-0.02],[0.002,0.03]],"o":[[0.094,0.051],[-0.004,-0.043],[-0.053,-0.034]],"v":[[-0.016,-0.09],[0.135,-0.004],[0.128,-0.111]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0.027,0.012],[0.027,0.019],[-0.058,0.036],[-0.004,-0.05]],"o":[[-0.048,-0.032],[-0.028,-0.015],[0.053,-0.042],[0.018,0.117],[0,0]],"v":[[0.153,0.026],[0.048,-0.034],[-0.034,-0.082],[0.128,-0.193],[0.15,0.01]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0.008,-0.05],[-0.044,-0.027],[-0.01,0.145],[-0.003,0.038],[0.037,-0.023],[0.12,-0.077],[0,0],[-0.05,0.034],[-0.073,-0.037]],"o":[[0.045,0.026],[0.01,-0.069],[0.005,-0.076],[-0.032,-0.038],[-0.118,0.075],[0,0],[0.09,0.004],[0.077,0.036],[-0.004,0.067]],"v":[[0.107,0.229],[0.236,0.305],[0.271,-0.09],[0.285,-0.268],[0.186,-0.289],[-0.171,-0.061],[-0.283,0.01],[-0.09,-0.055],[0.128,0.053]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0,0],[0.05,0.03],[-0.008,0.061],[0.067,0.036],[0.055,-0.037],[0,0],[-0.118,0.074],[-0.037,-0.046],[0.005,-0.078],[0.01,-0.06]],"o":[[-0.058,-0.036],[0.004,-0.056],[-0.068,-0.037],[-0.051,0.034],[-0.055,-0.065],[0.12,-0.078],[0.044,-0.028],[-0.002,0.04],[-0.012,0.153],[0,0]],"v":[[0.245,0.329],[0.096,0.238],[0.117,0.064],[-0.085,-0.04],[-0.244,0.068],[-0.179,-0.073],[0.178,-0.301],[0.299,-0.275],[0.286,-0.087],[0.25,0.319]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.141176470588,0.141176470588,0.133333333333,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[106.895,28.966],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 15","np":8,"cix":2,"bm":0,"ix":15,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.072,-0.048],[0.005,0.062],[0.053,-0.032]],"o":[[-0.007,-0.087],[-0.059,0.035],[0.049,0.037]],"v":[[0.12,0.011],[0.108,-0.185],[-0.053,-0.088]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-0.04,-0.048],[0.018,-0.09],[0.047,0.03],[-0.008,0.064],[0.069,0.035],[0.056,-0.039],[-0.156,0.099]],"o":[[-0.01,0.108],[-0.049,-0.03],[0.007,-0.052],[-0.072,-0.037],[-0.051,0.035],[0.116,-0.157],[0.035,-0.025]],"v":[[0.27,-0.27],[0.217,0.318],[0.078,0.234],[0.102,0.06],[-0.108,-0.047],[-0.27,0.064],[0.159,-0.293]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[106.918,28.964],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 16","np":6,"cix":2,"bm":0,"ix":16,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.026,0.03],[0.02,0.041],[0.064,0.011],[0.014,-0.055]],"o":[[0.099,0.034],[0.023,-0.026],[-0.021,-0.044],[-0.014,0.053],[0,0]],"v":[[-0.064,-0.05],[0.093,-0.061],[0.116,-0.171],[-0.013,-0.239],[-0.055,-0.077]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-0.007,0],[0.046,0.104],[-0.035,0.03],[-0.002,0.034],[0.044,0.012],[0.072,0.014],[0.03,0.005],[0.023,-0.092],[0,0],[-0.029,-0.003],[-0.023,0.099],[-0.016,0.057],[-0.026,-0.053],[0.034,-0.039],[0.03,0.009],[0,0],[-0.021,-0.053]],"o":[[0.074,-0.069],[0.067,-0.003],[0.025,-0.021],[0.005,-0.072],[-0.069,-0.021],[-0.03,-0.006],[-0.023,0.095],[0,0],[0.069,0.012],[0.019,-0.083],[0.029,-0.103],[0.077,0.005],[0.019,0.038],[-0.028,0.034],[-0.076,-0.024],[0.021,0.053],[0.005,-0.005]],"v":[[0.077,0.274],[0.065,0.008],[0.222,-0.036],[0.265,-0.118],[0.153,-0.239],[-0.057,-0.287],[-0.145,-0.305],[-0.214,-0.024],[-0.271,0.209],[-0.143,0.23],[-0.082,-0.033],[-0.023,-0.248],[0.132,-0.176],[0.107,-0.05],[0.008,-0.01],[-0.006,0.122],[0.058,0.281]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0.011,0],[0.023,0.056],[0,0],[0.019,-0.078],[0.035,0.005],[0,0],[-0.024,0.097],[-0.032,-0.007],[-0.069,-0.022],[0.007,-0.087],[0.028,-0.023],[0.05,0],[-0.041,-0.092]],"o":[[-0.15,-0.082],[0,0],[-0.021,0.092],[-0.039,0],[-0.05,-0.016],[0.023,-0.095],[0.041,0.002],[0.074,0.015],[0.038,0.012],[-0.003,0.039],[-0.032,0.025],[0.021,0.101],[-0.016,0.016]],"v":[[0.174,0.317],[-0.02,0.126],[-0.073,-0.01],[-0.131,0.239],[-0.237,0.227],[-0.228,-0.028],[-0.158,-0.317],[-0.053,-0.303],[0.159,-0.252],[0.28,-0.117],[0.233,-0.024],[0.109,0.015],[0.212,0.296]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.141176470588,0.141176470588,0.133333333333,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[106.316,28.65],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 17","np":7,"cix":2,"bm":0,"ix":17,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.064,0.011],[0.018,-0.069],[0.037,0.077]],"o":[[-0.018,0.067],[0.143,0.046],[-0.024,-0.05]],"v":[[-0.017,-0.257],[-0.07,-0.056],[0.124,-0.186]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.006,-0.074],[0.108,0.013],[-0.043,-0.094],[0.053,-0.025],[0.048,0.117],[0.021,-0.085],[0.055,0.009],[-0.044,0.18],[-0.099,-0.032]],"o":[[-0.007,0.092],[0.048,0.106],[-0.05,0.033],[-0.04,-0.102],[-0.024,0.103],[-0.042,-0.007],[0.042,-0.173],[0.108,0.023],[0.055,0.014]],"v":[[0.274,-0.126],[0.073,-0.003],[0.206,0.291],[0.055,0.278],[-0.074,-0.042],[-0.137,0.229],[-0.28,0.204],[-0.151,-0.324],[0.156,-0.253]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[106.314,28.66],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 18","np":6,"cix":2,"bm":0,"ix":18,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.108,0],[-0.111,-0.042],[-0.193,0],[-0.132,0.052],[-0.104,0],[-0.113,-0.046],[-0.149,-0.006],[0,0],[0.111,0.045],[0.145,0],[0.115,-0.045],[0.163,0],[0.132,0.05],[0.146,0],[0.101,-0.043],[0.185,-0.004],[0,0],[-0.113,0.05]],"o":[[0.117,0],[0.136,0.051],[0.198,0],[0.106,-0.04],[0.113,0],[0.117,0.046],[0,0],[-0.115,-0.005],[-0.124,-0.047],[-0.136,0],[-0.129,0.049],[-0.16,0],[-0.122,-0.046],[-0.145,0],[-0.104,0.046],[0,0],[0.222,-0.003],[0.09,-0.038]],"v":[[-0.789,0.003],[-0.457,0.085],[0.022,0.193],[0.502,0.083],[0.811,0.006],[1.143,0.092],[1.541,0.195],[1.541,-0.001],[1.209,-0.09],[0.813,-0.189],[0.444,-0.098],[0.023,-0.001],[-0.393,-0.096],[-0.787,-0.189],[-1.137,-0.1],[-1.543,-0.001],[-1.543,0.191],[-1.066,0.076]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0.126,0.05],[0.102,0],[0.106,-0.041],[0.205,0],[0.136,0.051],[0.109,0],[0.092,-0.039],[0.243,0],[0,0],[-0.109,0.048],[-0.154,0],[-0.125,-0.048],[-0.153,0],[-0.12,0.046],[-0.145,0],[-0.129,-0.049],[-0.115,0]],"o":[[-0.188,0],[-0.109,-0.042],[-0.097,0],[-0.136,0.053],[-0.201,0],[-0.107,-0.041],[-0.099,0],[-0.122,0.053],[-0.023,0],[0.212,0],[0.106,-0.046],[0.155,0],[0.127,0.048],[0.156,0],[0.124,-0.048],[0.153,0],[0.115,0.045],[0.018,0.004]],"v":[[1.587,0.236],[1.129,0.131],[0.815,0.048],[0.522,0.124],[0.025,0.236],[-0.468,0.128],[-0.785,0.048],[-1.047,0.119],[-1.564,0.236],[-1.587,-0.045],[-1.153,-0.143],[-0.785,-0.234],[-0.376,-0.139],[0.025,-0.048],[0.424,-0.141],[0.817,-0.236],[1.23,-0.136],[1.569,-0.049]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.903,34.603],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 19","np":6,"cix":2,"bm":0,"ix":19,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.123,0.049],[0.108,0],[0.108,-0.043],[0.201,0],[0.136,0.052],[0.111,0],[0.094,-0.04],[0.24,0],[0,0],[-0.111,0.048],[-0.149,0],[-0.123,-0.046],[-0.157,0],[-0.122,0.046],[-0.141,0],[-0.125,-0.049],[-0.118,0],[0,0]],"o":[[-0.161,0],[-0.112,-0.044],[-0.1,0],[-0.134,0.051],[-0.198,0],[-0.115,-0.042],[-0.103,0],[-0.12,0.053],[0,0],[0.194,0],[0.102,-0.044],[0.151,0],[0.129,0.048],[0.159,0],[0.119,-0.046],[0.148,0],[0.117,0.046],[0,0],[0,0]],"v":[[1.567,0.213],[1.14,0.109],[0.816,0.024],[0.514,0.102],[0.025,0.213],[-0.463,0.103],[-0.788,0.024],[-1.059,0.096],[-1.567,0.213],[-1.567,-0.025],[-1.147,-0.123],[-0.788,-0.213],[-0.386,-0.119],[0.023,-0.025],[0.431,-0.121],[0.812,-0.213],[1.217,-0.112],[1.562,-0.024],[1.562,0.213]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.898039275525,0.898039275525,0.898039275525,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.899,34.603],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 20","np":4,"cix":2,"bm":0,"ix":20,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.106,0],[-0.117,-0.044],[-0.193,0],[-0.132,0.052],[-0.104,0],[-0.113,-0.045],[-0.148,-0.005],[0,0],[0.112,0.045],[0.145,0],[0.117,-0.045],[0.165,0],[0.13,0.05],[0.145,0],[0.101,-0.043],[0.184,-0.005],[0,0],[-0.113,0.05]],"o":[[0.115,0],[0.136,0.051],[0.196,0],[0.111,-0.042],[0.113,0],[0.117,0.045],[0,0],[-0.114,-0.005],[-0.123,-0.049],[-0.136,0],[-0.125,0.049],[-0.162,0],[-0.124,-0.046],[-0.145,0],[-0.109,0.047],[0,0],[0.224,-0.004],[0.095,-0.042]],"v":[[-0.788,0.003],[-0.456,0.085],[0.023,0.193],[0.503,0.083],[0.814,0.003],[1.146,0.09],[1.543,0.193],[1.543,-0.001],[1.211,-0.09],[0.816,-0.189],[0.443,-0.098],[0.024,-0.001],[-0.392,-0.096],[-0.786,-0.189],[-1.136,-0.1],[-1.542,-0.001],[-1.542,0.193],[-1.065,0.077]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0.126,0.05],[0.102,0],[0.106,-0.041],[0.205,0],[0.136,0.051],[0.108,0],[0.09,-0.041],[0.247,0],[0,0],[-0.108,0.048],[-0.154,0],[-0.125,-0.046],[-0.154,0],[-0.12,0.048],[-0.145,0],[-0.129,-0.049],[-0.114,0]],"o":[[-0.188,0],[-0.109,-0.042],[-0.096,0],[-0.138,0.053],[-0.201,0],[-0.113,-0.043],[-0.097,0],[-0.115,0.049],[-0.023,0],[0.212,0],[0.106,-0.046],[0.154,0],[0.129,0.05],[0.155,0],[0.122,-0.046],[0.154,0],[0.115,0.045],[0.022,0.004]],"v":[[1.588,0.236],[1.13,0.131],[0.816,0.048],[0.523,0.124],[0.024,0.236],[-0.468,0.128],[-0.786,0.048],[-1.046,0.119],[-1.565,0.236],[-1.588,-0.045],[-1.155,-0.143],[-0.788,-0.234],[-0.38,-0.141],[0.023,-0.048],[0.424,-0.143],[0.814,-0.236],[1.227,-0.136],[1.566,-0.049]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.902,34.351],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 21","np":6,"cix":2,"bm":0,"ix":21,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.123,0.049],[0.108,0],[0.108,-0.043],[0.201,0],[0.136,0.051],[0.111,0],[0.094,-0.04],[0.24,0],[0,0],[-0.111,0.048],[-0.149,0],[-0.123,-0.046],[-0.157,0],[-0.122,0.046],[-0.141,0],[-0.125,-0.047],[-0.118,0],[0,0]],"o":[[-0.161,0],[-0.112,-0.044],[-0.1,0],[-0.134,0.053],[-0.198,0],[-0.115,-0.043],[-0.103,0],[-0.12,0.052],[0,0],[0.194,0],[0.102,-0.044],[0.151,0],[0.129,0.048],[0.159,0],[0.119,-0.046],[0.148,0],[0.117,0.046],[0,0],[0,0]],"v":[[1.567,0.213],[1.14,0.109],[0.816,0.024],[0.514,0.102],[0.025,0.213],[-0.463,0.104],[-0.788,0.024],[-1.059,0.096],[-1.567,0.213],[-1.567,-0.025],[-1.147,-0.123],[-0.788,-0.213],[-0.386,-0.119],[0.023,-0.025],[0.431,-0.121],[0.812,-0.213],[1.217,-0.114],[1.562,-0.025],[1.562,0.213]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.254901960784,0.800000059838,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.899,34.353],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 22","np":4,"cix":2,"bm":0,"ix":22,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.108,0],[-0.117,-0.042],[-0.193,0],[-0.132,0.052],[-0.104,0],[-0.113,-0.045],[-0.149,-0.005],[0,0],[0.111,0.044],[0.145,0],[0.117,-0.044],[0.164,0],[0.132,0.049],[0.147,0],[0.101,-0.042],[0.186,-0.004],[0,0],[-0.113,0.049]],"o":[[0.115,0],[0.136,0.051],[0.198,0],[0.106,-0.04],[0.113,0],[0.117,0.045],[0,0],[-0.115,-0.006],[-0.124,-0.048],[-0.136,0],[-0.125,0.047],[-0.161,0],[-0.122,-0.046],[-0.145,0],[-0.109,0.048],[0,0],[0.223,-0.003],[0.092,-0.037]],"v":[[-0.789,0.002],[-0.457,0.083],[0.022,0.191],[0.502,0.081],[0.811,0.002],[1.143,0.089],[1.541,0.191],[1.541,-0.003],[1.209,-0.093],[0.813,-0.192],[0.44,-0.102],[0.022,-0.005],[-0.395,-0.1],[-0.789,-0.192],[-1.139,-0.104],[-1.545,-0.005],[-1.545,0.187],[-1.068,0.073]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0.126,0.05],[0.102,0],[0.106,-0.041],[0.205,0],[0.136,0.051],[0.107,0],[0.092,-0.039],[0.243,0],[0,0],[-0.109,0.046],[-0.154,0],[-0.125,-0.048],[-0.153,0],[-0.12,0.046],[-0.145,0],[-0.127,-0.049],[-0.115,0]],"o":[[-0.188,0],[-0.109,-0.042],[-0.097,0],[-0.136,0.053],[-0.201,0],[-0.113,-0.043],[-0.099,0],[-0.122,0.053],[-0.023,0],[0.212,0],[0.106,-0.046],[0.155,0],[0.127,0.047],[0.157,0],[0.122,-0.046],[0.153,0],[0.115,0.044],[0.018,0]],"v":[[1.587,0.235],[1.129,0.129],[0.815,0.046],[0.522,0.122],[0.025,0.235],[-0.468,0.126],[-0.785,0.046],[-1.047,0.117],[-1.564,0.235],[-1.587,-0.047],[-1.153,-0.143],[-0.785,-0.235],[-0.376,-0.139],[0.025,-0.047],[0.426,-0.141],[0.817,-0.235],[1.23,-0.134],[1.569,-0.047]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.903,34.837],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 23","np":6,"cix":2,"bm":0,"ix":23,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.123,0.049],[0.108,0],[0.108,-0.043],[0.201,0],[0.136,0.05],[0.111,0],[0.094,-0.04],[0.24,0],[0,0],[-0.111,0.048],[-0.149,0],[-0.123,-0.046],[-0.157,0],[-0.122,0.046],[-0.141,0],[-0.125,-0.05],[-0.118,0],[0,0]],"o":[[-0.161,0],[-0.112,-0.044],[-0.1,0],[-0.134,0.051],[-0.198,0],[-0.115,-0.042],[-0.103,0],[-0.12,0.051],[0,0],[0.194,0],[0.102,-0.044],[0.151,0],[0.129,0.049],[0.159,0],[0.119,-0.046],[0.148,0],[0.117,0.046],[0,0],[0,0]],"v":[[1.567,0.211],[1.14,0.107],[0.816,0.022],[0.514,0.1],[0.025,0.211],[-0.463,0.103],[-0.788,0.024],[-1.059,0.096],[-1.567,0.213],[-1.567,-0.026],[-1.147,-0.123],[-0.788,-0.213],[-0.386,-0.119],[0.023,-0.026],[0.431,-0.121],[0.812,-0.213],[1.217,-0.112],[1.562,-0.024],[1.562,0.211]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.254901960784,0.800000059838,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.899,34.838],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 24","np":4,"cix":2,"bm":0,"ix":24,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.106,0],[-0.117,-0.044],[-0.193,0],[-0.132,0.052],[-0.104,0],[-0.113,-0.045],[-0.148,-0.005],[0,0],[0.112,0.045],[0.145,0],[0.117,-0.045],[0.165,0],[0.13,0.05],[0.145,0],[0.101,-0.043],[0.184,-0.004],[0,0],[-0.113,0.05]],"o":[[0.115,0],[0.136,0.051],[0.196,0],[0.111,-0.042],[0.113,0],[0.117,0.045],[0,0],[-0.114,-0.005],[-0.123,-0.047],[-0.136,0],[-0.125,0.049],[-0.162,0],[-0.124,-0.046],[-0.145,0],[-0.109,0.047],[0,0],[0.224,-0.003],[0.095,-0.04]],"v":[[-0.788,0.003],[-0.456,0.085],[0.023,0.193],[0.503,0.083],[0.814,0.003],[1.146,0.09],[1.543,0.193],[1.543,-0.001],[1.211,-0.09],[0.816,-0.189],[0.443,-0.098],[0.024,-0.001],[-0.392,-0.096],[-0.786,-0.189],[-1.136,-0.1],[-1.542,-0.001],[-1.542,0.191],[-1.065,0.076]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0.126,0.05],[0.102,0],[0.106,-0.041],[0.205,0],[0.136,0.051],[0.108,0],[0.09,-0.041],[0.247,0],[0,0],[-0.108,0.048],[-0.154,0],[-0.125,-0.046],[-0.154,0],[-0.12,0.048],[-0.145,0],[-0.129,-0.049],[-0.114,0]],"o":[[-0.188,0],[-0.109,-0.042],[-0.096,0],[-0.138,0.053],[-0.201,0],[-0.113,-0.043],[-0.097,0],[-0.115,0.049],[-0.023,0],[0.212,0],[0.106,-0.046],[0.154,0],[0.129,0.05],[0.155,0],[0.122,-0.046],[0.154,0],[0.115,0.045],[0.022,0.004]],"v":[[1.588,0.236],[1.13,0.131],[0.816,0.048],[0.523,0.124],[0.024,0.236],[-0.468,0.128],[-0.786,0.048],[-1.046,0.119],[-1.565,0.236],[-1.588,-0.045],[-1.155,-0.143],[-0.788,-0.234],[-0.38,-0.141],[0.023,-0.048],[0.424,-0.143],[0.814,-0.236],[1.227,-0.136],[1.566,-0.049]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.902,35.074],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 25","np":6,"cix":2,"bm":0,"ix":25,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.123,0.049],[0.108,0],[0.108,-0.043],[0.201,0],[0.136,0.05],[0.111,0],[0.094,-0.04],[0.24,0],[0,0],[-0.111,0.048],[-0.149,0],[-0.123,-0.046],[-0.157,0],[-0.122,0.046],[-0.141,0],[-0.125,-0.05],[-0.118,0],[0,0]],"o":[[-0.161,0],[-0.112,-0.044],[-0.1,0],[-0.134,0.051],[-0.198,0],[-0.115,-0.042],[-0.103,0],[-0.12,0.051],[0,0],[0.194,0],[0.102,-0.044],[0.151,0],[0.129,0.047],[0.159,0],[0.119,-0.046],[0.148,0],[0.117,0.046],[0,0],[0,0]],"v":[[1.567,0.211],[1.14,0.107],[0.816,0.022],[0.514,0.1],[0.025,0.211],[-0.463,0.103],[-0.788,0.024],[-1.059,0.096],[-1.567,0.213],[-1.567,-0.026],[-1.147,-0.123],[-0.788,-0.213],[-0.386,-0.119],[0.023,-0.026],[0.431,-0.121],[0.812,-0.213],[1.217,-0.112],[1.562,-0.024],[1.562,0.211]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.898039275525,0.898039275525,0.898039275525,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.899,35.076],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 26","np":4,"cix":2,"bm":0,"ix":26,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.108,0],[-0.111,-0.042],[-0.195,0],[-0.132,0.052],[-0.106,0],[-0.113,-0.045],[-0.148,-0.005],[0,0],[0.112,0.045],[0.145,0],[0.117,-0.045],[0.165,0],[0.132,0.05],[0.146,0],[0.101,-0.043],[0.185,-0.005],[0,0],[-0.113,0.05]],"o":[[0.117,0],[0.134,0.05],[0.196,0],[0.106,-0.04],[0.111,0],[0.117,0.045],[0,0],[-0.114,-0.005],[-0.123,-0.047],[-0.136,0],[-0.125,0.049],[-0.16,0],[-0.122,-0.046],[-0.145,0],[-0.104,0.046],[0,0],[0.222,-0.004],[0.09,-0.04]],"v":[[-0.789,0.001],[-0.457,0.082],[0.022,0.19],[0.502,0.08],[0.813,0.003],[1.145,0.088],[1.542,0.19],[1.542,-0.003],[1.21,-0.093],[0.815,-0.192],[0.442,-0.101],[0.023,-0.003],[-0.393,-0.098],[-0.787,-0.192],[-1.137,-0.103],[-1.543,-0.003],[-1.543,0.19],[-1.066,0.075]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0.126,0.05],[0.102,0],[0.106,-0.041],[0.205,0],[0.136,0.051],[0.107,0],[0.092,-0.039],[0.245,0],[0,0],[-0.109,0.048],[-0.154,0],[-0.125,-0.048],[-0.153,0],[-0.12,0.046],[-0.145,0],[-0.129,-0.049],[-0.115,0]],"o":[[-0.188,0],[-0.109,-0.042],[-0.097,0],[-0.138,0.053],[-0.203,0],[-0.112,-0.043],[-0.099,0],[-0.122,0.053],[-0.023,0],[0.212,0],[0.106,-0.046],[0.155,0],[0.127,0.047],[0.156,0],[0.122,-0.046],[0.153,0],[0.115,0.044],[0.018,0]],"v":[[1.587,0.234],[1.129,0.128],[0.815,0.045],[0.522,0.121],[0.025,0.234],[-0.469,0.125],[-0.785,0.047],[-1.047,0.118],[-1.564,0.236],[-1.587,-0.047],[-1.153,-0.144],[-0.785,-0.236],[-0.376,-0.14],[0.025,-0.047],[0.426,-0.142],[0.817,-0.236],[1.23,-0.135],[1.569,-0.048]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.903,35.307],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 27","np":6,"cix":2,"bm":0,"ix":27,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.123,0.049],[0.108,0],[0.108,-0.043],[0.201,0],[0.136,0.051],[0.111,0],[0.094,-0.04],[0.24,0],[0,0],[-0.111,0.048],[-0.149,0],[-0.123,-0.046],[-0.157,0],[-0.122,0.046],[-0.141,0],[-0.125,-0.047],[-0.118,0],[0,0]],"o":[[-0.161,0],[-0.112,-0.044],[-0.1,0],[-0.134,0.051],[-0.198,0],[-0.115,-0.043],[-0.103,0],[-0.12,0.053],[0,0],[0.194,0],[0.102,-0.044],[0.151,0],[0.129,0.048],[0.159,0],[0.119,-0.046],[0.148,0],[0.117,0.046],[0,0],[0,0]],"v":[[1.567,0.213],[1.14,0.109],[0.816,0.024],[0.514,0.102],[0.025,0.213],[-0.463,0.104],[-0.788,0.024],[-1.059,0.096],[-1.567,0.213],[-1.567,-0.025],[-1.147,-0.123],[-0.788,-0.213],[-0.386,-0.119],[0.023,-0.025],[0.431,-0.121],[0.812,-0.213],[1.217,-0.114],[1.562,-0.025],[1.562,0.213]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.254901960784,0.800000059838,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.899,35.307],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 28","np":4,"cix":2,"bm":0,"ix":28,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.108,0],[-0.109,-0.042],[-0.193,0],[-0.132,0.052],[-0.106,0],[-0.113,-0.046],[-0.148,-0.006],[0,0],[0.112,0.045],[0.145,0],[0.114,-0.045],[0.163,0],[0.133,0.05],[0.146,0],[0.1,-0.043],[0.185,-0.004],[0,0],[-0.113,0.05]],"o":[[0.117,0],[0.134,0.051],[0.198,0],[0.106,-0.04],[0.111,0],[0.117,0.046],[0,0],[-0.114,-0.005],[-0.123,-0.047],[-0.136,0],[-0.129,0.049],[-0.16,0],[-0.121,-0.046],[-0.145,0],[-0.104,0.046],[0,0],[0.222,-0.003],[0.089,-0.038]],"v":[[-0.789,0.003],[-0.457,0.085],[0.022,0.193],[0.502,0.083],[0.813,0.006],[1.145,0.092],[1.542,0.195],[1.542,-0.001],[1.21,-0.09],[0.815,-0.189],[0.446,-0.098],[0.025,-0.001],[-0.392,-0.096],[-0.785,-0.189],[-1.135,-0.1],[-1.541,-0.001],[-1.541,0.191],[-1.065,0.076]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0.126,0.05],[0.102,0],[0.106,-0.041],[0.205,0],[0.136,0.051],[0.109,0],[0.092,-0.039],[0.245,0],[0,0],[-0.109,0.048],[-0.154,0],[-0.125,-0.048],[-0.153,0],[-0.12,0.046],[-0.145,0],[-0.127,-0.049],[-0.115,0]],"o":[[-0.188,0],[-0.109,-0.042],[-0.097,0],[-0.136,0.053],[-0.201,0],[-0.107,-0.041],[-0.099,0],[-0.122,0.053],[-0.023,0],[0.212,0],[0.106,-0.046],[0.155,0],[0.127,0.048],[0.156,0],[0.126,-0.048],[0.153,0],[0.115,0.045],[0.02,0.004]],"v":[[1.587,0.236],[1.129,0.131],[0.815,0.048],[0.522,0.124],[0.025,0.236],[-0.468,0.128],[-0.785,0.048],[-1.047,0.119],[-1.564,0.236],[-1.587,-0.045],[-1.153,-0.143],[-0.785,-0.234],[-0.376,-0.139],[0.025,-0.048],[0.424,-0.141],[0.817,-0.236],[1.228,-0.136],[1.567,-0.049]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.211,34.603],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 29","np":6,"cix":2,"bm":0,"ix":29,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.123,0.049],[0.106,0],[0.108,-0.043],[0.201,0],[0.135,0.052],[0.112,0],[0.094,-0.04],[0.241,0],[0,0],[-0.111,0.048],[-0.148,0],[-0.124,-0.046],[-0.157,0],[-0.122,0.046],[-0.142,0],[-0.125,-0.049],[-0.118,0]],"o":[[-0.161,0],[-0.112,-0.044],[-0.1,0],[-0.134,0.051],[-0.198,0],[-0.114,-0.042],[-0.102,0],[-0.12,0.053],[0,0],[0.195,0],[0.102,-0.044],[0.152,0],[0.129,0.048],[0.159,0],[0.118,-0.046],[0.148,0],[0.117,0.046],[0,0]],"v":[[1.566,0.213],[1.139,0.109],[0.815,0.024],[0.513,0.102],[0.024,0.213],[-0.462,0.103],[-0.787,0.024],[-1.057,0.096],[-1.566,0.213],[-1.566,-0.025],[-1.145,-0.123],[-0.787,-0.213],[-0.384,-0.119],[0.024,-0.025],[0.432,-0.121],[0.814,-0.213],[1.218,-0.112],[1.564,-0.024]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.898039275525,0.898039275525,0.898039275525,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.209,34.603],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 30","np":4,"cix":2,"bm":0,"ix":30,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.106,0],[-0.117,-0.044],[-0.193,0],[-0.132,0.052],[-0.104,0],[-0.113,-0.045],[-0.148,-0.005],[0,0],[0.112,0.045],[0.145,0],[0.117,-0.045],[0.165,0],[0.13,0.05],[0.145,0],[0.101,-0.043],[0.183,-0.005],[0,0],[-0.113,0.05]],"o":[[0.115,0],[0.134,0.051],[0.196,0],[0.111,-0.042],[0.111,0],[0.117,0.045],[0,0],[-0.114,-0.005],[-0.123,-0.049],[-0.136,0],[-0.125,0.049],[-0.162,0],[-0.124,-0.046],[-0.145,0],[-0.109,0.047],[0,0],[0.224,-0.004],[0.095,-0.042]],"v":[[-0.788,0.003],[-0.456,0.085],[0.023,0.193],[0.503,0.083],[0.814,0.003],[1.146,0.09],[1.543,0.193],[1.543,-0.001],[1.211,-0.09],[0.816,-0.189],[0.443,-0.098],[0.024,-0.001],[-0.392,-0.096],[-0.786,-0.189],[-1.136,-0.1],[-1.542,-0.001],[-1.542,0.193],[-1.065,0.077]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0.126,0.05],[0.102,0],[0.106,-0.041],[0.205,0],[0.136,0.051],[0.108,0],[0.09,-0.041],[0.247,0],[0,0],[-0.11,0.048],[-0.154,0],[-0.125,-0.046],[-0.154,0],[-0.12,0.048],[-0.145,0],[-0.128,-0.049],[-0.115,0]],"o":[[-0.188,0],[-0.109,-0.042],[-0.096,0],[-0.138,0.053],[-0.201,0],[-0.113,-0.043],[-0.097,0],[-0.115,0.049],[-0.023,0],[0.212,0],[0.106,-0.046],[0.154,0],[0.129,0.05],[0.155,0],[0.122,-0.046],[0.154,0],[0.114,0.045],[0.023,0.004]],"v":[[1.588,0.236],[1.13,0.131],[0.816,0.048],[0.523,0.124],[0.024,0.236],[-0.468,0.128],[-0.786,0.048],[-1.046,0.119],[-1.565,0.236],[-1.588,-0.045],[-1.155,-0.143],[-0.788,-0.234],[-0.38,-0.141],[0.023,-0.048],[0.424,-0.143],[0.814,-0.236],[1.226,-0.136],[1.565,-0.049]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.21,34.351],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 31","np":6,"cix":2,"bm":0,"ix":31,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.123,0.049],[0.106,0],[0.108,-0.043],[0.201,0],[0.135,0.051],[0.112,0],[0.094,-0.04],[0.241,0],[0,0],[-0.111,0.048],[-0.148,0],[-0.124,-0.046],[-0.157,0],[-0.122,0.046],[-0.142,0],[-0.125,-0.047],[-0.118,0]],"o":[[-0.161,0],[-0.112,-0.044],[-0.1,0],[-0.134,0.053],[-0.198,0],[-0.114,-0.043],[-0.102,0],[-0.12,0.052],[0,0],[0.195,0],[0.102,-0.044],[0.152,0],[0.129,0.048],[0.159,0],[0.118,-0.046],[0.148,0],[0.117,0.046],[0,0]],"v":[[1.566,0.213],[1.139,0.109],[0.815,0.024],[0.513,0.102],[0.024,0.213],[-0.462,0.104],[-0.787,0.024],[-1.057,0.096],[-1.566,0.213],[-1.566,-0.025],[-1.145,-0.123],[-0.787,-0.213],[-0.384,-0.119],[0.024,-0.025],[0.432,-0.121],[0.814,-0.213],[1.218,-0.114],[1.564,-0.025]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.254901960784,0.800000059838,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.209,34.353],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 32","np":4,"cix":2,"bm":0,"ix":32,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.108,0],[-0.117,-0.042],[-0.193,0],[-0.132,0.052],[-0.106,0],[-0.113,-0.045],[-0.148,-0.005],[0,0],[0.112,0.044],[0.145,0],[0.117,-0.044],[0.165,0],[0.132,0.049],[0.146,0],[0.101,-0.042],[0.185,-0.004],[0,0],[-0.113,0.049]],"o":[[0.115,0],[0.134,0.051],[0.198,0],[0.106,-0.04],[0.111,0],[0.117,0.045],[0,0],[-0.114,-0.006],[-0.123,-0.048],[-0.136,0],[-0.125,0.047],[-0.16,0],[-0.122,-0.046],[-0.145,0],[-0.109,0.048],[0,0],[0.222,-0.003],[0.09,-0.037]],"v":[[-0.789,0.002],[-0.457,0.083],[0.022,0.191],[0.502,0.081],[0.813,0.002],[1.145,0.089],[1.542,0.191],[1.542,-0.003],[1.21,-0.093],[0.815,-0.192],[0.442,-0.102],[0.023,-0.005],[-0.393,-0.1],[-0.787,-0.192],[-1.137,-0.104],[-1.543,-0.005],[-1.543,0.187],[-1.066,0.073]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0.126,0.05],[0.102,0],[0.106,-0.041],[0.205,0],[0.136,0.051],[0.107,0],[0.092,-0.039],[0.245,0],[0,0],[-0.109,0.046],[-0.154,0],[-0.123,-0.048],[-0.153,0],[-0.12,0.046],[-0.145,0],[-0.127,-0.049],[-0.115,0]],"o":[[-0.188,0],[-0.109,-0.042],[-0.097,0],[-0.136,0.053],[-0.201,0],[-0.113,-0.043],[-0.099,0],[-0.122,0.053],[-0.023,0],[0.212,0],[0.106,-0.046],[0.155,0],[0.127,0.047],[0.157,0],[0.122,-0.046],[0.153,0],[0.115,0.044],[0.02,0]],"v":[[1.587,0.235],[1.129,0.129],[0.815,0.046],[0.522,0.122],[0.025,0.235],[-0.468,0.126],[-0.785,0.046],[-1.047,0.117],[-1.564,0.235],[-1.587,-0.047],[-1.153,-0.143],[-0.785,-0.235],[-0.376,-0.139],[0.025,-0.047],[0.426,-0.141],[0.817,-0.235],[1.228,-0.134],[1.567,-0.047]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.211,34.837],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 33","np":6,"cix":2,"bm":0,"ix":33,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.123,0.049],[0.106,0],[0.108,-0.043],[0.201,0],[0.135,0.05],[0.112,0],[0.094,-0.04],[0.241,0],[0,0],[-0.111,0.048],[-0.148,0],[-0.124,-0.046],[-0.157,0],[-0.122,0.046],[-0.142,0],[-0.125,-0.05],[-0.118,0]],"o":[[-0.161,0],[-0.112,-0.044],[-0.1,0],[-0.134,0.051],[-0.198,0],[-0.114,-0.042],[-0.102,0],[-0.12,0.051],[0,0],[0.195,0],[0.102,-0.044],[0.152,0],[0.129,0.049],[0.159,0],[0.118,-0.046],[0.148,0],[0.117,0.046],[0,0]],"v":[[1.566,0.211],[1.139,0.107],[0.815,0.022],[0.513,0.1],[0.024,0.211],[-0.462,0.103],[-0.787,0.024],[-1.057,0.096],[-1.566,0.213],[-1.566,-0.026],[-1.145,-0.123],[-0.787,-0.213],[-0.384,-0.119],[0.024,-0.026],[0.432,-0.121],[0.814,-0.213],[1.218,-0.112],[1.564,-0.024]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.254901960784,0.800000059838,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.209,34.838],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 34","np":4,"cix":2,"bm":0,"ix":34,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.106,0],[-0.117,-0.044],[-0.193,0],[-0.132,0.052],[-0.104,0],[-0.113,-0.045],[-0.148,-0.005],[0,0],[0.112,0.045],[0.145,0],[0.117,-0.045],[0.165,0],[0.13,0.05],[0.145,0],[0.101,-0.043],[0.183,-0.004],[0,0],[-0.113,0.05]],"o":[[0.115,0],[0.134,0.051],[0.196,0],[0.111,-0.042],[0.111,0],[0.117,0.045],[0,0],[-0.114,-0.005],[-0.123,-0.047],[-0.136,0],[-0.125,0.049],[-0.162,0],[-0.124,-0.046],[-0.145,0],[-0.109,0.047],[0,0],[0.224,-0.003],[0.095,-0.04]],"v":[[-0.788,0.003],[-0.456,0.085],[0.023,0.193],[0.503,0.083],[0.814,0.003],[1.146,0.09],[1.543,0.193],[1.543,-0.001],[1.211,-0.09],[0.816,-0.189],[0.443,-0.098],[0.024,-0.001],[-0.392,-0.096],[-0.786,-0.189],[-1.136,-0.1],[-1.542,-0.001],[-1.542,0.191],[-1.065,0.076]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0.126,0.05],[0.102,0],[0.106,-0.041],[0.205,0],[0.136,0.051],[0.108,0],[0.09,-0.041],[0.247,0],[0,0],[-0.11,0.048],[-0.154,0],[-0.125,-0.046],[-0.154,0],[-0.12,0.048],[-0.145,0],[-0.128,-0.049],[-0.115,0]],"o":[[-0.188,0],[-0.109,-0.042],[-0.096,0],[-0.138,0.053],[-0.201,0],[-0.113,-0.043],[-0.097,0],[-0.115,0.049],[-0.023,0],[0.212,0],[0.106,-0.046],[0.154,0],[0.129,0.05],[0.155,0],[0.122,-0.046],[0.154,0],[0.114,0.045],[0.023,0.004]],"v":[[1.588,0.236],[1.13,0.131],[0.816,0.048],[0.523,0.124],[0.024,0.236],[-0.468,0.128],[-0.786,0.048],[-1.046,0.119],[-1.565,0.236],[-1.588,-0.045],[-1.155,-0.143],[-0.788,-0.234],[-0.38,-0.141],[0.023,-0.048],[0.424,-0.143],[0.814,-0.236],[1.226,-0.136],[1.565,-0.049]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.21,35.074],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 35","np":6,"cix":2,"bm":0,"ix":35,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.123,0.049],[0.106,0],[0.108,-0.043],[0.201,0],[0.135,0.05],[0.112,0],[0.094,-0.04],[0.241,0],[0,0],[-0.111,0.048],[-0.148,0],[-0.124,-0.046],[-0.157,0],[-0.122,0.046],[-0.142,0],[-0.125,-0.05],[-0.118,0]],"o":[[-0.161,0],[-0.112,-0.044],[-0.1,0],[-0.134,0.051],[-0.198,0],[-0.114,-0.042],[-0.102,0],[-0.12,0.051],[0,0],[0.195,0],[0.102,-0.044],[0.152,0],[0.129,0.047],[0.159,0],[0.118,-0.046],[0.148,0],[0.117,0.046],[0,0]],"v":[[1.566,0.211],[1.139,0.107],[0.815,0.022],[0.513,0.1],[0.024,0.211],[-0.462,0.103],[-0.787,0.024],[-1.057,0.096],[-1.566,0.213],[-1.566,-0.026],[-1.145,-0.123],[-0.787,-0.213],[-0.384,-0.119],[0.024,-0.026],[0.432,-0.121],[0.814,-0.213],[1.218,-0.112],[1.564,-0.024]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.898039275525,0.898039275525,0.898039275525,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.209,35.076],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 36","np":4,"cix":2,"bm":0,"ix":36,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.108,0],[-0.111,-0.042],[-0.195,0],[-0.132,0.052],[-0.106,0],[-0.113,-0.045],[-0.148,-0.005],[0,0],[0.112,0.045],[0.145,0],[0.117,-0.045],[0.165,0],[0.132,0.05],[0.146,0],[0.101,-0.043],[0.185,-0.005],[0,0],[-0.113,0.05]],"o":[[0.117,0],[0.134,0.05],[0.196,0],[0.106,-0.04],[0.111,0],[0.117,0.045],[0,0],[-0.114,-0.005],[-0.123,-0.047],[-0.136,0],[-0.125,0.049],[-0.16,0],[-0.122,-0.046],[-0.145,0],[-0.104,0.046],[0,0],[0.222,-0.004],[0.09,-0.04]],"v":[[-0.789,0.001],[-0.457,0.082],[0.022,0.19],[0.502,0.08],[0.813,0.003],[1.145,0.088],[1.542,0.19],[1.542,-0.003],[1.21,-0.093],[0.815,-0.192],[0.442,-0.101],[0.023,-0.003],[-0.393,-0.098],[-0.787,-0.192],[-1.137,-0.103],[-1.543,-0.003],[-1.543,0.19],[-1.066,0.075]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0.126,0.05],[0.102,0],[0.106,-0.041],[0.205,0],[0.136,0.051],[0.107,0],[0.092,-0.039],[0.245,0],[0,0],[-0.109,0.048],[-0.154,0],[-0.125,-0.048],[-0.153,0],[-0.12,0.046],[-0.145,0],[-0.127,-0.049],[-0.115,0]],"o":[[-0.188,0],[-0.109,-0.042],[-0.097,0],[-0.138,0.053],[-0.203,0],[-0.112,-0.043],[-0.099,0],[-0.122,0.053],[-0.023,0],[0.212,0],[0.106,-0.046],[0.155,0],[0.127,0.047],[0.156,0],[0.122,-0.046],[0.153,0],[0.115,0.044],[0.02,0]],"v":[[1.587,0.234],[1.129,0.128],[0.815,0.045],[0.522,0.121],[0.025,0.234],[-0.469,0.125],[-0.785,0.047],[-1.047,0.118],[-1.564,0.236],[-1.587,-0.047],[-1.153,-0.144],[-0.785,-0.236],[-0.376,-0.14],[0.025,-0.047],[0.426,-0.142],[0.817,-0.236],[1.228,-0.135],[1.567,-0.048]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.211,35.307],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 37","np":6,"cix":2,"bm":0,"ix":37,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.123,0.049],[0.106,0],[0.108,-0.043],[0.201,0],[0.135,0.051],[0.112,0],[0.094,-0.04],[0.241,0],[0,0],[-0.111,0.048],[-0.148,0],[-0.124,-0.046],[-0.157,0],[-0.122,0.046],[-0.142,0],[-0.125,-0.047],[-0.118,0]],"o":[[-0.161,0],[-0.112,-0.044],[-0.1,0],[-0.134,0.051],[-0.198,0],[-0.114,-0.043],[-0.102,0],[-0.12,0.053],[0,0],[0.195,0],[0.102,-0.044],[0.152,0],[0.129,0.048],[0.159,0],[0.118,-0.046],[0.148,0],[0.117,0.046],[0,0]],"v":[[1.566,0.213],[1.139,0.109],[0.815,0.024],[0.513,0.102],[0.024,0.213],[-0.462,0.104],[-0.787,0.024],[-1.057,0.096],[-1.566,0.213],[-1.566,-0.025],[-1.145,-0.123],[-0.787,-0.213],[-0.384,-0.119],[0.024,-0.025],[0.432,-0.121],[0.814,-0.213],[1.218,-0.114],[1.564,-0.025]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.254901960784,0.800000059838,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.209,35.307],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 38","np":4,"cix":2,"bm":0,"ix":38,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.058,-0.217],[0,0],[-0.083,0.071],[-1.174,-0.588],[0,0],[0.822,-0.41]],"o":[[0,0],[0.018,-0.066],[0.507,-0.443],[0,0],[-0.872,-0.363],[-0.307,0.152]],"v":[[-1.865,0.143],[-1.6,0.795],[-1.45,0.588],[1.867,0.289],[1.867,-0.511],[-1.309,-0.424]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.318,0.159],[-0.88,-0.372],[0,0],[0.503,-0.441],[-0.035,-0.099]],"o":[[-0.018,-0.012],[0.058,-0.244],[0.833,-0.416],[0.01,0.018],[-1.186,-0.585],[-0.081,0.071],[-0.011,0.023]],"v":[[-1.579,0.913],[-1.902,0.152],[-1.326,-0.458],[1.892,-0.541],[1.902,0.32],[-1.427,0.616],[-1.563,0.89]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.404,28.824],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 39","np":6,"cix":2,"bm":0,"ix":39,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.23,-0.909],[0,0],[-1.45,-0.751]],"o":[[-1.201,-0.507],[0,0],[-0.165,-0.457],[0,0]],"v":[[1.885,-0.456],[-1.886,0.213],[-1.58,0.963],[1.883,0.387]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.835294177485,0.011764706817,0.117647066303,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.404,28.756],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 40","np":4,"cix":2,"bm":0,"ix":40,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.21,-0.487],[0,0],[-0.583,0.172],[-0.134,0.432],[0,0],[0.495,-0.168]],"o":[[0,0],[0.21,-0.428],[0.611,-0.178],[0,0],[-0.29,0.316],[-0.613,0.212]],"v":[[-1.422,0.434],[-1.293,1.11],[0.102,0.334],[1.425,-0.446],[1.332,-1.137],[0.037,-0.48]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.007,0],[0,0],[-0.624,0.212],[-0.277,0.329],[0,0],[0.624,-0.182],[0.178,-0.452]],"o":[[-0.018,-0.016],[0.216,-0.518],[0.505,-0.173],[0.032,0.009],[-0.14,0.462],[-0.598,0.175],[0,0.009]],"v":[[-1.3,1.191],[-1.461,0.437],[0.025,-0.512],[1.33,-1.191],[1.461,-0.446],[0.109,0.37],[-1.286,1.176]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.088,30.844],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 41","np":6,"cix":2,"bm":0,"ix":41,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.623,0.735],[0,0],[0.362,-0.918],[0,0]],"o":[[0,0],[-0.272,0.89],[0,0],[0.385,-0.908]],"v":[[1.344,-1.175],[1.443,-0.439],[-1.302,1.175],[-1.443,0.437]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.835294177485,0.011764706817,0.117647066303,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.09,30.84],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 42","np":4,"cix":2,"bm":0,"ix":42,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.955,0.252],[0.954,0.252],[0.954,-0.255],[-0.955,-0.255]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.011,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-0.018,-0.018],[0.018,-0.018],[0.018,0.018],[0,0.009]],"v":[[0.972,0.29],[-0.974,0.29],[-0.992,-0.272],[0.974,-0.29],[0.992,0.272]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.909,34.142],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 43","np":6,"cix":2,"bm":0,"ix":43,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.973,-0.272],[-0.973,-0.272],[-0.973,0.272],[0.973,0.272]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.908,34.14],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 44","np":4,"cix":2,"bm":0,"ix":44,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.083,-0.064],[0,0],[0.005,0.053],[0,0]],"o":[[0,0],[-0.078,-0.062],[0,0],[-0.005,0.051]],"v":[[-0.854,0.119],[0.835,0.119],[0.682,-0.118],[-0.689,-0.118]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.009,0],[0,0],[-0.051,0.062],[-0.002,0.019],[0,0],[-0.053,-0.062],[-0.03,0]],"o":[[0,0],[0.039,-0.037],[0.053,-0.064],[0.009,-0.036],[0.005,0.061],[0.041,0.049],[0.03,0.028]],"v":[[0.932,0.156],[-0.949,0.156],[-0.809,0.022],[-0.725,-0.121],[0.717,-0.156],[0.807,0.04],[0.919,0.119]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.909,33.73],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 45","np":6,"cix":2,"bm":0,"ix":45,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.113,0],[0,0],[-0.046,0]],"o":[[0.055,0],[0,0],[-0.108,0],[0,0]],"v":[[-0.705,-0.138],[-0.931,0.138],[0.931,0.138],[0.722,-0.138]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.896,33.73],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 46","np":4,"cix":2,"bm":0,"ix":46,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.021,-0.03],[0,0],[0,0.041],[-0.014,0.029],[0,0],[0,-0.037]],"o":[[0,0],[-0.023,-0.042],[0,-0.035],[0,0],[0.021,0.034],[-0.002,0.045]],"v":[[-0.663,0.11],[0.637,0.11],[0.607,-0.01],[0.628,-0.113],[-0.659,-0.113],[-0.629,-0.007]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.013,0],[0,0],[0,0.057],[0,0],[0,-0.058],[-0.011,-0.021]],"o":[[0,0],[0.049,-0.042],[-0.067,-0.148],[-0.026,0.042],[0,0.033],[0.079,0.066]],"v":[[0.725,0.152],[-0.746,0.152],[-0.674,-0.005],[0.695,-0.152],[0.649,-0.01],[0.667,0.076]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.932,25.884],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 47","np":6,"cix":2,"bm":0,"ix":47,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.113,0],[0,0],[-0.079,0]],"o":[[0.124,0],[0,0],[-0.108,0],[0,0]],"v":[[-0.725,-0.132],[-0.725,0.132],[0.725,0.132],[0.702,-0.132]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.917,25.884],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 48","np":4,"cix":2,"bm":0,"ix":48,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0.097],[0,-0.097]],"v":[[-0.725,-0.05],[0.725,0.048]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.048,0],[0,0],[0,0.048],[-0.048,0],[0,0],[0,-0.047]],"o":[[0,0],[-0.048,0],[0,-0.047],[0,0],[0.048,0],[0,0.048]],"v":[[0.725,0.087],[-0.725,0.087],[-0.812,-0.001],[-0.725,-0.087],[0.725,-0.087],[0.812,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.917,33.525],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 49","np":6,"cix":2,"bm":0,"ix":49,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.037,0],[0,0],[0,0.037],[-0.037,0],[0,0],[0,-0.037]],"o":[[0,0],[-0.037,0],[0,-0.037],[0,0],[0.037,0],[0.002,0.037]],"v":[[0.724,0.067],[-0.726,0.067],[-0.793,0],[-0.726,-0.067],[0.724,-0.067],[0.791,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.918,33.524],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 50","np":4,"cix":2,"bm":0,"ix":50,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0.132],[0,-0.132]],"v":[[-0.717,-0.067],[0.715,0.065]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.054,0],[0,0],[0,0.053],[-0.053,0],[0,0],[0,-0.053]],"o":[[0,0],[-0.055,0],[0,-0.076],[0,0],[0.054,0],[0.002,0.074]],"v":[[0.715,0.108],[-0.717,0.108],[-0.814,0.011],[-0.717,-0.108],[0.715,-0.108],[0.812,-0.01]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.919,26.105],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 51","np":6,"cix":2,"bm":0,"ix":51,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.042,0],[0,0],[0,0.043],[-0.042,0],[0,0],[0,-0.042]],"o":[[0,0],[-0.042,0],[0,-0.063],[0,0],[0.042,0],[0,0.064]],"v":[[0.715,0.088],[-0.716,0.088],[-0.793,0.011],[-0.716,-0.088],[0.715,-0.088],[0.793,-0.011]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.918,26.102],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 52","np":4,"cix":2,"bm":0,"ix":52,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0.134],[0,-0.134]],"v":[[-0.717,-0.068],[0.715,0.066]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.054,0],[0,0],[0,0.053],[-0.053,0],[0,0],[0,-0.054]],"o":[[0,0],[-0.055,0],[0,-0.075],[0,0],[0.054,0],[0.002,0.074]],"v":[[0.715,0.109],[-0.717,0.109],[-0.814,0.011],[-0.717,-0.109],[0.715,-0.109],[0.812,-0.01]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.919,25.666],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 53","np":6,"cix":2,"bm":0,"ix":53,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.042,0],[0,0],[0,0.043],[-0.042,0],[0,0],[0,-0.04]],"o":[[0,0],[-0.042,0],[0,-0.063],[0,0],[0.042,0],[0,0.066]],"v":[[0.715,0.088],[-0.716,0.088],[-0.793,0.011],[-0.716,-0.088],[0.715,-0.088],[0.793,-0.012]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.918,25.664],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 54","np":4,"cix":2,"bm":0,"ix":54,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.932,0.334],[0.933,0.334],[0.933,-0.334],[-0.932,-0.334]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.012,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-0.023,-0.023],[0.023,-0.023],[0.023,0.023],[0,0.012]],"v":[[0.955,0.38],[-0.955,0.38],[-0.978,-0.357],[0.955,-0.38],[0.978,0.357]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.919,25.211],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 55","np":6,"cix":2,"bm":0,"ix":55,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.954,-0.357],[-0.954,-0.357],[-0.954,0.357],[0.954,0.357]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.919,25.211],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 56","np":4,"cix":2,"bm":0,"ix":56,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.602,3.559],[0.597,3.559],[0.597,-3.559],[-0.602,-3.559]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.009,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-0.017,-0.018],[0.017,-0.018],[0.018,0.018],[-0.002,0.011]],"v":[[0.617,3.594],[-0.618,3.594],[-0.635,-3.576],[0.617,-3.594],[0.635,3.577]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.23,29.772],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 57","np":6,"cix":2,"bm":0,"ix":57,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.618,-3.577],[-0.618,-3.577],[-0.618,3.577],[0.618,3.577]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.898039275525,0.898039275525,0.898039275525,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.228,29.773],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 58","np":4,"cix":2,"bm":0,"ix":58,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.506,-0.261],[-0.365,-0.159],[-0.104,-0.05],[-0.044,-0.06],[0,0],[0.324,0.127],[0.261,0.164],[0.048,0.083]],"o":[[0.025,0.037],[0.359,0.186],[0.202,0.086],[0.207,0.101],[0,0],[-0.023,-0.032],[-0.959,-0.38],[-0.278,-0.175],[0,0]],"v":[[-1.423,-0.451],[-0.724,0.089],[0.457,0.632],[0.934,0.842],[1.293,1.119],[1.424,0.432],[0.955,0.123],[-0.884,-0.698],[-1.333,-1.122]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0.273,0.133],[0.202,0.087],[0.36,0.187],[0.007,0.011],[0,0],[-0.373,-0.235],[-0.958,-0.379],[-0.006,-0.008],[0,0]],"o":[[-0.018,-0.01],[-0.103,-0.049],[-0.365,-0.159],[-0.56,-0.292],[-0.002,-0.012],[0.037,-0.002],[0.26,0.164],[0.372,0.149],[0.001,0.014],[-0.016,0.012]],"v":[[1.302,1.186],[0.917,0.877],[0.441,0.667],[-0.741,0.125],[-1.46,-0.437],[-1.363,-1.184],[-0.865,-0.728],[0.97,0.091],[1.461,0.422],[1.321,1.174]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[106.068,30.848],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 59","np":6,"cix":2,"bm":0,"ix":59,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.562,-0.292],[-0.285,-0.138],[0,0],[0,0],[0.371,0.146],[0.383,0.242]],"o":[[0,0],[0,0],[0.562,0.291],[0.284,0.138],[0,0],[0,0],[-0.371,-0.147],[-0.384,-0.242]],"v":[[-1.344,-1.174],[-1.443,-0.438],[-0.733,0.115],[0.924,0.867],[1.302,1.174],[1.443,0.436],[0.961,0.115],[-0.874,-0.705]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.835294177485,0.011764706817,0.117647066303,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[106.069,30.839],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 60","np":4,"cix":2,"bm":0,"ix":60,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.44,0],[-0.452,-0.12],[-0.071,-0.136],[0,0],[1.3,0.172],[0.101,-0.035],[0,0],[-0.186,0.037]],"o":[[0.336,0],[0.634,0.168],[0.026,0.07],[-0.028,-0.061],[-1.293,-0.169],[0,0],[0.058,-0.024],[0.169,-0.032]],"v":[[-0.548,0.033],[0.645,0.19],[1.57,0.692],[1.865,0.103],[0.271,-0.651],[-1.865,-0.554],[-1.865,0.248],[-1.475,0.13]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.007,0],[0.046,0.083],[0.618,0.163],[0.26,-0.052],[0,0],[0,0],[-1.399,-0.184],[-0.009,-0.024],[0,0]],"o":[[-0.018,-0.027],[-0.069,-0.129],[-1.035,-0.274],[-0.258,0.051],[-0.027,-0.016],[0.02,-0.021],[1.404,0.186],[0,0.013],[-0.004,0.009]],"v":[[1.581,0.872],[1.538,0.708],[0.637,0.227],[-1.447,0.164],[-1.876,0.294],[-1.904,-0.566],[0.275,-0.688],[1.904,0.096],[1.598,0.859]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.753,28.866],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 61","np":6,"cix":2,"bm":0,"ix":61,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-1.41,-0.186],[0,0],[0,0],[1.069,0.282],[0.242,-0.047],[0,0],[0,0]],"o":[[0,0],[1.409,0.185],[0,0],[0,0],[-1.069,-0.283],[-0.24,0.048],[0,0],[0,0]],"v":[[-1.883,-0.565],[0.274,-0.667],[1.886,0.104],[1.581,0.853],[0.641,0.209],[-1.474,0.15],[-1.886,0.279],[-1.886,-0.565]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.835294177485,0.011764706817,0.117647066303,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.752,28.866],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 62","np":4,"cix":2,"bm":0,"ix":62,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.589,3.561],[0.589,3.561],[0.589,-3.558],[-0.589,-3.558]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.01,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-0.017,-0.018],[0.017,-0.018],[0.017,0.018],[0,0.011]],"v":[[0.607,3.594],[-0.607,3.594],[-0.624,-3.576],[0.607,-3.594],[0.624,3.577]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.921,29.772],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 63","np":6,"cix":2,"bm":0,"ix":63,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.607,-3.577],[-0.607,-3.577],[-0.607,3.577],[0.607,3.577]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.898039275525,0.898039275525,0.898039275525,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.923,29.773],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 64","np":4,"cix":2,"bm":0,"ix":64,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.034,-0.221],[-0.033,-0.036],[-0.127,0.099],[0,0],[0,0]],"o":[[-0.235,0.134],[0.028,0.177],[0.009,-0.068],[0,0],[0,0],[0,0]],"v":[[0.096,-0.421],[-0.202,0.107],[-0.081,0.406],[0.087,0.095],[0.238,-0.025],[0.199,-0.32]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.004,0],[0.043,0.272],[-0.26,0.143],[0,0],[0,0],[0,0],[0,-0.003]],"o":[[-0.014,-0.005],[-0.037,-0.242],[0.021,0.002],[0.006,0.01],[-0.007,0.016],[-0.152,0.12],[-0.014,0.018]],"v":[[-0.066,0.462],[-0.241,0.112],[0.089,-0.462],[0.229,-0.343],[0.277,-0.02],[0.109,0.123],[-0.046,0.444]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[107.112,32.032],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 65","np":6,"cix":2,"bm":0,"ix":65,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.04,-0.265],[0,0],[-0.16,0.125],[0,0],[0,0]],"o":[[-0.215,0.12],[0.041,0.265],[0,0],[0.161,-0.126],[0,0],[0,0]],"v":[[0.101,-0.444],[-0.22,0.111],[-0.064,0.444],[0.098,0.111],[0.26,-0.015],[0.217,-0.328]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.835294177485,0.011764706817,0.117647066303,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[107.108,32.031],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 66","np":4,"cix":2,"bm":0,"ix":66,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.037,-0.018],[0,0],[-0.402,0.04],[-0.143,0.012],[-0.229,0.048],[0,0],[0,0],[0,0],[0.479,-0.003],[0.192,-0.099]],"o":[[0,0],[0.067,-0.021],[0.129,-0.013],[0.394,-0.037],[0.292,-0.062],[0,0],[0,0],[-0.099,0.064],[-0.473,0.004],[-0.154,0.078]],"v":[[-1.288,-0.03],[-1.161,0.49],[-0.454,0.359],[-0.04,0.32],[0.992,0.199],[1.279,0.018],[1.279,-0.271],[1.104,-0.492],[0.334,-0.348],[-0.992,-0.172]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.189,0.097],[-0.478,0.004],[-0.092,0.061],[0,0],[0,0],[0.329,-0.068],[0.394,-0.037],[0.129,-0.012],[0,0]],"o":[[-0.018,-0.014],[0.013,-0.021],[0.196,-0.101],[0.493,-0.003],[0.025,0.003],[0.003,0.012],[0,0.006],[-0.231,0.05],[-0.143,0.012],[-0.473,0.048],[0,0]],"v":[[-1.174,0.533],[-1.327,-0.036],[-1.01,-0.207],[0.334,-0.387],[1.097,-0.533],[1.313,-0.29],[1.316,0.013],[0.998,0.232],[-0.036,0.355],[-0.45,0.395],[-1.169,0.531]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[106.035,29.705],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 67","np":6,"cix":2,"bm":0,"ix":67,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.488,-0.003],[0.192,-0.099],[0,0],[0,0],[-0.48,0.049],[-0.316,0.067],[0,0],[0,0]],"o":[[-0.099,0.067],[-0.487,0.004],[-0.193,0.099],[0,0],[0,0],[0.482,-0.05],[0.314,-0.067],[0,0],[0,0]],"v":[[1.107,-0.516],[0.335,-0.365],[-1.001,-0.188],[-1.309,-0.038],[-1.174,0.516],[-0.452,0.381],[0.995,0.217],[1.299,0.017],[1.299,-0.277]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.835294177485,0.011764706817,0.117647066303,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[106.034,29.704],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 68","np":4,"cix":2,"bm":0,"ix":68,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.954,0.252],[0.954,0.252],[0.954,-0.255],[-0.954,-0.255]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.01,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-0.019,-0.018],[0.019,-0.018],[0.017,0.018],[0,0.009]],"v":[[0.975,0.29],[-0.973,0.29],[-0.992,-0.272],[0.975,-0.29],[0.992,0.272]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.216,34.142],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 69","np":6,"cix":2,"bm":0,"ix":69,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.973,-0.272],[-0.973,-0.272],[-0.973,0.272],[0.973,0.272]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.215,34.14],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 70","np":4,"cix":2,"bm":0,"ix":70,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.097,-0.125],[-0.002,-0.09],[0.016,0.176],[0.233,0.134],[0,0]],"o":[[0.032,0.012],[0.113,0.147],[0.153,-0.139],[-0.02,-0.209],[0,0],[0,0]],"v":[[-0.28,-0.133],[-0.077,0.048],[0.056,0.501],[0.266,0.021],[-0.137,-0.525],[-0.241,-0.423]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.004,0],[0.136,0.175],[0,0],[0,0],[0,0],[-0.021,-0.226],[0.182,-0.151]],"o":[[-0.019,-0.023],[-0.118,-0.152],[-0.014,-0.021],[0.005,-0.011],[0.272,0.136],[0.018,0.198],[0,0]],"v":[[0.036,0.559],[-0.107,0.07],[-0.305,-0.101],[-0.278,-0.433],[-0.155,-0.559],[0.301,0.019],[0.047,0.558]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[92.089,32.135],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 71","np":6,"cix":2,"bm":0,"ix":71,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.42,-0.346],[0.143,0.183],[0,0],[0,0]],"o":[[0.452,0.251],[0,0],[-0.126,-0.163],[0,0],[0,0]],"v":[[-0.218,-0.545],[-0.041,0.545],[-0.17,0.063],[-0.379,-0.116],[-0.336,-0.429]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.835294177485,0.011764706817,0.117647066303,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[92.166,32.132],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 72","np":4,"cix":2,"bm":0,"ix":72,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.083,-0.064],[0,0],[0.005,0.053],[0,0]],"o":[[0,0],[-0.078,-0.062],[0,0],[-0.005,0.051]],"v":[[-0.854,0.119],[0.835,0.119],[0.683,-0.118],[-0.689,-0.118]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.009,0],[0,0],[-0.05,0.06],[-0.002,0.019],[0,0],[-0.053,-0.062],[-0.03,0]],"o":[[0,0],[0.039,-0.037],[0.053,-0.064],[0.009,-0.036],[0.005,0.061],[0.041,0.049],[0.03,0.028]],"v":[[0.932,0.156],[-0.949,0.156],[-0.809,0.022],[-0.725,-0.121],[0.718,-0.156],[0.808,0.04],[0.919,0.119]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.215,33.73],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 73","np":6,"cix":2,"bm":0,"ix":73,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.113,0],[0,0],[-0.046,0]],"o":[[0.055,0],[0,0],[-0.108,0],[0,0]],"v":[[-0.705,-0.138],[-0.931,0.138],[0.931,0.138],[0.722,-0.138]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.203,33.73],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 74","np":4,"cix":2,"bm":0,"ix":74,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.021,-0.03],[0,0],[0,0.041],[-0.014,0.027],[0,0],[0,-0.037]],"o":[[0,0],[-0.023,-0.042],[0,-0.035],[0,0],[0.021,0.034],[0,0.043]],"v":[[-0.665,0.11],[0.635,0.11],[0.605,-0.01],[0.626,-0.111],[-0.661,-0.111],[-0.631,-0.005]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.011,0],[0,0],[0,0.057],[0,0],[0,-0.06],[-0.011,-0.021]],"o":[[0,0],[0.047,-0.042],[-0.067,-0.148],[-0.026,0.042],[0,0.033],[0.081,0.066]],"v":[[0.725,0.152],[-0.746,0.152],[-0.674,-0.005],[0.693,-0.152],[0.647,-0.01],[0.665,0.076]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.241,25.884],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 75","np":6,"cix":2,"bm":0,"ix":75,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.113,0],[0,0],[-0.079,0]],"o":[[0.124,0],[0,0],[-0.108,0],[0,0]],"v":[[-0.725,-0.132],[-0.725,0.132],[0.725,0.132],[0.702,-0.132]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.223,25.884],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 76","np":4,"cix":2,"bm":0,"ix":76,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0.097],[0,-0.097]],"v":[[-0.725,-0.05],[0.725,0.048]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.048,0],[0,0],[0,0.048],[-0.048,0],[0,0],[0,-0.047]],"o":[[0,0],[-0.048,0],[0,-0.047],[0,0],[0.048,0],[0,0.048]],"v":[[0.725,0.087],[-0.725,0.087],[-0.812,-0.001],[-0.725,-0.087],[0.725,-0.087],[0.812,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.222,33.525],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 77","np":6,"cix":2,"bm":0,"ix":77,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.037,0],[0,0],[0,0.037],[-0.037,0],[0,0],[0,-0.037]],"o":[[0,0],[-0.037,0],[0,-0.037],[0,0],[0.037,0],[0.002,0.037]],"v":[[0.724,0.067],[-0.726,0.067],[-0.793,0],[-0.726,-0.067],[0.724,-0.067],[0.791,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.223,33.524],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 78","np":4,"cix":2,"bm":0,"ix":78,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0.132],[0,-0.132]],"v":[[-0.715,-0.067],[0.716,0.065]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.054,0],[0,0],[0,0.053],[-0.055,0],[0,0],[0,-0.053]],"o":[[0,0],[-0.055,0],[0,-0.076],[0,0],[0.054,0],[0.002,0.074]],"v":[[0.716,0.108],[-0.715,0.108],[-0.814,0.011],[-0.715,-0.108],[0.716,-0.108],[0.813,-0.01]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.223,26.105],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 79","np":6,"cix":2,"bm":0,"ix":79,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.042,0],[0,0],[0,0.043],[-0.043,0],[0,0],[0,-0.042]],"o":[[0,0],[-0.043,0],[0,-0.063],[0,0],[0.042,0],[0.002,0.064]],"v":[[0.716,0.088],[-0.716,0.088],[-0.794,0.011],[-0.716,-0.088],[0.716,-0.088],[0.792,-0.011]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.222,26.102],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 80","np":4,"cix":2,"bm":0,"ix":80,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0.134],[0,-0.134]],"v":[[-0.715,-0.068],[0.716,0.066]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.054,0],[0,0],[0,0.053],[-0.055,0],[0,0],[0,-0.054]],"o":[[0,0],[-0.055,0],[0,-0.075],[0,0],[0.054,0],[0.002,0.074]],"v":[[0.716,0.109],[-0.715,0.109],[-0.814,0.011],[-0.715,-0.109],[0.716,-0.109],[0.813,-0.01]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.223,25.666],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 81","np":6,"cix":2,"bm":0,"ix":81,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.042,0],[0,0],[0,0.043],[-0.043,0],[0,0],[0,-0.04]],"o":[[0,0],[-0.043,0],[0,-0.063],[0,0],[0.042,0],[0.002,0.066]],"v":[[0.716,0.088],[-0.716,0.088],[-0.794,0.011],[-0.716,-0.088],[0.716,-0.088],[0.792,-0.012]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.222,25.664],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 82","np":4,"cix":2,"bm":0,"ix":82,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.932,0.334],[0.933,0.334],[0.933,-0.334],[-0.932,-0.334]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.012,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-0.023,-0.023],[0.023,-0.023],[0.023,0.023],[0,0.012]],"v":[[0.955,0.38],[-0.955,0.38],[-0.978,-0.357],[0.955,-0.38],[0.978,0.357]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.224,25.211],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 83","np":6,"cix":2,"bm":0,"ix":83,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.954,-0.357],[-0.954,-0.357],[-0.954,0.357],[0.954,0.357]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.224,25.211],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 84","np":4,"cix":2,"bm":0,"ix":84,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.622,-0.02],[-0.179,-0.139],[0,0],[0.541,0.009],[0.132,0.155]],"o":[[0,0],[0.019,0.258],[0.503,0.016],[0,0],[-0.249,-0.263],[-0.463,-0.007],[0,0]],"v":[[-1.285,-0.272],[-1.285,0.014],[-0.001,0.311],[1.16,0.48],[1.287,-0.035],[-0.114,-0.318],[-1.11,-0.487]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0.498,0.016],[0.023,0.292],[0,0],[0,0],[-0.45,-0.009],[-0.256,-0.281],[0,0]],"o":[[-0.157,-0.154],[-0.666,-0.021],[0,0],[0.003,-0.012],[0.134,0.159],[0.553,0.009],[0.004,0.016],[-0.014,0.014]],"v":[[1.168,0.532],[-0.003,0.346],[-1.322,0.014],[-1.322,-0.281],[-1.126,-0.532],[-0.116,-0.357],[1.318,-0.055],[1.186,0.518]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.129,29.706],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 85","np":6,"cix":2,"bm":0,"ix":85,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.461,-0.509],[0,0],[0.039,0.499],[0,0]],"o":[[0.237,0.362],[0,0],[-0.332,-0.341],[0,0],[0,0]],"v":[[-1.111,-0.5],[1.305,-0.022],[1.169,0.531],[-1.305,0.033],[-1.305,-0.262]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.835294177485,0.011764706817,0.117647066303,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.128,29.688],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 86","np":4,"cix":2,"bm":0,"ix":86,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.042,-0.079],[0,0],[0.046,0.132]],"o":[[0.018,0.221],[0,0],[0.018,-0.052],[0,0]],"v":[[-0.007,-0.225],[-0.066,0.195],[0.046,0.158],[0.027,-0.225]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.003,0],[0.023,0.26],[0.025,-0.053],[0,0]],"o":[[0.04,-0.108],[0.144,0.134],[-0.009,0.007],[0,0]],"v":[[-0.102,0.241],[-0.042,-0.241],[0.068,0.174],[-0.098,0.238]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.589,35.26],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 87","np":6,"cix":2,"bm":0,"ix":87,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.024,-0.051],[0,0],[0.023,0.249]],"o":[[0.051,0.138],[0,0],[0.061,-0.093],[0,0]],"v":[[0.045,-0.233],[0.062,0.177],[-0.096,0.233],[-0.018,-0.231]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.027450982262,0.505882352941,0.360784313725,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.581,35.253],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 88","np":4,"cix":2,"bm":0,"ix":88,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.083,-0.005],[-0.267,0.076],[0.173,0.049]],"o":[[0.253,0.272],[-0.064,-0.046],[-0.173,-0.052]],"v":[[-0.449,-0.142],[0.451,0.117],[0.036,-0.1]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.094,0],[0.194,0.225],[-0.219,-0.063],[-0.009,-0.008]],"o":[[-0.247,0],[0.023,-0.026],[0.219,0.062],[-0.083,0.052]],"v":[[0.227,0.178],[-0.493,-0.143],[0.046,-0.129],[0.493,0.113]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.077,35.136],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 89","np":6,"cix":2,"bm":0,"ix":89,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.253,0.291],[-0.219,-0.062],[0,0]],"o":[[0,0],[0.219,0.062],[-0.297,0.1]],"v":[[-0.483,-0.176],[0.04,-0.138],[0.483,0.1]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.027450982262,0.505882352941,0.360784313725,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.079,35.159],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 90","np":4,"cix":2,"bm":0,"ix":90,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.265,-0.244],[-0.152,0.013],[-0.06,0.046]],"o":[[0.099,0.002],[0.145,-0.01],[-0.398,-0.085]],"v":[[-0.441,0.123],[0.084,0.122],[0.443,-0.042]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.085,0],[0.004,0],[-0.434,-0.095],[0.193,-0.014]],"o":[[-0.166,0],[0.283,-0.311],[-0.002,0.034],[-0.062,0.006]],"v":[[-0.145,0.161],[-0.48,0.154],[0.48,-0.066],[0.087,0.154]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.161,35.128],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 91","np":6,"cix":2,"bm":0,"ix":91,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.415,-0.094],[0.191,-0.014]],"o":[[0.298,-0.29],[0,0],[-0.191,0.014]],"v":[[-0.479,0.138],[0.479,-0.049],[0.087,0.138]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.027450982262,0.505882352941,0.360784313725,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.161,35.127],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 92","np":4,"cix":2,"bm":0,"ix":92,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.032,0.028],[0.002,-0.115],[-0.085,-0.065],[0,0.145]],"o":[[-0.064,0.048],[-0.002,0.134],[0.028,-0.035],[0,-0.145]],"v":[[-0.015,-0.293],[-0.123,-0.028],[0.008,0.288],[0.128,-0.014]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.005,0],[-0.001,0.15],[-0.078,0.051],[0,-0.186],[0.006,-0.005]],"o":[[-0.108,-0.072],[0.002,-0.133],[0.025,0.006],[0,0.184],[-0.001,0.003]],"v":[[0.01,0.325],[-0.155,-0.028],[-0.024,-0.325],[0.156,-0.012],[0.02,0.32]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.594,34.674],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 93","np":6,"cix":2,"bm":0,"ix":93,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.159,0.104],[0,-0.18],[0,0]],"o":[[0,0],[0,0.181],[-0.203,-0.143]],"v":[[0.011,-0.311],[0.168,-0.013],[0.036,0.311]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.835294177485,0.011764706817,0.117647066303,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.568,34.672],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 94","np":4,"cix":2,"bm":0,"ix":94,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.004,0],[0.044,-0.074],[-0.057,-0.101],[-0.191,0],[-0.014,0.142],[0.207,0.042],[0,0],[0,0],[0,0],[0,0],[0.068,-0.006],[0,0]],"o":[[-0.081,0],[-0.06,0.097],[0.069,0.121],[0.302,0],[0.014,-0.134],[-0.012,-0.021],[0,0],[-0.02,-0.007],[0,0],[-0.062,-0.051],[0,0],[-0.02,0.025]],"v":[[-0.199,-0.222],[-0.395,-0.107],[-0.4,0.22],[0.002,0.407],[0.443,0.101],[0.169,-0.238],[0.192,-0.351],[0.069,-0.294],[0.002,-0.399],[-0.084,-0.284],[-0.248,-0.347],[-0.174,-0.247]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.323,0],[0.073,0.13],[-0.065,0.106],[-0.083,0.007],[0,0],[-0.044,-0.055],[0,0],[0,0],[0,0],[0,0],[0.016,-0.149]],"o":[[-0.204,0],[-0.062,-0.112],[0.048,-0.076],[0,0],[0.097,-0.035],[0,0],[0.027,0.001],[0,0],[0.021,0.019],[0.205,0.05],[-0.016,0.151]],"v":[[0.001,0.437],[-0.427,0.234],[-0.422,-0.123],[-0.218,-0.252],[-0.291,-0.351],[-0.098,-0.317],[-0.012,-0.437],[0.067,-0.33],[0.212,-0.393],[0.192,-0.263],[0.473,0.107]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.595,34.598],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 95","np":6,"cix":2,"bm":0,"ix":95,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0.086,-0.01],[0,0],[-0.62,0],[0.415,0.085],[0,0],[0,0]],"o":[[0,0],[-0.046,-0.064],[0,0],[-0.344,-0.014],[0.572,0],[0,0],[0,0],[0,0]],"v":[[0.018,-0.425],[-0.082,-0.289],[-0.262,-0.358],[-0.172,-0.234],[0.018,0.425],[0.188,-0.25],[0.233,-0.377],[0.076,-0.307]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.980392216701,0.58431372549,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.579,34.594],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 96","np":4,"cix":2,"bm":0,"ix":96,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,-0.064],[0,0]],"v":[[-0.178,0.033],[0.166,0.033],[-0.178,-0.031]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.005,0],[0,0],[0,0]],"o":[[0,0],[0,-0.108],[0.01,0.103]],"v":[[0.179,0.054],[-0.189,0.054],[0.179,-0.054]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.569,31.004],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 97","np":6,"cix":2,"bm":0,"ix":97,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,-0.085],[0,0]],"v":[[0.183,0.042],[-0.183,0.042],[0.183,-0.042]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.563,31.005],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 98","np":4,"cix":2,"bm":0,"ix":98,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.039,-0.053],[-0.055,0],[-0.025,0.081],[-0.041,0.007],[-0.023,-0.026],[0.023,0.044],[0.037,0],[0.026,-0.041],[0.129,0.101],[-0.069,-0.15],[0.047,0],[0.016,-0.029],[-0.046,-0.075],[-0.029,0],[-0.016,-0.053],[0.065,-0.076],[0,0]],"o":[[0.053,0],[0.055,-0.053],[-0.064,-0.076],[0.016,-0.053],[0.044,-0.001],[0.045,-0.074],[-0.016,-0.031],[-0.052,0],[0.049,-0.161],[-0.129,0.101],[-0.046,-0.031],[-0.037,0.002],[-0.023,0.044],[0.023,-0.027],[0.056,0.009],[0.025,0.081],[0,0],[0,0]],"v":[[-0.136,0.424],[-0.007,0.523],[0.136,0.424],[0.074,0.177],[0.168,0.079],[0.261,0.118],[0.297,-0.063],[0.214,-0.111],[0.094,-0.046],[-0.002,-0.541],[-0.078,-0.057],[-0.217,-0.113],[-0.3,-0.065],[-0.265,0.117],[-0.185,0.076],[-0.076,0.175],[-0.141,0.422],[-0.136,0.422]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.004,0],[0.06,-0.019],[0.024,0.081],[0.033,0.005],[-0.028,0.052],[-0.046,0.001],[-0.026,-0.021],[-0.131,0.096],[0.047,-0.159],[-0.033,0],[-0.02,-0.036],[0.056,-0.087],[0.014,-0.045],[-0.079,-0.076],[0.052,-0.067]],"o":[[-0.076,-0.092],[0.067,-0.094],[-0.015,-0.046],[-0.157,-0.043],[0.018,-0.036],[0.038,0],[-0.049,-0.159],[0.143,0.094],[0.026,-0.021],[0.051,0.001],[0.028,0.052],[-0.134,-0.037],[-0.024,0.081],[-0.071,-0.001],[-0.019,0.023]],"v":[[0,0.562],[-0.168,0.452],[-0.095,0.184],[-0.173,0.101],[-0.318,-0.072],[-0.215,-0.132],[-0.117,-0.101],[-0.007,-0.562],[0.117,-0.101],[0.21,-0.132],[0.318,-0.072],[0.274,0.145],[0.095,0.184],[0.18,0.434],[0.026,0.537]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.574,30.745],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 99","np":6,"cix":2,"bm":0,"ix":99,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.087,-0.14],[0.142,0.103],[-0.072,-0.157],[-0.17,-0.26],[0.212,-0.203],[-0.056,-0.072],[-0.076,-0.027],[-0.116,-0.159]],"o":[[0.072,-0.157],[-0.141,0.103],[-0.086,-0.141],[0.117,-0.159],[0.076,-0.028],[0.057,-0.072],[-0.212,-0.203],[0.17,-0.26]],"v":[[0.085,-0.05],[0,-0.552],[-0.085,-0.05],[-0.263,0.139],[-0.171,0.443],[0,0.552],[0.172,0.443],[0.263,0.139]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.575,30.743],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 100","np":4,"cix":2,"bm":0,"ix":100,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,-0.064],[0,0]],"v":[[-0.178,0.033],[0.167,0.033],[-0.178,-0.031]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.005,0],[0,0],[0,0]],"o":[[0,0],[0,-0.108],[0.011,0.105]],"v":[[0.178,0.054],[-0.189,0.054],[0.178,-0.054]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.067,30.116],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 101","np":6,"cix":2,"bm":0,"ix":101,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,-0.087],[0,0]],"v":[[0.183,0.043],[-0.183,0.043],[0.183,-0.043]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.062,30.116],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 102","np":4,"cix":2,"bm":0,"ix":102,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.041,-0.053],[-0.053,0],[-0.026,0.081],[-0.043,0.007],[-0.026,-0.03],[0.023,0.044],[0.037,0.002],[0.025,-0.04],[0.132,0.102],[-0.067,-0.147],[0.047,0],[0.015,-0.029],[-0.046,-0.075],[-0.037,-0.005],[-0.018,-0.053],[0.066,-0.075]],"o":[[0.053,0],[0.055,-0.053],[-0.064,-0.076],[0.016,-0.053],[0.031,-0.007],[0.044,-0.072],[-0.016,-0.03],[-0.05,0],[0.048,-0.157],[-0.132,0.102],[-0.046,-0.032],[-0.038,0.002],[-0.023,0.044],[0.028,-0.032],[0.043,0.007],[0.024,0.081],[0,0]],"v":[[-0.134,0.416],[-0.005,0.515],[0.137,0.416],[0.076,0.169],[0.172,0.072],[0.264,0.11],[0.299,-0.07],[0.215,-0.119],[0.096,-0.054],[0.001,-0.532],[-0.074,-0.064],[-0.214,-0.121],[-0.296,-0.073],[-0.262,0.109],[-0.167,0.068],[-0.07,0.165],[-0.137,0.412]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.004,0],[0.06,-0.021],[0.024,0.081],[0.033,0.007],[-0.026,0.053],[-0.046,0.001],[-0.027,-0.021],[-0.131,0.096],[0.046,-0.153],[-0.034,0],[-0.019,-0.036],[0.057,-0.085],[0.014,-0.044],[-0.08,-0.076],[0.051,-0.067]],"o":[[-0.076,-0.094],[0.067,-0.093],[-0.014,-0.046],[-0.157,-0.043],[0.02,-0.036],[0.039,0],[-0.046,-0.153],[0.145,0.096],[0.026,-0.019],[0.051,0.001],[0.029,0.053],[-0.134,-0.037],[-0.025,0.081],[-0.071,-0.002],[-0.016,0.025]],"v":[[0.001,0.554],[-0.167,0.444],[-0.094,0.176],[-0.171,0.093],[-0.318,-0.08],[-0.215,-0.14],[-0.117,-0.109],[-0.007,-0.554],[0.117,-0.109],[0.208,-0.14],[0.316,-0.08],[0.271,0.135],[0.094,0.174],[0.178,0.425],[0.025,0.527]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.07,29.864],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 103","np":6,"cix":2,"bm":0,"ix":103,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.087,-0.141],[0.142,0.103],[-0.072,-0.157],[-0.17,-0.26],[0.212,-0.203],[-0.056,-0.072],[-0.076,-0.027],[-0.116,-0.157]],"o":[[0.072,-0.157],[-0.141,0.103],[-0.086,-0.141],[0.117,-0.159],[0.076,-0.028],[0.057,-0.072],[-0.211,-0.203],[0.168,-0.258]],"v":[[0.086,-0.058],[0.001,-0.544],[-0.084,-0.058],[-0.262,0.131],[-0.17,0.435],[0.001,0.544],[0.173,0.435],[0.264,0.131]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.069,29.865],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 104","np":4,"cix":2,"bm":0,"ix":104,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,-0.064],[0,0]],"v":[[-0.177,0.033],[0.167,0.033],[-0.177,-0.031]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.007,0],[0,0],[0,0]],"o":[[0,0],[0,-0.108],[0.011,0.105]],"v":[[0.178,0.054],[-0.189,0.054],[0.178,-0.054]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.059,30.116],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 105","np":6,"cix":2,"bm":0,"ix":105,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,-0.087],[0,0]],"v":[[0.183,0.043],[-0.183,0.043],[0.183,-0.043]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.054,30.116],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 106","np":4,"cix":2,"bm":0,"ix":106,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.041,-0.053],[-0.053,0],[-0.024,0.081],[-0.043,0.007],[-0.026,-0.03],[0.023,0.044],[0.037,0],[0.025,-0.04],[0.132,0.102],[-0.067,-0.147],[0.046,0],[0.014,-0.029],[-0.046,-0.075],[-0.032,-0.003],[-0.016,-0.053],[0.066,-0.075],[0,0]],"o":[[0.053,0],[0.055,-0.053],[-0.064,-0.076],[0.016,-0.053],[0.032,-0.007],[0.045,-0.074],[-0.014,-0.031],[-0.052,0],[0.048,-0.157],[-0.132,0.102],[-0.044,-0.03],[-0.043,0.002],[-0.023,0.044],[0.028,-0.032],[0.043,0.007],[0.025,0.081],[0,0],[0,0]],"v":[[-0.135,0.416],[-0.006,0.515],[0.137,0.416],[0.073,0.169],[0.169,0.072],[0.262,0.11],[0.298,-0.071],[0.215,-0.119],[0.096,-0.054],[0.001,-0.532],[-0.075,-0.064],[-0.209,-0.121],[-0.296,-0.073],[-0.26,0.109],[-0.167,0.068],[-0.073,0.165],[-0.139,0.412],[-0.135,0.412]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.004,0],[0.06,-0.021],[0.024,0.081],[0.033,0.007],[-0.026,0.053],[-0.046,0.001],[-0.027,-0.021],[-0.131,0.096],[0.046,-0.153],[-0.033,0],[-0.019,-0.036],[0.057,-0.087],[0.014,-0.044],[-0.077,-0.076],[0.051,-0.067]],"o":[[-0.076,-0.094],[0.067,-0.093],[-0.015,-0.046],[-0.157,-0.043],[0.02,-0.036],[0.039,0],[-0.046,-0.151],[0.145,0.096],[0.026,-0.021],[0.05,0.001],[0.028,0.053],[-0.134,-0.037],[-0.025,0.081],[-0.07,-0.002],[-0.018,0.023]],"v":[[0.001,0.554],[-0.167,0.444],[-0.094,0.176],[-0.172,0.093],[-0.319,-0.08],[-0.216,-0.14],[-0.117,-0.109],[-0.008,-0.554],[0.116,-0.109],[0.209,-0.14],[0.317,-0.08],[0.273,0.137],[0.095,0.176],[0.179,0.427],[0.026,0.529]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.063,29.864],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 107","np":6,"cix":2,"bm":0,"ix":107,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.087,-0.141],[0.142,0.103],[-0.072,-0.157],[-0.17,-0.26],[0.212,-0.203],[-0.056,-0.072],[-0.076,-0.027],[-0.116,-0.157]],"o":[[0.072,-0.157],[-0.141,0.103],[-0.086,-0.141],[0.117,-0.159],[0.076,-0.028],[0.057,-0.072],[-0.212,-0.203],[0.17,-0.261]],"v":[[0.085,-0.058],[0,-0.544],[-0.085,-0.058],[-0.263,0.131],[-0.171,0.435],[0,0.544],[0.172,0.435],[0.263,0.131]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.063,29.865],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 108","np":4,"cix":2,"bm":0,"ix":108,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.173,0],[0,-0.189],[-0.173,0],[0,0.187]],"o":[[-0.173,0],[0,0.187],[0.173,0],[0,-0.187]],"v":[[0,-0.341],[-0.314,0],[0,0.341],[0.314,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.193,0],[0,0.207],[-0.193,0],[0,-0.209]],"o":[[-0.193,0],[0,-0.209],[0.193,0],[0,0.208]],"v":[[0,0.376],[-0.35,0],[0,-0.376],[0.35,0]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.707,32.428],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 109","np":6,"cix":2,"bm":0,"ix":109,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.198],[-0.184,0],[0,-0.198],[0.184,0]],"o":[[0,-0.198],[0.184,0],[0,0.198],[-0.184,0]],"v":[[-0.332,0],[0,-0.359],[0.332,0],[0,0.359]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.027450982262,0.505882352941,0.360784313725,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.707,32.427],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 110","np":4,"cix":2,"bm":0,"ix":110,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.579,0],[0,-0.625],[-0.578,0],[0,0.625]],"o":[[-0.579,0],[0,0.625],[0.578,0],[0.002,-0.625]],"v":[[0,-1.132],[-1.049,0.002],[0,1.136],[1.049,0.002]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.592,0],[0,0.638],[-0.592,0],[0,-0.637]],"o":[[-0.592,0],[0,-0.637],[0.592,0],[0,0.64]],"v":[[0,1.157],[-1.074,0],[0,-1.157],[1.074,0]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.573,30.219],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 111","np":6,"cix":2,"bm":0,"ix":111,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.632],[-0.587,0],[0,-0.632],[0.586,0]],"o":[[0,-0.632],[0.586,0],[0,0.632],[-0.587,0]],"v":[[-1.061,0],[0.001,-1.145],[1.061,0],[0.001,1.145]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.254901960784,0.800000059838,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.574,30.221],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 112","np":4,"cix":2,"bm":0,"ix":112,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.795,0],[0,-0.856],[-0.795,0],[0,0.857]],"o":[[-0.793,0],[0,0.857],[0.795,0],[0,-0.856]],"v":[[-0.001,-1.555],[-1.44,0],[-0.001,1.555],[1.439,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.811,0],[0,0.875],[-0.811,0],[0,-0.874]],"o":[[-0.811,0],[0,-0.874],[0.811,0],[0.001,0.873]],"v":[[-0.001,1.585],[-1.471,0],[-0.001,-1.585],[1.469,0]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.574,30.221],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 113","np":6,"cix":2,"bm":0,"ix":113,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.865],[-0.802,0],[0,-0.865],[0.803,0]],"o":[[0,-0.867],[0.803,0],[0,0.865],[-0.802,0]],"v":[[-1.454,0],[-0.001,-1.568],[1.454,0],[-0.001,1.568]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.839215746113,0.011764706817,0.125490196078,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.574,30.22],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 114","np":4,"cix":2,"bm":0,"ix":114,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0.104,0],[0,-0.104]],"o":[[0,0],[0,0],[0,-0.104],[-0.104,0],[0,0]],"v":[[-0.189,0.342],[0.187,0.342],[0.187,-0.153],[-0.002,-0.342],[-0.191,-0.153]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.005,0],[0,0],[0,0],[-0.117,0],[0,-0.116],[0,0]],"o":[[0,0],[-0.01,-0.01],[0,-0.116],[0.117,0],[0,0],[0,0.005]],"v":[[0.2,0.363],[-0.2,0.363],[-0.21,-0.153],[0,-0.363],[0.21,-0.153],[0.21,0.353]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.405,29.297],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 115","np":6,"cix":2,"bm":0,"ix":115,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[-0.109,0],[0,-0.11]],"o":[[0,0],[0,0],[0,-0.11],[0.11,0],[0,0]],"v":[[0.2,0.352],[-0.2,0.352],[-0.2,-0.152],[-0.001,-0.352],[0.2,-0.152]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.254901960784,0.800000059838,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.405,29.297],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 116","np":4,"cix":2,"bm":0,"ix":116,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0.149,0],[0,-0.149],[0,0]],"o":[[0,0],[0,0],[0,-0.149],[-0.148,0],[0,0],[0,0]],"v":[[-0.27,0.386],[0.269,0.386],[0.269,-0.117],[0,-0.386],[-0.268,-0.117],[-0.268,0.386]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.005,0],[0,0],[0,0],[-0.159,0],[0,-0.159],[0,0]],"o":[[0,0],[-0.009,-0.008],[0,-0.159],[0.159,0],[0,0],[-0.002,0.005]],"v":[[0.278,0.405],[-0.279,0.405],[-0.288,-0.117],[0,-0.405],[0.288,-0.117],[0.288,0.397]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.407,29.254],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 117","np":6,"cix":2,"bm":0,"ix":117,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.154,0],[0,-0.154],[0,0]],"o":[[0,0],[0,-0.154],[0.154,0],[0,0],[0,0]],"v":[[-0.279,0.395],[-0.279,-0.117],[0,-0.395],[0.279,-0.117],[0.279,0.395]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.405,29.254],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 118","np":4,"cix":2,"bm":0,"ix":118,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-0.172,0.15],[0.169,0.15],[0.179,0.03],[-0.07,-0.148],[-0.179,0.016]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.006,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-0.012,-0.011],[0.002,-0.007],[0.018,-0.004],[0.005,0.01],[-0.002,0.005]],"v":[[0.179,0.175],[-0.183,0.175],[-0.204,0.014],[-0.084,-0.171],[0.199,0.016],[0.192,0.164]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.056,29.034],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 119","np":6,"cix":2,"bm":0,"ix":119,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-0.074,-0.165],[0.192,0.027],[0.18,0.165],[-0.185,0.165],[-0.192,0.014]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.056,29.032],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 120","np":4,"cix":2,"bm":0,"ix":120,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-0.169,0.15],[0.172,0.15],[0.179,0.016],[0.069,-0.148],[-0.18,0.03]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.006,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-0.012,-0.011],[0.005,-0.011],[0.018,0.004],[0.002,0.007],[0,0.007]],"v":[[0.184,0.175],[-0.18,0.175],[-0.204,0.027],[0.066,-0.175],[0.202,0.005],[0.195,0.162]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.753,29.034],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 121","np":6,"cix":2,"bm":0,"ix":121,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.074,-0.165],[-0.192,0.027],[-0.18,0.165],[0.185,0.165],[0.192,0.014]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.752,29.032],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 122","np":4,"cix":2,"bm":0,"ix":122,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.107,0.119],[0.08,0.119],[0.174,-0.121],[-0.176,-0.121]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.006,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-0.012,-0.009],[0.012,-0.016],[0.013,0.016],[-0.004,0.003]],"v":[[0.087,0.144],[-0.116,0.144],[-0.204,-0.128],[0.191,-0.144],[0.1,0.137]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.418,28.829],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 123","np":6,"cix":2,"bm":0,"ix":123,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.191,-0.133],[0.191,-0.133],[0.087,0.133],[-0.116,0.133]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.418,28.827],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 124","np":4,"cix":2,"bm":0,"ix":124,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.018,-0.053],[0,0],[-0.008,0.037],[0.065,0.035],[0.009,-0.014]],"o":[[0,0],[0.028,-0.016],[-0.044,-0.079],[-0.039,0.047],[0.002,0.016]],"v":[[-0.083,0.115],[0.051,0.143],[0.148,0.046],[-0.042,-0.146],[-0.131,-0.033]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0.003],[-0.101,0.124],[-0.044,-0.062],[0.003,-0.002]],"o":[[0,0],[-0.064,-0.164],[0,-0.005],[0.084,0.03],[-0.004,0.099],[0,0]],"v":[[0.053,0.168],[-0.095,0.136],[-0.159,-0.035],[-0.058,-0.168],[0.159,0.009],[0.057,0.166]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.587,28.933],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 125","np":6,"cix":2,"bm":0,"ix":125,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.043,-0.059],[0,0],[0,0],[0,0.004]],"o":[[0.071,0.034],[0.042,0.058],[0,0],[0,0],[-0.002,-0.003]],"v":[[-0.071,-0.158],[0.129,0.019],[0.03,0.158],[-0.115,0.126],[-0.168,-0.033]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.61,28.93],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 126","np":4,"cix":2,"bm":0,"ix":126,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.039,0.048],[0.038,-0.057],[-0.028,-0.018],[0,0],[-0.005,0.017]],"o":[[-0.065,0.035],[0.003,0.06],[0,0],[0.017,-0.051],[-0.012,-0.016]],"v":[[0.052,-0.144],[-0.134,0.026],[-0.043,0.146],[0.092,0.117],[0.142,-0.029]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0.013,0.055],[-0.07,0.035],[0,-0.006],[0.053,-0.155],[0,0]],"o":[[-0.011,-0.004],[0.053,-0.104],[0.117,0.127],[0,0],[-0.009,0.007],[0,0]],"v":[[-0.046,0.169],[-0.165,0.055],[0.048,-0.169],[0.165,-0.034],[0.112,0.128],[-0.043,0.167]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.209,28.932],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 127","np":6,"cix":2,"bm":0,"ix":127,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.043,-0.059],[0,0],[0,0],[0,0.004]],"o":[[-0.069,0.034],[-0.042,0.058],[0,0],[0,0],[0.002,-0.003]],"v":[[0.072,-0.158],[-0.129,0.019],[-0.03,0.158],[0.115,0.126],[0.168,-0.033]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.191,28.93],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 128","np":4,"cix":2,"bm":0,"ix":128,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0.104,0],[0,-0.104]],"o":[[0,0],[0,0],[0,-0.104],[-0.104,0],[0,0]],"v":[[-0.189,0.342],[0.187,0.342],[0.187,-0.153],[-0.002,-0.342],[-0.191,-0.153]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.005,0],[0,0],[0,0],[-0.117,0],[0,-0.116],[0,0]],"o":[[0,0],[-0.01,-0.01],[0,-0.116],[0.117,0],[0,0],[0,0.007]],"v":[[0.2,0.363],[-0.2,0.363],[-0.21,-0.153],[0,-0.363],[0.21,-0.153],[0.21,0.353]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.8,28.256],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 129","np":6,"cix":2,"bm":0,"ix":129,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[-0.111,0],[0,-0.11]],"o":[[0,0],[0,0],[0,-0.11],[0.112,0],[0,0]],"v":[[0.2,0.352],[-0.2,0.352],[-0.2,-0.152],[-0.001,-0.352],[0.2,-0.152]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.254901960784,0.800000059838,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.8,28.255],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 130","np":4,"cix":2,"bm":0,"ix":130,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0.136,0],[0,-0.136]],"o":[[0,0],[0,0],[0,-0.136],[-0.136,0],[0,0]],"v":[[-0.245,0.397],[0.246,0.397],[0.246,-0.154],[0,-0.4],[-0.245,-0.154]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.007,0],[0,0],[0,0],[-0.147,0],[0,-0.147],[0,0]],"o":[[0,0],[-0.01,-0.011],[0,-0.147],[0.146,0],[0,0],[0,0.007]],"v":[[0.257,0.421],[-0.257,0.421],[-0.267,-0.154],[0.001,-0.421],[0.267,-0.154],[0.267,0.409]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.802,28.256],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 131","np":6,"cix":2,"bm":0,"ix":131,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.141,0],[0,-0.141],[0,0]],"o":[[0,0],[0,-0.141],[0.141,0],[0,0],[0,0]],"v":[[-0.256,0.409],[-0.256,-0.153],[0,-0.409],[0.256,-0.153],[0.256,0.409]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.801,28.255],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 132","np":4,"cix":2,"bm":0,"ix":132,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0.104,0],[0,-0.104],[0,0]],"o":[[0,0],[0,0],[0,-0.104],[-0.104,0],[0,0],[0,0]],"v":[[-0.188,0.342],[0.188,0.342],[0.188,-0.153],[-0.001,-0.342],[-0.19,-0.153],[-0.19,0.342]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.007,0],[0,0],[0,0],[-0.116,0],[0,-0.116],[0,0]],"o":[[0,0],[-0.011,-0.01],[0,-0.116],[0.117,0],[0,0],[0.002,0.007]],"v":[[0.199,0.363],[-0.2,0.363],[-0.211,-0.153],[-0.001,-0.363],[0.209,-0.153],[0.209,0.353]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[96.996,28.256],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 133","np":6,"cix":2,"bm":0,"ix":133,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[-0.109,0],[0,-0.11]],"o":[[0,0],[0,0],[0,-0.11],[0.11,0],[0,0]],"v":[[0.2,0.352],[-0.2,0.352],[-0.2,-0.152],[-0.001,-0.352],[0.2,-0.152]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.254901960784,0.800000059838,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[96.995,28.255],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 134","np":4,"cix":2,"bm":0,"ix":134,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0.136,0],[0,-0.136]],"o":[[0,0],[0,0],[0,-0.136],[-0.136,0],[0,0]],"v":[[-0.245,0.397],[0.246,0.397],[0.246,-0.154],[0,-0.4],[-0.245,-0.154]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.005,0],[0,0],[0,0],[-0.147,0],[0,-0.147],[0,0]],"o":[[0,0],[-0.01,-0.011],[0,-0.147],[0.148,0],[0,0],[0,0.007]],"v":[[0.257,0.421],[-0.257,0.421],[-0.267,-0.154],[0.001,-0.421],[0.267,-0.154],[0.267,0.409]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[96.998,28.256],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 135","np":6,"cix":2,"bm":0,"ix":135,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.141,0],[0,-0.141],[0,0]],"o":[[0,0],[0,-0.141],[0.141,0],[0,0],[0,0]],"v":[[-0.256,0.409],[-0.256,-0.153],[0,-0.409],[0.256,-0.153],[0.256,0.409]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[96.996,28.255],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 136","np":4,"cix":2,"bm":0,"ix":136,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.2,0.062],[0.199,0.062],[0.199,-0.067],[-0.2,-0.067]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.007,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-0.011,-0.01],[0.011,-0.01],[0.011,0.01],[0,0.005]],"v":[[0.21,0.085],[-0.21,0.085],[-0.221,-0.076],[0.21,-0.085],[0.221,0.075]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[96.952,28.968],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 137","np":6,"cix":2,"bm":0,"ix":137,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.21,0.074],[0.212,0.074],[0.212,-0.076],[-0.21,-0.076]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.006,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-0.011,-0.011],[0.011,-0.01],[0.011,0.011],[0,0.005]],"v":[[0.222,0.098],[-0.221,0.098],[-0.232,-0.086],[0.222,-0.098],[0.232,0.086]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[96.396,29.426],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 138","np":6,"cix":2,"bm":0,"ix":138,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.21,0.076],[0.21,0.076],[0.21,-0.074],[-0.21,-0.074]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.007,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-0.01,-0.011],[0.01,-0.01],[0.01,0.01],[0.002,0.006]],"v":[[0.221,0.097],[-0.223,0.097],[-0.233,-0.087],[0.221,-0.097],[0.231,0.086]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.968,29.339],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 139","np":6,"cix":2,"bm":0,"ix":139,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.212,0.074],[0.208,0.074],[0.208,-0.076],[-0.212,-0.076]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.005,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-0.011,-0.01],[0.011,-0.011],[0.011,0.011],[0,0.005]],"v":[[0.221,0.097],[-0.221,0.097],[-0.232,-0.086],[0.221,-0.097],[0.232,0.087]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[96.617,29.254],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 140","np":6,"cix":2,"bm":0,"ix":140,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.21,0.074],[0.212,0.074],[0.212,-0.076],[-0.21,-0.076]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.006,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-0.011,-0.01],[0.011,-0.011],[0.011,0.011],[0,0.005]],"v":[[0.222,0.097],[-0.221,0.097],[-0.232,-0.086],[0.222,-0.097],[0.232,0.087]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[96.396,29.092],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 141","np":6,"cix":2,"bm":0,"ix":141,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.212,0.074],[0.21,0.074],[0.21,-0.076],[-0.212,-0.076]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.005,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-0.011,-0.011],[0.011,-0.011],[0.011,0.011],[0,0.005]],"v":[[0.222,0.098],[-0.221,0.098],[-0.232,-0.087],[0.222,-0.098],[0.232,0.086]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[96.743,28.807],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 142","np":6,"cix":2,"bm":0,"ix":142,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.201,0.063],[0.199,0.063],[0.199,-0.066],[-0.201,-0.066]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.007,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-0.01,-0.011],[0.01,-0.011],[0.01,0.011],[0.002,0.005]],"v":[[0.21,0.086],[-0.212,0.086],[-0.221,-0.075],[0.21,-0.086],[0.219,0.075]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.688,28.294],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 143","np":6,"cix":2,"bm":0,"ix":143,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.211,0.076],[0.209,0.076],[0.209,-0.074],[-0.211,-0.074]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.005,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-0.011,-0.011],[0.011,-0.011],[0.01,0.011],[0,0.007]],"v":[[0.222,0.098],[-0.221,0.098],[-0.232,-0.087],[0.222,-0.098],[0.232,0.086]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.477,28.117],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 144","np":6,"cix":2,"bm":0,"ix":144,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.2,0.065],[0.199,0.065],[0.199,-0.064],[-0.2,-0.064]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.006,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-0.011,-0.011],[0.011,-0.011],[0.011,0.011],[0,0.007]],"v":[[0.21,0.086],[-0.21,0.086],[-0.221,-0.075],[0.21,-0.086],[0.221,0.075]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.128,28.72],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 145","np":6,"cix":2,"bm":0,"ix":145,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.199,0.062],[0.201,0.062],[0.201,-0.066],[-0.199,-0.066]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.008,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-0.01,-0.011],[0.01,-0.01],[0.011,0.01],[0.002,0.006]],"v":[[0.209,0.086],[-0.212,0.086],[-0.222,-0.076],[0.209,-0.086],[0.22,0.074]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.357,27.835],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 146","np":6,"cix":2,"bm":0,"ix":146,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.199,0.064],[0.201,0.064],[0.201,-0.064],[-0.199,-0.064]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.007,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-0.01,-0.01],[0.01,-0.01],[0.01,0.01],[0.002,0.007]],"v":[[0.21,0.085],[-0.212,0.085],[-0.222,-0.076],[0.21,-0.085],[0.22,0.075]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[96.786,27.602],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 147","np":6,"cix":2,"bm":0,"ix":147,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.186,0.075],[0.188,0.075],[0.188,-0.077],[-0.186,-0.077]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.007,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-0.011,-0.011],[0.011,-0.011],[0.01,0.011],[0,0.006]],"v":[[0.197,0.097],[-0.196,0.097],[-0.206,-0.085],[0.197,-0.097],[0.206,0.085]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.016,29.006],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 148","np":6,"cix":2,"bm":0,"ix":148,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.186,0.077],[0.186,0.077],[0.186,-0.075],[-0.186,-0.075]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.005,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-0.011,-0.01],[0.011,-0.011],[0.01,0.011],[0,0.007]],"v":[[0.197,0.096],[-0.196,0.096],[-0.207,-0.085],[0.197,-0.096],[0.207,0.086]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.721,28.727],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 149","np":6,"cix":2,"bm":0,"ix":149,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.186,0.078],[0.186,0.078],[0.186,-0.074],[-0.186,-0.074]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.005,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-0.011,-0.011],[0.01,-0.011],[0.01,0.011],[0,0.007]],"v":[[0.197,0.096],[-0.195,0.096],[-0.206,-0.085],[0.197,-0.096],[0.206,0.086]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.142,28.059],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 150","np":6,"cix":2,"bm":0,"ix":150,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.074,0.077],[0.074,0.077],[0.074,-0.075],[-0.074,-0.075]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.007,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-0.01,-0.01],[0.01,-0.01],[0.011,0.01],[0,0.007]],"v":[[0.085,0.096],[-0.085,0.096],[-0.096,-0.086],[0.085,-0.096],[0.096,0.086]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[96.696,27.061],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 151","np":6,"cix":2,"bm":0,"ix":151,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.075,0.075],[0.074,0.075],[0.074,-0.077],[-0.075,-0.077]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.005,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-0.011,-0.011],[0.011,-0.01],[0.011,0.01],[0,0.005]],"v":[[0.085,0.096],[-0.085,0.096],[-0.096,-0.086],[0.085,-0.096],[0.096,0.086]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.917,27.018],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 152","np":6,"cix":2,"bm":0,"ix":152,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.186,0.077],[0.186,0.077],[0.186,-0.075],[-0.186,-0.075]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.006,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-0.01,-0.01],[0.01,-0.011],[0.011,0.011],[0,0.005]],"v":[[0.195,0.096],[-0.197,0.096],[-0.206,-0.085],[0.195,-0.096],[0.206,0.088]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.106,27.518],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 153","np":6,"cix":2,"bm":0,"ix":153,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.186,0.075],[0.186,0.075],[0.186,-0.077],[-0.186,-0.077]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.007,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-0.011,-0.01],[0.011,-0.01],[0.01,0.01],[0,0.005]],"v":[[0.197,0.096],[-0.195,0.096],[-0.206,-0.086],[0.197,-0.096],[0.206,0.086]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.552,27.344],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 154","np":6,"cix":2,"bm":0,"ix":154,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.186,0.076],[0.188,0.076],[0.188,-0.077],[-0.186,-0.077]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.006,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-0.01,-0.011],[0.01,-0.011],[0.011,0.011],[0,0.007]],"v":[[0.196,0.096],[-0.197,0.096],[-0.207,-0.086],[0.196,-0.096],[0.207,0.085]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.301,27.35],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 155","np":6,"cix":2,"bm":0,"ix":155,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.185,0.075],[0.186,0.075],[0.186,-0.077],[-0.185,-0.077]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.005,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-0.011,-0.011],[0.011,-0.011],[0.011,0.011],[0,0.005]],"v":[[0.196,0.096],[-0.196,0.096],[-0.207,-0.085],[0.196,-0.096],[0.207,0.086]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.405,26.89],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 156","np":6,"cix":2,"bm":0,"ix":156,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.211,0.077],[0.209,0.077],[0.209,-0.073],[-0.211,-0.073]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.005,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-0.01,-0.011],[0.01,-0.01],[0.01,0.011],[0,0.005]],"v":[[0.222,0.098],[-0.222,0.098],[-0.232,-0.086],[0.222,-0.098],[0.232,0.086]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[96.575,27.439],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 157","np":6,"cix":2,"bm":0,"ix":157,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.007,0],[0,0],[0,0]],"o":[[0,0],[0,-0.023],[0.011,0.019]],"v":[[0.191,0.011],[-0.202,0.011],[0.191,-0.011]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.411,26.403],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 158","np":4,"cix":2,"bm":0,"ix":158,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.007,0],[0,0],[0,0]],"o":[[0,0],[0,-0.023],[0.012,0.018]],"v":[[0.181,0.011],[-0.193,0.011],[0.181,-0.011]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.022,26.831],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 159","np":4,"cix":2,"bm":0,"ix":159,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.007,0],[0,0],[0,0]],"o":[[0,0],[0,-0.023],[0.012,0.018]],"v":[[0.183,0.011],[-0.195,0.011],[0.183,-0.011]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[96.812,26.831],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 160","np":4,"cix":2,"bm":0,"ix":160,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.005,0],[0,0],[0,0]],"o":[[0,0],[0,-0.021],[0.011,0.017]],"v":[[0.904,0.01],[-0.915,0.01],[0.904,-0.01]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.434,27.762],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 161","np":4,"cix":2,"bm":0,"ix":161,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[-0.011,-0.01],[0.011,-0.01],[0,0],[0,0],[-0.013,-0.01],[0.011,-0.01],[0,0],[0,0],[-0.01,0.088],[-0.01,-0.088],[-0.01,0.088],[-0.011,-0.088],[0,0],[0,0],[0.011,0.01],[-0.011,0.01],[-0.01,-0.01],[0.01,-0.011],[0,0],[0,0],[-0.01,0.088],[-0.01,-0.088],[-0.01,0.088],[-0.011,-0.088],[0,0],[0,0],[0.011,0.011],[-0.011,0.011],[-0.01,-0.011],[0.01,-0.01],[0,0],[0,0],[-0.011,0.088],[-0.01,-0.088],[-0.01,0.088],[-0.011,-0.088],[0,0],[0,0],[0.011,0.01],[-0.011,0.011],[0,0],[0,0],[0.011,0.011],[-0.011,0.011],[0,0],[0,0]],"v":[[-1.274,1.78],[0.919,1.78],[1.268,1.151],[0.881,1.151],[0.87,-0.096],[1.027,-0.106],[1.027,-0.676],[0.747,-0.676],[0.734,-1.027],[0.891,-1.037],[0.891,-1.355],[0.779,-1.355],[0.648,-1.267],[0.476,-1.355],[0.337,-1.267],[0.219,-1.355],[0.219,-1.037],[0.374,-1.037],[0.385,-0.68],[0.144,-0.67],[0.133,-1.454],[0.294,-1.465],[0.294,-1.781],[0.182,-1.781],[0.051,-1.693],[-0.121,-1.781],[-0.26,-1.693],[-0.378,-1.781],[-0.378,-1.465],[-0.249,-1.465],[-0.238,-0.676],[-0.462,-0.666],[-0.473,-1.025],[-0.331,-1.035],[-0.331,-1.353],[-0.443,-1.353],[-0.574,-1.265],[-0.746,-1.353],[-0.885,-1.265],[-1.003,-1.353],[-1.003,-1.035],[-0.839,-1.035],[-0.827,-0.691],[-1.092,-0.68],[-1.092,-0.105],[-0.938,-0.105],[-0.926,1.156],[-1.272,1.167],[-1.272,1.78]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.005,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-0.011,-0.01],[0.011,-0.011],[0,0],[0,0],[-0.011,-0.011],[0.011,-0.01],[0,0],[0,0],[-0.011,-0.011],[0.011,-0.011],[0.011,0.089],[0.011,-0.089],[0.011,0.089],[0.011,-0.089],[0.01,0.011],[-0.01,0.011],[0,0],[0,0],[0,0],[0,0],[-0.011,-0.01],[0.011,-0.011],[0.011,0.088],[0.011,-0.088],[0.011,0.088],[0.011,-0.088],[0.01,0.011],[-0.01,0.01],[0,0],[0,0],[0,0],[0,0],[-0.011,-0.011],[0.011,-0.011],[0.01,0.089],[0.011,-0.089],[0.011,0.089],[0.01,-0.089],[0.01,0.011],[-0.01,0.011],[0,0],[0,0],[0.01,0.01],[-0.01,0.01],[0,0],[0,0],[0.009,0.016],[-0.005,0]],"v":[[0.924,1.801],[-1.286,1.801],[-1.298,1.153],[-0.951,1.143],[-0.951,-0.085],[-1.106,-0.085],[-1.117,-0.693],[-0.852,-0.702],[-0.852,-1.014],[-1.016,-1.014],[-1.027,-1.364],[-0.889,-1.375],[-0.771,-1.286],[-0.576,-1.375],[-0.465,-1.286],[-0.32,-1.375],[-0.311,-1.025],[-0.451,-1.014],[-0.451,-0.687],[-0.26,-0.687],[-0.26,-1.442],[-0.389,-1.442],[-0.4,-1.791],[-0.262,-1.801],[-0.145,-1.714],[0.051,-1.801],[0.161,-1.714],[0.307,-1.801],[0.316,-1.452],[0.157,-1.442],[0.157,-0.689],[0.363,-0.689],[0.363,-1.012],[0.21,-1.012],[0.199,-1.362],[0.337,-1.373],[0.454,-1.284],[0.65,-1.373],[0.76,-1.284],[0.906,-1.373],[0.915,-1.023],[0.758,-1.012],[0.758,-0.696],[1.04,-0.696],[1.049,-0.092],[0.893,-0.082],[0.893,1.132],[1.288,1.132],[0.939,1.799]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.459,27.859],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 162","np":6,"cix":2,"bm":0,"ix":162,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0.089],[0,-0.089],[0,0.089],[0,-0.089],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0.088],[0,-0.088],[0,0.088],[0,-0.088],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0.089],[0,-0.089],[0,0.089],[0,-0.089],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[1.288,1.139],[0.882,1.139],[0.882,-0.097],[1.038,-0.097],[1.038,-0.689],[0.747,-0.689],[0.745,-1.026],[0.902,-1.026],[0.902,-1.366],[0.768,-1.366],[0.648,-1.277],[0.462,-1.366],[0.333,-1.277],[0.206,-1.366],[0.206,-1.026],[0.37,-1.026],[0.37,-0.68],[0.141,-0.68],[0.141,-1.454],[0.301,-1.454],[0.301,-1.793],[0.167,-1.793],[0.048,-1.705],[-0.137,-1.793],[-0.266,-1.705],[-0.393,-1.793],[-0.393,-1.454],[-0.251,-1.454],[-0.251,-0.678],[-0.462,-0.678],[-0.462,-1.026],[-0.322,-1.026],[-0.322,-1.366],[-0.456,-1.366],[-0.576,-1.277],[-0.762,-1.366],[-0.891,-1.277],[-1.018,-1.366],[-1.018,-1.026],[-0.842,-1.026],[-0.842,-0.693],[-1.107,-0.693],[-1.107,-0.096],[-0.941,-0.096],[-0.941,1.155],[-1.288,1.155],[-1.288,1.793],[-0.219,1.793],[0.135,1.793],[0.923,1.793]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.457,27.859],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 163","np":4,"cix":2,"bm":0,"ix":163,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.051,-0.06],[0,0]],"o":[[0,0],[0.051,0.06],[0,0],[0,0]],"v":[[-0.822,-1.04],[-0.73,-1.121],[-0.576,-0.943],[-0.665,-0.858]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.883,-1.971],[-0.624,-1.971],[-0.624,-1.847],[-0.883,-1.847]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0]],"o":[[0,0]],"v":[[-0.883,-1.847]],"c":false},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.05,-1.151],[-0.074,-1.151],[-0.074,-1.382],[0.05,-1.382]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[0,0]],"o":[[0,0]],"v":[[0.05,-1.383]],"c":false},"ix":2},"nm":"Path 5","mn":"ADBE Vector Shape - Group","hd":false},{"ind":5,"ty":"sh","ix":6,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[1.464,-1.197],[1.589,-1.197],[1.589,-0.973],[1.464,-0.973]],"c":true},"ix":2},"nm":"Path 6","mn":"ADBE Vector Shape - Group","hd":false},{"ind":6,"ty":"sh","ix":7,"ks":{"a":0,"k":{"i":[[0.072,-0.033],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[-0.07,0.035]],"v":[[0.643,1.83],[0.609,1.708],[0.835,1.601],[0.859,1.726]],"c":true},"ix":2},"nm":"Path 7","mn":"ADBE Vector Shape - Group","hd":false},{"ind":7,"ty":"sh","ix":8,"ks":{"a":0,"k":{"i":[[0.037,0],[0.007,0.025],[-0.029,0.027],[0.014,-0.041]],"o":[[-0.037,0],[-0.014,-0.041],[0.03,0.027],[-0.007,0.025]],"v":[[-0.012,-1.817],[-0.102,-1.847],[-0.012,-1.994],[0.078,-1.847]],"c":true},"ix":2},"nm":"Path 8","mn":"ADBE Vector Shape - Group","hd":false},{"ind":8,"ty":"sh","ix":9,"ks":{"a":0,"k":{"i":[[-0.003,0.021],[0.065,0.072],[0.083,-0.004],[0,0],[0,0],[-0.12,0],[-0.045,0.097],[0,0],[-0.066,-0.028],[0,0],[0,-0.121],[-0.09,-0.047],[0.02,-0.035],[0.042,-0.018],[0,0]],"o":[[0.013,-0.085],[-0.065,-0.073],[-0.072,0.005],[0.003,-0.016],[0.044,0.097],[0.122,0],[0,0],[0.026,0.064],[0,0],[-0.097,0.046],[0,0.115],[-0.021,0.08],[-0.046,-0.007],[0,0],[0.007,-0.019]],"v":[[0.958,0.596],[0.893,0.352],[0.66,0.262],[0.253,-0.111],[0.486,-0.127],[0.747,0.037],[1.009,-0.127],[1.281,-0.127],[1.424,0.016],[1.424,0.235],[1.259,0.498],[1.411,0.749],[1.335,0.936],[1.206,0.954],[0.947,0.659]],"c":true},"ix":2},"nm":"Path 9","mn":"ADBE Vector Shape - Group","hd":false},{"ind":9,"ty":"sh","ix":10,"ks":{"a":0,"k":{"i":[[0.004,0.017],[0.086,0.041],[0.076,-0.036],[0.032,0.034],[0.032,0.081],[0,0],[-0.062,0.067],[0.011,0.083],[0,0],[0,0],[0,-0.128],[-0.097,-0.044],[0,0],[0.03,-0.046],[0,0]],"o":[[-0.021,-0.085],[-0.087,-0.042],[-0.106,-0.015],[0.037,-0.118],[0,0],[0.152,0.015],[0.066,-0.07],[-0.01,-0.058],[0,0],[-0.108,0.04],[0,0.122],[0,0],[-0.049,0.021],[0,0],[0,-0.016]],"v":[[-0.479,1.661],[-0.632,1.459],[-0.883,1.465],[-1.066,1.378],[-1.055,1.099],[-0.799,0.808],[-0.507,0.719],[-0.439,0.479],[-0.102,0.036],[-0.102,0.663],[-0.281,0.936],[-0.117,1.198],[-0.117,1.668],[-0.238,1.77],[-0.467,1.71]],"c":true},"ix":2},"nm":"Path 10","mn":"ADBE Vector Shape - Group","hd":false},{"ind":10,"ty":"sh","ix":11,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.816,1.599],[-0.585,1.708],[-0.618,1.83],[-0.87,1.71]],"c":true},"ix":2},"nm":"Path 11","mn":"ADBE Vector Shape - Group","hd":false},{"ind":11,"ty":"sh","ix":12,"ks":{"a":0,"k":{"i":[[0,0],[0,-0.12],[-0.097,-0.044],[0,0],[0.028,-0.065],[0,0],[0.122,0],[0.046,-0.099],[0,0],[0,0],[-0.062,0.071],[0.012,0.082],[0,0]],"o":[[-0.097,0.044],[0,0.122],[0,0],[-0.064,0.027],[0,0],[-0.045,-0.097],[-0.122,0],[0,0],[-0.003,-0.016],[0.157,0.016],[0.063,-0.072],[-0.013,-0.063],[0.011,0.003]],"v":[[1.424,-1.34],[1.259,-1.079],[1.424,-0.816],[1.424,-0.475],[1.281,-0.332],[1.009,-0.332],[0.747,-0.496],[0.484,-0.332],[0.255,-0.332],[0.594,-0.731],[0.895,-0.825],[0.956,-1.065],[1.413,-1.665]],"c":true},"ix":2},"nm":"Path 12","mn":"ADBE Vector Shape - Group","hd":false},{"ind":12,"ty":"sh","ix":13,"ks":{"a":0,"k":{"i":[[0.042,0.049],[0,0],[0,0],[0,0]],"o":[[-0.03,-0.032],[0,0],[0,0],[-0.044,-0.046]],"v":[[0.585,0.502],[0.648,0.387],[0.809,0.564],[0.715,0.645]],"c":true},"ix":2},"nm":"Path 13","mn":"ADBE Vector Shape - Group","hd":false},{"ind":13,"ty":"sh","ix":14,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.025,0.028],[0,0],[0,0]],"o":[[0,0],[0.025,-0.028],[0,0],[0,0],[0,0]],"v":[[0.675,-0.885],[0.583,-0.968],[0.66,-1.054],[0.738,-1.146],[0.833,-1.065]],"c":true},"ix":2},"nm":"Path 14","mn":"ADBE Vector Shape - Group","hd":false},{"ind":14,"ty":"sh","ix":15,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.634,-0.291],[0.885,-0.291],[0.885,-0.167],[0.634,-0.167]],"c":true},"ix":2},"nm":"Path 15","mn":"ADBE Vector Shape - Group","hd":false},{"ind":15,"ty":"sh","ix":16,"ks":{"a":0,"k":{"i":[[0,0]],"o":[[0,0]],"v":[[0.634,-0.167]],"c":false},"ix":2},"nm":"Path 16","mn":"ADBE Vector Shape - Group","hd":false},{"ind":16,"ty":"sh","ix":17,"ks":{"a":0,"k":{"i":[[-0.019,0.022],[-0.033,0.035],[0,0],[0,0],[0,0]],"o":[[0.034,-0.035],[0,0],[0,0],[0,0],[0.019,-0.023]],"v":[[-0.749,0.498],[-0.65,0.391],[-0.557,0.474],[-0.713,0.645],[-0.807,0.564]],"c":true},"ix":2},"nm":"Path 17","mn":"ADBE Vector Shape - Group","hd":false},{"ind":17,"ty":"sh","ix":18,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.074,0.846],[0.05,0.846],[0.05,1.063],[-0.074,1.063]],"c":true},"ix":2},"nm":"Path 18","mn":"ADBE Vector Shape - Group","hd":false},{"ind":18,"ty":"sh","ix":19,"ks":{"a":0,"k":{"i":[[-0.122,0],[-0.045,0.097],[0,0],[0,0],[0.08,-0.092],[-0.012,-0.083],[0,0],[0,0],[0,0.129],[0.108,0.04],[0,0],[-0.03,0.069],[0,0]],"o":[[0.12,0],[0,0],[0,0],[-0.103,-0.03],[-0.063,0.073],[0.013,0.062],[-0.021,-0.005],[0.108,-0.04],[0,-0.127],[0,0],[0.071,-0.025],[0,0],[0.046,0.099]],"v":[[0.747,-1.641],[1.009,-1.805],[1.262,-1.805],[0.788,-1.268],[0.492,-1.178],[0.43,-0.936],[0.098,-0.487],[0.076,-0.991],[0.255,-1.264],[0.076,-1.536],[0.076,-1.658],[0.234,-1.807],[0.484,-1.807]],"c":true},"ix":2},"nm":"Path 19","mn":"ADBE Vector Shape - Group","hd":false},{"ind":19,"ty":"sh","ix":20,"ks":{"a":0,"k":{"i":[[0.025,0.004],[0.016,0.158],[0,0.117],[0.097,0.044],[0,0],[-0.028,0.065],[0,0],[-0.12,0],[-0.045,0.097],[0,0],[0,0],[0.064,-0.071],[-0.012,-0.083],[0,0]],"o":[[-0.067,-0.008],[0.092,-0.046],[0,-0.122],[0,0],[0.064,-0.027],[0,0],[0.044,0.097],[0.122,0],[0,0],[0.016,0.035],[-0.155,-0.009],[-0.065,0.07],[0.012,0.071],[-0.03,-0.01]],"v":[[-1.284,0.936],[-1.415,0.755],[-1.258,0.5],[-1.422,0.239],[-1.422,0.018],[-1.279,-0.125],[-1.003,-0.125],[-0.742,0.039],[-0.479,-0.125],[-0.279,-0.125],[-0.596,0.278],[-0.898,0.361],[-0.965,0.601],[-1.201,0.954]],"c":true},"ix":2},"nm":"Path 20","mn":"ADBE Vector Shape - Group","hd":false},{"ind":20,"ty":"sh","ix":21,"ks":{"a":0,"k":{"i":[[0.009,0.026],[-0.03,0.027],[0.014,-0.041],[0.035,0]],"o":[[-0.014,-0.041],[0.028,0.027],[-0.009,0.025],[-0.037,0]],"v":[[-1.616,-0.169],[-1.525,-0.316],[-1.436,-0.169],[-1.525,-0.139]],"c":true},"ix":2},"nm":"Path 21","mn":"ADBE Vector Shape - Group","hd":false},{"ind":21,"ty":"sh","ix":22,"ks":{"a":0,"k":{"i":[[-0.024,0.007],[-0.025,-0.026],[0.039,0.014],[0,0.036]],"o":[[0.053,-0.002],[-0.028,0.03],[-0.024,-0.009],[0,-0.037]],"v":[[-1.361,1.113],[-1.215,1.203],[-1.361,1.293],[-1.391,1.203]],"c":true},"ix":2},"nm":"Path 22","mn":"ADBE Vector Shape - Group","hd":false},{"ind":22,"ty":"sh","ix":23,"ks":{"a":0,"k":{"i":[[-0.03,0.029],[0.014,-0.041],[0.035,0],[0.007,0.025]],"o":[[0.03,0.029],[-0.009,0.025],[-0.037,0],[-0.014,-0.039]],"v":[[-0.012,1.828],[0.078,1.975],[-0.012,2.005],[-0.102,1.975]],"c":true},"ix":2},"nm":"Path 23","mn":"ADBE Vector Shape - Group","hd":false},{"ind":23,"ty":"sh","ix":24,"ks":{"a":0,"k":{"i":[[-0.03,0.026],[0.014,-0.04],[0.037,0],[0.007,0.025]],"o":[[0.03,0.028],[-0.009,0.025],[-0.037,0],[-0.014,-0.04]],"v":[[1.303,1.117],[1.393,1.263],[1.303,1.293],[1.212,1.263]],"c":true},"ix":2},"nm":"Path 24","mn":"ADBE Vector Shape - Group","hd":false},{"ind":24,"ty":"sh","ix":25,"ks":{"a":0,"k":{"i":[[-0.028,0.027],[0.014,-0.041],[0.037,0],[0.007,0.025]],"o":[[0.03,0.027],[-0.009,0.025],[-0.037,0],[-0.014,-0.041]],"v":[[1.527,-0.316],[1.617,-0.169],[1.527,-0.139],[1.436,-0.169]],"c":true},"ix":2},"nm":"Path 25","mn":"ADBE Vector Shape - Group","hd":false},{"ind":25,"ty":"sh","ix":26,"ks":{"a":0,"k":{"i":[[0.014,-0.041],[0.037,0],[0.009,0.025],[-0.03,0.027]],"o":[[-0.009,0.025],[-0.037,0],[-0.014,-0.041],[0.03,0.027]],"v":[[1.617,-1.847],[1.527,-1.817],[1.436,-1.847],[1.527,-1.994]],"c":true},"ix":2},"nm":"Path 26","mn":"ADBE Vector Shape - Group","hd":false},{"ind":26,"ty":"sh","ix":27,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.885,-1.845],[0.634,-1.845],[0.634,-1.969],[0.885,-1.969]],"c":true},"ix":2},"nm":"Path 27","mn":"ADBE Vector Shape - Group","hd":false},{"ind":27,"ty":"sh","ix":28,"ks":{"a":0,"k":{"i":[[0,0]],"o":[[0,0]],"v":[[0.885,-1.969]],"c":false},"ix":2},"nm":"Path 28","mn":"ADBE Vector Shape - Group","hd":false},{"ind":28,"ty":"sh","ix":29,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.624,-0.167],[-0.883,-0.167],[-0.883,-0.291],[-0.624,-0.291]],"c":true},"ix":2},"nm":"Path 29","mn":"ADBE Vector Shape - Group","hd":false},{"ind":29,"ty":"sh","ix":30,"ks":{"a":0,"k":{"i":[[0,0]],"o":[[0,0]],"v":[[-0.624,-0.291]],"c":false},"ix":2},"nm":"Path 30","mn":"ADBE Vector Shape - Group","hd":false},{"ind":30,"ty":"sh","ix":31,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-1.588,0.369],[-1.464,0.369],[-1.464,0.602],[-1.588,0.602]],"c":true},"ix":2},"nm":"Path 31","mn":"ADBE Vector Shape - Group","hd":false},{"ind":31,"ty":"sh","ix":32,"ks":{"a":0,"k":{"i":[[0.005,0.004],[0,0],[0,0.122],[0.108,0.039],[0,0],[0,0],[-0.066,-0.071],[-0.079,0],[0,0],[-0.055,-0.083],[0.059,-0.048],[0.109,-0.053],[0.019,-0.082],[0,0]],"o":[[-0.062,-0.057],[0.097,-0.044],[0,-0.128],[0,0],[0.021,-0.005],[-0.023,0.14],[0.061,0.067],[0.076,-0.016],[-0.037,0.087],[-0.023,0.03],[-0.083,-0.066],[-0.087,0.04],[-0.013,0.058],[-0.062,-0.062]],"v":[[0.152,1.726],[0.09,1.198],[0.255,0.936],[0.076,0.664],[0.076,0.034],[0.438,0.415],[0.495,0.712],[0.715,0.816],[1.057,1.102],[1.085,1.359],[0.958,1.495],[0.654,1.463],[0.503,1.661],[0.223,1.795]],"c":true},"ix":2},"nm":"Path 32","mn":"ADBE Vector Shape - Group","hd":false},{"ind":32,"ty":"sh","ix":33,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[1.589,0.596],[1.464,0.61],[1.464,0.369],[1.589,0.369]],"c":true},"ix":2},"nm":"Path 33","mn":"ADBE Vector Shape - Group","hd":false},{"ind":33,"ty":"sh","ix":34,"ks":{"a":0,"k":{"i":[[0,0.122],[0.097,0.044],[0,0],[0,0.108],[0.1,0.019],[0.046,-0.112],[0,0],[0.121,0],[0.044,-0.098],[0,0],[0.111,0],[0.041,-0.099],[0,0],[0.122,0],[0.045,-0.098],[0,0],[0,0],[0,0],[-0.122,0],[-0.044,0.097],[0,0],[-0.073,-0.027],[0,0],[0,-0.127],[-0.108,-0.04],[0,0],[0,0],[0.064,0.072],[0.083,-0.002],[0,0],[0,0],[0,0],[-0.064,-0.072],[-0.08,0],[0,0],[0,0],[0.121,0],[0.044,-0.099],[0,0],[0.066,0.028],[0,0],[0,0.12],[0.113,0.037],[0,0],[0,0],[0,0],[0,-0.13],[-0.097,-0.045],[0,0],[0,-0.109],[-0.099,-0.041],[0,0],[0,-0.122],[-0.113,-0.037],[-0.035,-0.06],[-0.057,-0.095],[-0.106,0.015],[-0.106,-0.073],[-0.088,-0.041],[-0.046,0],[-0.05,0.043],[0,0],[-0.122,-0.007],[-0.043,0.123],[0,0],[-0.065,0],[-0.046,0.023],[-0.02,0.081],[-0.044,0.062],[-0.057,0.097],[0.065,0.085],[-0.023,0.108],[0,0.125],[0.097,0.046],[0,0],[0,0.109],[0.102,0.043],[0,0]],"o":[[0,-0.12],[0,0],[0.098,-0.04],[0,-0.161],[-0.149,-0.005],[0,0],[-0.044,-0.099],[-0.121,0],[0,0],[-0.04,-0.099],[-0.111,0],[0,0],[-0.044,-0.099],[-0.122,0],[0,0],[-0.014,0.014],[0.014,0.014],[0.044,0.097],[0.122,0],[0,0],[0.028,0.069],[0,0],[-0.108,0.039],[0,0.129],[0,0],[0,0],[0.027,-0.141],[-0.064,-0.073],[-0.068,0.004],[-0.02,-0.002],[-0.002,0.019],[-0.027,0.144],[0.062,0.071],[0.079,-0.016],[-0.016,0.036],[-0.046,-0.097],[-0.121,0],[0,0],[-0.027,-0.064],[0,0],[0.098,-0.046],[0,-0.132],[-0.02,0.014],[0,0],[0,0],[-0.132,0.023],[0,0.122],[0,0],[-0.099,0.04],[0,0.111],[0,0],[-0.097,0.044],[0,0.131],[0.023,0.111],[-0.064,0.086],[0.058,0.096],[0.042,0.058],[0.035,0.155],[0.046,0.021],[0.067,0],[0,0],[0.027,0.117],[0.113,0],[0,0],[0.047,0.043],[0.046,0],[0.087,-0.041],[0.106,-0.131],[0.106,0.017],[0.056,-0.095],[0.035,-0.063],[0.106,-0.041],[0,-0.122],[0,0],[0.1,-0.042],[0,-0.11],[0,0],[0.098,-0.045]],"v":[[1.794,-1.079],[1.63,-1.34],[1.63,-1.662],[1.794,-1.907],[1.576,-2.165],[1.279,-2.011],[1.007,-2.011],[0.745,-2.176],[0.482,-2.011],[0.231,-2.011],[-0.014,-2.172],[-0.26,-2.011],[-0.482,-2.011],[-0.745,-2.176],[-1.008,-2.011],[-1.348,-2.011],[-1.363,-1.819],[-1.007,-1.805],[-0.745,-1.641],[-0.484,-1.805],[-0.26,-1.805],[-0.104,-1.656],[-0.104,-1.535],[-0.283,-1.263],[-0.104,-0.989],[-0.104,-0.496],[-0.456,-0.874],[-0.505,-1.174],[-0.736,-1.268],[-1.047,-1.54],[-1.201,-1.423],[-0.954,-1.127],[-0.906,-0.825],[-0.682,-0.717],[-0.266,-0.371],[-0.482,-0.335],[-0.743,-0.5],[-1.005,-0.335],[-1.279,-0.335],[-1.424,-0.478],[-1.424,-0.819],[-1.26,-1.081],[-1.445,-1.36],[-1.465,-0.975],[-1.59,-0.975],[-1.59,-1.346],[-1.794,-1.081],[-1.63,-0.817],[-1.63,-0.478],[-1.79,-0.233],[-1.63,0.013],[-1.63,0.232],[-1.794,0.495],[-1.609,0.774],[-1.516,1.041],[-1.529,1.337],[-1.26,1.465],[-1.031,1.668],[-0.863,1.94],[-0.723,1.973],[-0.547,1.904],[-0.273,1.975],[-0.029,2.176],[0.24,2],[0.572,1.904],[0.745,1.972],[0.885,1.938],[1.037,1.74],[1.259,1.463],[1.529,1.334],[1.512,1.037],[1.617,0.767],[1.794,0.497],[1.63,0.233],[1.63,0.014],[1.794,-0.231],[1.63,-0.477],[1.63,-0.817]],"c":true},"ix":2},"nm":"Path 34","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.835294177485,0.729411764706,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.706,32.656],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 164","np":38,"cix":2,"bm":0,"ix":164,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,-0.071]],"o":[[0.039,-0.019],[-0.088,-0.037]],"v":[[-0.037,-0.018],[0.044,0.037]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.503,26.408],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 165","np":4,"cix":2,"bm":0,"ix":165,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.014,0],[-0.024,-0.017],[0,0]],"o":[[-0.12,-0.106],[0.016,-0.036],[0.045,0.032],[-0.005,0.018]],"v":[[0.083,0.08],[-0.092,-0.045],[0.026,-0.006],[0.092,0.063]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.882,26.429],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 166","np":4,"cix":2,"bm":0,"ix":166,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.019,0],[-0.03,-0.028],[-0.024,-0.044],[-0.06,0.04],[-0.076,-0.03],[-0.029,-0.032],[0.003,0.075],[-0.044,0.019],[-0.011,-0.029],[0.001,0.044],[-0.027,-0.01],[0.032,0.039],[0,0.071],[-0.029,-0.021],[-0.014,0.041],[0.014,0.048],[0.003,0],[0.028,-0.005],[0.083,0.002],[0.014,-0.014],[-0.046,-0.015],[0.019,-0.128],[0.108,0],[0.007,-0.008],[-0.005,-0.033],[0.053,0],[0.05,-0.036],[0.013,-0.032],[-0.013,-0.069],[-0.049,0.016]],"o":[[0.062,0],[0.043,0.039],[0.006,-0.048],[0.048,-0.032],[0.037,0.014],[0.001,-0.022],[-0.004,-0.049],[0.074,0.042],[0.005,-0.02],[0.047,-0.07],[-0.004,-0.033],[-0.051,-0.066],[0.039,-0.044],[-0.055,-0.124],[0.012,-0.037],[-0.067,-0.234],[-0.048,-0.016],[-0.12,0.115],[-0.084,0],[-0.008,0.112],[0.044,0.012],[-0.018,0.114],[-0.032,0],[0.138,0.069],[-0.047,0.071],[-0.136,0],[-0.04,0.028],[0.306,0.121],[0.022,0.074],[0.021,-0.005]],"v":[[-0.203,0.499],[-0.07,0.559],[0.042,0.718],[0.126,0.547],[0.312,0.543],[0.441,0.653],[0.441,0.518],[0.479,0.333],[0.585,0.45],[0.594,0.354],[0.714,0.308],[0.669,0.162],[0.568,-0.045],[0.676,-0.045],[0.652,-0.252],[0.663,-0.374],[0.215,-0.734],[0.128,-0.741],[-0.124,-0.628],[-0.253,-0.607],[-0.135,-0.449],[0.027,-0.269],[-0.171,-0.147],[-0.27,-0.139],[-0.072,-0.017],[-0.344,0.077],[-0.63,0.132],[-0.706,0.238],[-0.389,0.464],[-0.266,0.508]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0.057,0.054],[0.083,-0.027],[0,0],[0.014,0.067],[-0.004,0.041],[0,0],[-0.076,0.053],[-0.099,0],[-0.03,0.035],[0.04,0.013],[0.005,0.021],[-0.081,0],[-0.014,0.093],[0.109,0.032],[0.004,0.058],[-0.058,0],[-0.009,0.011],[-0.052,-0.016],[-0.07,-0.246],[0.012,-0.039],[-0.019,-0.044],[0,-0.003],[0.017,0],[-0.035,-0.046],[0,-0.003],[0.023,-0.014],[0,0],[0.042,0.04],[-0.007,-0.109],[0.002,-0.003],[0.037,0.014],[0.041,-0.027],[0,0]],"o":[[-0.01,-0.007],[-0.037,-0.036],[-0.086,0.028],[-0.006,-0.021],[-0.014,-0.071],[-0.276,-0.072],[-0.019,-0.012],[0.069,-0.049],[0.065,0],[0,-0.028],[-0.055,-0.017],[0.014,-0.05],[0.111,0],[0.01,-0.074],[-0.09,-0.026],[0.037,-0.083],[0.115,0],[0.146,-0.107],[0.003,0.001],[0.016,0.055],[-0.014,0.041],[0.041,0.09],[-0.051,-0.019],[-0.009,0.085],[0.044,0.058],[-0.034,0.002],[-0.005,0.128],[-0.02,-0.004],[-0.034,-0.002],[0.008,0.129],[-0.044,-0.024],[-0.067,-0.027],[-0.077,0.053],[-0.009,0.007]],"v":[[0.051,0.769],[-0.083,0.577],[-0.258,0.533],[-0.434,0.58],[-0.41,0.473],[-0.419,0.324],[-0.717,0.285],[-0.643,0.121],[-0.344,0.061],[-0.098,-0.001],[-0.199,-0.063],[-0.292,-0.112],[-0.171,-0.165],[0.003,-0.269],[-0.141,-0.425],[-0.288,-0.555],[-0.16,-0.647],[0.01,-0.66],[0.223,-0.753],[0.684,-0.377],[0.673,-0.241],[0.665,-0.123],[0.71,-0.01],[0.6,-0.056],[0.687,0.153],[0.736,0.329],[0.626,0.322],[0.594,0.492],[0.508,0.365],[0.465,0.52],[0.458,0.684],[0.305,0.568],[0.141,0.57],[0.062,0.762]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.73,26.977],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 167","np":6,"cix":2,"bm":0,"ix":167,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.018,0.019],[-0.053,0.011],[-0.064,-0.021],[-0.063,-0.219],[-0.043,-0.092],[0,0],[0,-0.071],[-0.043,-0.057],[0,0],[-0.005,-0.092],[0,0],[0.046,0.044],[-0.007,-0.131],[0,0],[0.047,0.018],[0,0],[0.058,0.055],[0.087,-0.028],[0,0],[0.016,0.078],[-0.003,0.048],[0.074,-0.002],[0.06,-0.014],[0,0],[-0.072,0.053],[-0.07,0],[0.007,0.047],[0.007,0.034],[-0.113,0],[-0.016,0.102],[0.08,0.023],[0.004,0.058],[-0.092,0]],"o":[[0.046,-0.055],[0.054,-0.011],[0.063,0.021],[0.03,0.105],[0.042,0.092],[0,0],[0,0.07],[0.044,0.056],[0,0],[0.006,0.092],[0,0],[-0.046,-0.044],[0.009,0.131],[0,0],[-0.258,-0.101],[0,0],[-0.041,-0.039],[-0.086,0.029],[0,0],[-0.015,-0.078],[0.004,-0.047],[-0.072,0.001],[-0.06,0.015],[0,0],[0.072,-0.053],[0.069,0],[-0.008,-0.05],[-0.007,-0.033],[0.114,0],[0.016,-0.103],[-0.078,-0.023],[-0.003,-0.058],[0.093,-0.002]],"v":[[0.02,-0.651],[0.098,-0.741],[0.22,-0.741],[0.675,-0.374],[0.656,-0.119],[0.7,-0.01],[0.582,-0.043],[0.679,0.158],[0.727,0.329],[0.606,0.356],[0.585,0.485],[0.516,0.356],[0.453,0.52],[0.449,0.679],[0.31,0.557],[0.052,0.762],[-0.075,0.573],[-0.261,0.525],[-0.437,0.573],[-0.399,0.474],[-0.406,0.313],[-0.487,0.266],[-0.644,0.23],[-0.727,0.282],[-0.637,0.131],[-0.346,0.075],[-0.082,-0.006],[-0.28,-0.111],[-0.173,-0.151],[0.015,-0.264],[-0.139,-0.432],[-0.277,-0.552],[-0.16,-0.633]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.419607873056,0.749019607843,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.727,26.973],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 168","np":4,"cix":2,"bm":0,"ix":168,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.012,0],[-0.003,0.001],[-0.042,0.023],[-0.004,-0.026],[-0.037,0.034],[-0.055,0.023],[-0.132,0.09],[0.004,0.076],[0.032,0.023],[0.06,-0.02],[0.073,-0.069],[0.06,-0.048],[0.051,0.044],[0.011,-0.026],[0.026,-0.001]],"o":[[0.131,-0.154],[0.004,0],[0.055,0.011],[0.021,-0.014],[0.122,-0.025],[0.063,-0.027],[0.149,-0.099],[-0.002,-0.028],[-0.051,-0.038],[-0.176,0.053],[-0.079,0.072],[-0.067,0.051],[-0.099,-0.09],[0.069,0.154],[0.069,0.228]],"v":[[-0.593,0.414],[-0.376,0.252],[-0.272,0.241],[-0.204,0.322],[-0.109,0.248],[0.113,0.121],[0.378,-0.031],[0.682,-0.34],[0.631,-0.421],[0.447,-0.451],[-0.014,-0.259],[-0.324,-0.001],[-0.563,0.054],[-0.695,0.034],[-0.684,0.191]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[-0.028,0.014],[-0.067,0.051],[-0.079,0.073],[-0.189,0.057],[-0.056,-0.041],[-0.002,-0.038],[0.097,-0.063],[0.064,-0.027],[0,0],[0.004,-0.002],[0.014,0.007],[0.012,0.002],[0.018,-0.038]],"o":[[-0.207,-0.488],[0.141,0.135],[0.062,-0.046],[0.076,-0.07],[0.067,-0.021],[0.038,0.026],[0.004,0.104],[-0.134,0.09],[-0.061,0.026],[-0.157,0.03],[-0.019,-0.039],[-0.055,0.027],[-0.011,0.002],[-0.032,0.165]],"v":[[-0.501,0.492],[-0.656,-0.065],[-0.339,-0.019],[-0.031,-0.275],[0.439,-0.471],[0.643,-0.437],[0.704,-0.338],[0.391,-0.01],[0.122,0.144],[0.006,0.289],[-0.208,0.354],[-0.251,0.262],[-0.374,0.278],[-0.466,0.327]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.151,27.718],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 169","np":6,"cix":2,"bm":0,"ix":169,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.113,-0.034],[0.077,-0.07],[0.065,-0.049],[0.045,0.037],[0.026,-0.012],[0,0],[-0.056,-0.03],[0.012,-0.039],[0.028,-0.005],[-0.014,-0.064],[-0.03,-0.016],[-0.047,-0.009],[-0.023,-0.007],[-0.048,-0.032],[-0.019,0.055],[-0.023,0.05],[0,0],[-0.044,0.026],[0,0],[-0.054,0.049],[0,0],[-0.065,0.029],[-0.131,0.088],[0.004,0.086]],"o":[[-0.168,0.051],[-0.078,0.071],[-0.066,0.05],[-0.046,-0.039],[-0.029,0.012],[0,0],[0.058,0.032],[-0.013,0.039],[-0.03,0.006],[0.014,0.063],[0.03,0.016],[-0.026,0.09],[0.023,0.007],[0.047,0.032],[0.021,-0.057],[0.023,-0.049],[0,0],[0.046,-0.027],[0,0],[0.057,-0.051],[0,0],[0.068,-0.028],[0.131,-0.088],[-0.003,-0.087]],"v":[[0.493,-0.468],[0.027,-0.274],[-0.283,-0.018],[-0.508,0.039],[-0.6,-0.06],[-0.658,0.025],[-0.688,0.095],[-0.577,0.141],[-0.658,0.178],[-0.68,0.251],[-0.689,0.353],[-0.576,0.304],[-0.589,0.433],[-0.51,0.433],[-0.432,0.447],[-0.43,0.314],[-0.327,0.258],[-0.219,0.246],[-0.167,0.336],[-0.055,0.251],[0.042,0.276],[0.163,0.125],[0.43,-0.028],[0.74,-0.346]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.419607873056,0.749019607843,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.1,27.724],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 170","np":4,"cix":2,"bm":0,"ix":170,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.014,0],[-0.026,0.022],[-0.018,-0.007],[0.016,0.016],[-0.129,0.309],[0.01,0.023],[0.007,0.12],[-0.246,0.053],[0.067,0.325],[0.01,0.083],[-0.048,0.065],[-0.071,0.051],[0.025,0.046],[-0.058,0.068],[-0.005,0.048],[0.023,-0.055],[0.024,0],[0.026,0.06],[-0.002,-0.111],[0.048,-0.108],[-0.092,-0.281],[0.065,-0.069],[0.097,0.026],[0.037,0.153],[0,0.056],[0,0],[0.11,0.007],[0.106,0.06],[-0.085,0.182],[-0.018,-0.115],[0.008,-0.016],[-0.033,-0.048],[-0.021,-0.032],[0.047,-0.023],[-0.009,-0.035],[-0.166,-0.152],[-0.05,-0.109],[-0.124,-0.052],[-0.049,-0.136],[0.033,-0.063],[0.013,-0.023],[-0.221,-0.284],[-0.012,0.006],[-0.026,-0.001],[-0.014,-0.022],[0.024,-0.031],[0.051,0.019],[0.009,-0.005]],"o":[[0.074,0.15],[0.011,0.056],[0.191,-0.065],[-0.042,-0.044],[0.09,-0.116],[-0.164,-0.051],[-0.005,-0.113],[0.265,-0.057],[-0.019,-0.097],[-0.018,-0.154],[0.041,-0.053],[-0.053,0],[-0.021,-0.039],[0.044,-0.053],[-0.04,0.036],[-0.018,0.042],[-0.053,-0.002],[-0.002,0.06],[0.005,0.199],[-0.066,0.145],[0.13,0.396],[-0.064,0.068],[-0.136,-0.037],[-0.053,-0.226],[0,0],[-0.069,-0.011],[-0.208,-0.011],[-0.203,-0.117],[-0.148,-0.129],[-0.212,-0.002],[0.037,0.001],[0.094,0.206],[0.07,0.12],[0.067,0.032],[0.158,0.097],[0.012,0.007],[0.044,0.097],[0.196,0.079],[0.021,0.057],[-0.016,0.03],[-0.076,0.13],[-0.007,-0.118],[0.066,0.087],[0.095,-0.026],[0.016,0.024],[-0.025,0.032],[-0.062,-0.022],[0.07,0.143]],"v":[[0.533,1.512],[0.642,1.599],[0.669,1.732],[0.824,1.633],[0.904,1.253],[0.957,1.026],[0.69,0.762],[1.01,0.448],[1.137,-0.272],[1.088,-0.542],[1.229,-1.078],[1.508,-1.306],[1.354,-1.359],[1.411,-1.522],[1.474,-1.725],[1.319,-1.556],[1.254,-1.492],[1.13,-1.643],[1.13,-1.374],[1.033,-0.944],[1.005,-0.393],[0.98,0.246],[0.724,0.311],[0.445,0.003],[0.39,-0.622],[0.047,-0.729],[-0.235,-0.751],[-0.784,-0.835],[-1.109,-1.335],[-1.25,-1.332],[-1.513,-1.272],[-1.396,-1.22],[-1.264,-0.953],[-1.28,-0.793],[-1.141,-0.712],[-0.734,-0.41],[-0.351,-0.105],[-0.123,0.177],[0.32,0.482],[0.302,0.664],[0.257,0.745],[0.376,1.203],[0.385,1.077],[0.517,1.237],[0.664,1.251],[0.65,1.342],[0.526,1.387],[0.429,1.375]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.016,0],[-0.002,0.039],[-0.054,-0.021],[-0.019,0.027],[0.066,-0.02],[0.037,0.065],[-0.005,-0.028],[-0.08,0.138],[-0.016,0.03],[0.019,0.052],[0.192,0.08],[0.046,0.101],[0.004,0.002],[0.218,0.03],[0.058,0.006],[-0.028,0.012],[-0.002,0.014],[0.018,0.026],[0.023,0.001],[-0.113,0.122],[-0.012,-0.028],[-0.018,0.01],[-0.195,-0.113],[-0.204,-0.01],[-0.071,-0.012],[0,0],[-0.056,-0.244],[-0.099,-0.029],[-0.058,0.063],[0.127,0.385],[-0.065,0.143],[0.006,0.196],[0,0],[-0.043,-0.001],[-0.005,0.003],[0.062,-0.076],[-0.014,-0.03],[-0.037,0.003],[0.048,-0.064],[-0.017,-0.145],[-0.021,-0.095],[0.286,-0.062],[-0.005,-0.102],[-0.119,-0.013],[0.095,-0.122],[-0.032,-0.032],[-0.012,-0.055]],"o":[[-0.042,-0.014],[-0.187,-0.315],[0.041,0.013],[-0.001,-0.088],[-0.04,0],[-0.005,0.021],[-0.297,-0.34],[0.014,-0.023],[0.032,-0.06],[-0.048,-0.127],[-0.133,-0.055],[-0.047,-0.104],[-0.171,-0.155],[0.046,-0.109],[0.014,-0.035],[0.032,-0.015],[-0.033,-0.027],[-0.16,-0.306],[-0.038,-0.03],[0.052,-0.003],[0.034,-0.1],[0.097,0.328],[0.1,0.058],[0.11,0.006],[0,0],[0.007,0.014],[0.041,0.174],[0.09,0.024],[0.062,-0.066],[-0.094,-0.289],[0.049,-0.109],[-0.005,-0.179],[0.046,0.069],[0.077,-0.125],[0.018,0.016],[-0.051,0.062],[0.025,0.046],[0.005,0.023],[-0.044,0.062],[0.011,0.081],[0.067,0.32],[-0.231,0.049],[0.005,0.11],[0.065,0.077],[-0.129,0.307],[0.016,0.016],[-0.184,0.035]],"v":[[0.676,1.757],[0.632,1.658],[0.538,1.366],[0.635,1.328],[0.524,1.258],[0.413,1.138],[0.427,1.259],[0.24,0.732],[0.284,0.655],[0.302,0.49],[-0.13,0.197],[-0.371,-0.096],[-0.747,-0.392],[-1.217,-0.626],[-1.363,-0.75],[-1.291,-0.811],[-1.215,-0.859],[-1.284,-0.94],[-1.505,-1.25],[-1.413,-1.422],[-1.323,-1.348],[-1.264,-1.487],[-0.773,-0.854],[-0.235,-0.773],[0.051,-0.75],[0.402,-0.643],[0.464,-0.003],[0.726,0.29],[0.96,0.23],[0.98,-0.387],[1.01,-0.953],[1.103,-1.371],[1.105,-1.701],[1.247,-1.513],[1.474,-1.757],[1.423,-1.507],[1.368,-1.368],[1.538,-1.328],[1.239,-1.062],[1.103,-0.542],[1.153,-0.273],[1.01,0.473],[0.708,0.763],[0.92,0.97],[0.92,1.266],[0.837,1.618],[0.888,1.712]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.771,27.949],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 171","np":6,"cix":2,"bm":0,"ix":171,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.159,0.092],[-0.088,0.189],[0.038,0.005],[0.041,0.031],[-0.03,-0.205],[0.023,-0.024],[-0.08,-0.112],[0.069,-0.002],[-0.004,-0.032],[0.002,-0.046],[-0.035,0],[-0.038,-0.009],[-0.046,-0.03],[0.056,-0.044],[0.144,-0.09],[-0.173,-0.157],[-0.048,-0.108],[-0.124,-0.051],[0.124,-0.24],[-0.264,-0.341],[-0.079,0],[0.115,0.041],[0.007,-0.028],[0.011,-0.043],[0,-0.026],[0.026,-0.03],[-0.028,-0.023],[-0.02,-0.023],[-0.053,0.042],[-0.036,-0.016],[-0.051,-0.015],[0.014,0.056],[-0.193,0.456],[0.045,0.004],[-0.43,0.092],[0.043,0.362],[-0.05,0.068],[0,0],[-0.193,0.231],[0,0],[0.03,-0.072],[0,0],[-0.005,-0.18],[-0.164,-0.5],[0.108,0.459],[0,0],[0,0]],"o":[[-0.168,-0.097],[0.023,-0.049],[-0.038,-0.006],[-0.065,-0.052],[-0.087,-0.047],[-0.23,0.248],[0.037,0.051],[-0.068,0.002],[0.003,0.032],[-0.001,0.046],[0.036,0],[0.041,0.009],[0.066,0.042],[0.169,0.012],[0.218,0.03],[0,0],[0.049,0.107],[0.251,0.103],[-0.104,0.201],[-0.029,-0.33],[0.246,-0.072],[-0.074,-0.027],[-0.007,0.028],[0.08,0.035],[0,0.026],[-0.027,0.03],[0.028,0.024],[0.044,0.053],[0,0],[0.035,0.014],[0.052,0.014],[-0.042,-0.17],[0.114,-0.15],[-0.28,-0.028],[0.356,-0.076],[-0.017,-0.146],[0.049,-0.067],[0,0],[0.062,-0.074],[0,0],[-0.079,0.187],[0,0],[0.013,0.461],[0.282,0.862],[-0.058,-0.249],[0,0],[-0.202,-0.037]],"v":[[-0.733,-0.867],[-1.053,-1.353],[-1.032,-1.453],[-1.134,-1.453],[-1.215,-1.353],[-1.358,-1.435],[-1.36,-1.233],[-1.357,-1.168],[-1.478,-1.168],[-1.431,-1.057],[-1.408,-0.987],[-1.288,-1.03],[-1.173,-0.901],[-1.314,-0.781],[-1.168,-0.659],[-0.694,-0.423],[-0.314,-0.122],[-0.081,0.164],[0.337,0.638],[0.412,1.188],[0.563,1.227],[0.576,1.355],[0.456,1.362],[0.48,1.47],[0.593,1.521],[0.516,1.579],[0.498,1.659],[0.613,1.715],[0.691,1.59],[0.705,1.724],[0.812,1.698],[0.922,1.697],[0.956,1.241],[0.964,0.961],[1.053,0.443],[1.139,-0.56],[1.279,-1.09],[1.588,-1.336],[1.461,-1.533],[1.528,-1.767],[1.349,-1.578],[1.162,-1.717],[1.16,-1.392],[1.037,-0.408],[0.498,-0.018],[0.443,-0.651],[0.094,-0.759]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.419607873056,0.749019607843,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.728,27.968],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 172","np":4,"cix":2,"bm":0,"ix":172,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.019,0],[-0.02,0.019],[-0.069,0],[-0.039,-0.012],[-0.014,0.022],[-0.003,0.074],[-0.033,0.018],[-0.069,-0.053],[-0.042,0.012],[-0.017,0.043],[-0.021,0.03],[0.054,0.063],[0.063,0.03],[0.039,0.011],[0.037,0.014],[0.035,-0.076],[-0.013,-0.099],[0.005,-0.027],[-0.013,-0.012],[-0.004,-0.026],[0.066,0.078],[0.01,0.039],[0.028,0.018],[0,-0.032]],"o":[[0.155,0.122],[0.141,0.021],[0.048,0],[0.051,0.016],[0.007,-0.21],[-0.007,-0.093],[0.027,-0.015],[0.051,0.039],[0.025,-0.007],[0.02,-0.045],[0.04,-0.058],[-0.227,-0.013],[-0.032,-0.014],[-0.035,-0.01],[-0.106,-0.044],[-0.032,0.068],[0.007,0.062],[-0.011,0.044],[0.114,0.09],[-0.064,0.053],[-0.035,-0.042],[-0.147,0.205],[-0.007,0.053],[0.071,-0.04]],"v":[[-0.474,0.362],[-0.306,0.431],[-0.068,0.463],[0.065,0.489],[0.16,0.494],[0.114,0.065],[0.135,-0.103],[0.277,-0.048],[0.43,0.023],[0.492,-0.05],[0.556,-0.161],[0.565,-0.314],[0.21,-0.387],[0.105,-0.428],[-0.006,-0.468],[-0.255,-0.48],[-0.26,-0.189],[-0.253,-0.051],[-0.228,0.035],[-0.048,0.173],[-0.326,0.21],[-0.387,0.076],[-0.603,0.263],[-0.594,0.42]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.007,0],[0.018,0.037],[-0.032,-0.041],[-0.053,0.032],[0.045,0.012],[-0.018,0.071],[0.007,0.057],[-0.036,0.076],[-0.11,-0.046],[-0.033,-0.011],[-0.032,-0.014],[-0.107,0],[-0.032,-0.039],[0.041,-0.058],[0.018,-0.044],[0.034,-0.009],[0.048,0.036],[0.01,-0.005],[-0.003,-0.037],[-0.06,-0.102],[0.051,0.016],[0.046,0],[0.03,0.011]],"o":[[-0.304,-0.187],[0.294,-0.178],[0.051,0.062],[0.004,-0.013],[-0.081,-0.078],[0.005,-0.021],[-0.013,-0.102],[0.042,-0.095],[0.039,0.016],[0.041,0.012],[0.064,0.03],[0.073,-0.035],[0.067,0.076],[-0.021,0.028],[-0.019,0.049],[-0.07,0.003],[-0.077,-0.06],[-0.02,0.011],[0,0.111],[-0.086,0.177],[-0.037,-0.013],[-0.072,0],[-0.099,0.113]],"v":[[-0.315,0.581],[-0.651,0.286],[-0.31,0.198],[-0.077,0.182],[-0.16,0.138],[-0.276,-0.053],[-0.283,-0.182],[-0.274,-0.486],[0.003,-0.484],[0.112,-0.443],[0.22,-0.401],[0.453,-0.345],[0.584,-0.323],[0.577,-0.143],[0.515,-0.037],[0.437,0.048],[0.264,-0.027],[0.148,-0.08],[0.135,0.021],[0.241,0.369],[0.058,0.516],[-0.068,0.489],[-0.202,0.466]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.596,28.717],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 173","np":6,"cix":2,"bm":0,"ix":173,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.124,0.035],[0.053,-0.115],[0.016,-0.063],[0,0],[0.002,-0.048],[0.047,-0.028],[0.059,0.071],[0.023,0.008],[0.035,-0.022],[-0.046,-0.036],[0.015,-0.028],[0.038,0.023],[0,-0.032],[0.007,-0.056],[-0.016,-0.025],[-0.062,-0.026],[0.012,0.067],[-0.067,-0.014],[-0.107,0],[-0.035,0.049],[0.056,0.097],[-0.004,0.069],[-0.2,-0.151],[-0.055,0.136],[0.092,0.105]],"o":[[-0.187,0.007],[-0.133,-0.039],[-0.053,0.115],[-0.016,0.064],[0,0],[0.007,0.074],[-0.048,0.029],[-0.058,-0.07],[-0.023,-0.009],[-0.037,0.021],[0.046,0.035],[-0.014,0.028],[-0.025,0.063],[0.106,-0.045],[-0.007,0.058],[0.017,0.026],[0.062,0.027],[-0.012,-0.069],[0.067,0.014],[0.108,0],[0.037,-0.049],[-0.058,-0.097],[0.003,-0.069],[0.09,0.069],[0.056,-0.136],[-0.09,-0.106]],"v":[[0.458,-0.336],[0.089,-0.435],[-0.286,-0.483],[-0.286,-0.052],[-0.253,0.051],[-0.184,0.051],[-0.092,0.19],[-0.34,0.204],[-0.424,0.023],[-0.51,0.106],[-0.573,0.166],[-0.499,0.238],[-0.62,0.254],[-0.629,0.422],[-0.48,0.404],[-0.536,0.503],[-0.435,0.531],[-0.322,0.531],[-0.275,0.434],[-0.09,0.475],[0.146,0.503],[0.208,0.372],[0.104,0.067],[0.249,-0.038],[0.482,-0.043],[0.552,-0.319]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.419607873056,0.749019607843,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.618,28.718],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 174","np":4,"cix":2,"bm":0,"ix":174,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.035,-0.021],[0.002,0.032],[-0.007,0.023]],"o":[[0.002,0.046],[0.064,-0.002],[0,-0.031],[0,0]],"v":[[-0.074,-0.06],[-0.016,0.074],[0.023,0.004],[0.04,-0.09]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.005,0],[0.035,0.021],[-0.002,0.051],[0,0],[0,-0.046],[0,0]],"o":[[-0.022,0],[-0.05,-0.027],[0.007,-0.01],[0.014,0.014],[0.002,0.043],[-0.007,0.019]],"v":[[0.081,0.117],[-0.026,0.095],[-0.095,-0.068],[0.056,-0.117],[0.047,0.004],[0.097,0.098]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.539,29.72],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 175","np":6,"cix":2,"bm":0,"ix":175,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.043,-0.023],[0,0],[0.002,0.047],[0,0]],"o":[[0,0.051],[0.042,0.023],[0,0],[0,-0.048],[0,0]],"v":[[-0.087,-0.068],[-0.023,0.084],[0.087,0.105],[0.034,0.003],[0.057,-0.107]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.058823533152,0.035294117647,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.541,29.719],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 176","np":4,"cix":2,"bm":0,"ix":176,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.004,-0.052],[-0.018,-0.03],[-0.009,0.04]],"o":[[-0.018,0.021],[-0.003,0.046],[0.005,-0.025],[0.046,-0.073]],"v":[[0.006,-0.136],[-0.057,-0.012],[-0.01,0.122],[0.014,0.018]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[-0.005,0.072],[-0.004,0.004],[0,0],[0,0]],"o":[[-0.012,-0.009],[0.006,-0.075],[0.018,0.002],[-0.063,0.145],[-0.007,0.007]],"v":[[-0.005,0.161],[-0.079,-0.012],[-0.001,-0.161],[0.085,-0.055],[0.006,0.154]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.256,29.714],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 177","np":6,"cix":2,"bm":0,"ix":177,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.003,0.07],[0,0],[0,0],[0.016,-0.065]],"o":[[0,0],[0.006,-0.069],[0,0],[0,0],[-0.012,0.067]],"v":[[-0.006,0.151],[-0.07,-0.011],[0.005,-0.151],[0.073,-0.047],[0.022,0.022]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.058823533152,0.035294117647,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.257,29.712],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 178","np":4,"cix":2,"bm":0,"ix":178,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.018,0],[0.01,-0.051],[-0.045,0.011],[0.021,0.041]],"o":[[-0.102,0.032],[0.023,-0.014],[0.104,-0.003],[-0.007,-0.014]],"v":[[0.049,-0.078],[-0.107,0.083],[-0.001,0.035],[0.089,-0.059]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.004,0],[-0.042,0.02],[-0.025,-0.048],[0.03,-0.018],[0,0]],"o":[[-0.012,-0.062],[0.051,-0.024],[0.025,0.048],[-0.157,0.012],[0,0]],"v":[[-0.122,0.116],[-0.036,-0.079],[0.109,-0.069],[0.098,0.06],[-0.113,0.116]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.158,29.415],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 179","np":6,"cix":2,"bm":0,"ix":179,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.037,0.018],[-0.023,-0.044],[0.023,-0.012],[0.067,-0.016]],"o":[[0,-0.049],[0.035,-0.016],[0.023,0.045],[-0.023,0.013],[-0.065,0.018]],"v":[[-0.122,0.107],[-0.032,-0.068],[0.099,-0.063],[0.092,0.05],[0,0.047]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.058823533152,0.035294117647,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.159,29.414],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 180","np":4,"cix":2,"bm":0,"ix":180,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.014,-0.035],[-0.021,0.027],[-0.019,0.014]],"o":[[-0.03,0.041],[0.05,0.037],[0.021,-0.024],[0,0]],"v":[[-0.027,-0.11],[-0.066,0.032],[0.01,0.002],[0.082,-0.062]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0.019,0.048],[-0.032,0.037],[0,0],[0.028,-0.035],[0,0]],"o":[[-0.009,-0.004],[-0.021,-0.051],[0.012,-0.004],[0,0.021],[-0.027,0.034],[-0.007,0.01]],"v":[[-0.007,0.132],[-0.088,0.041],[-0.04,-0.128],[0.109,-0.072],[0.026,0.015],[0.005,0.12]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.156,29.322],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 181","np":6,"cix":2,"bm":0,"ix":181,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.018,-0.046],[0,0],[-0.029,0.037],[0,0]],"o":[[-0.032,0.039],[0.018,0.044],[0,0],[0.028,-0.037],[0,0]],"v":[[-0.035,-0.122],[-0.081,0.037],[-0.01,0.122],[0.013,0.009],[0.099,-0.062]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.058823533152,0.035294117647,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.16,29.322],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 182","np":4,"cix":2,"bm":0,"ix":182,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.037,0],[0.019,-0.03],[-0.043,0.009],[0,0]],"o":[[-0.088,0.021],[0.025,-0.005],[0.085,0.012],[-0.02,-0.007]],"v":[[0.031,-0.044],[-0.119,0.058],[-0.013,0.039],[0.123,-0.028]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[-0.069,0.025],[-0.003,-0.002],[0,0],[0,0]],"o":[[-0.007,-0.021],[0.069,-0.023],[0.005,0.016],[-0.157,-0.003],[0,0]],"v":[[-0.142,0.083],[-0.022,-0.06],[0.144,-0.046],[0.08,0.074],[-0.142,0.081]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.941,29.054],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 183","np":6,"cix":2,"bm":0,"ix":183,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.066,0.021],[0,0],[0,0],[0.067,-0.013]],"o":[[0,0],[0.067,-0.023],[0,0],[0,0],[-0.067,0.01]],"v":[[-0.141,0.071],[-0.018,-0.049],[0.141,-0.035],[0.072,0.07],[-0.01,0.05]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.058823533152,0.035294117647,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.94,29.054],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 184","np":4,"cix":2,"bm":0,"ix":184,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.035,-0.028],[-0.04,-0.019],[-0.009,0.043],[0.037,0.009]],"o":[[0.027,0.004],[0.087,0.06],[0.007,-0.039],[-0.044,0]],"v":[[-0.123,-0.016],[-0.012,0.014],[0.119,-0.002],[0.029,-0.076]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.034,0],[0,0],[-0.051,0],[0.011,-0.051]],"o":[[-0.136,-0.09],[0.019,-0.055],[0.073,0.015],[-0.008,0.048]],"v":[[0.055,0.097],[-0.149,0.005],[0.018,-0.097],[0.138,0.003]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.038,28.794],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 185","np":6,"cix":2,"bm":0,"ix":185,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.039,-0.011],[0.009,-0.049],[0.025,0.003],[0.06,0.03]],"o":[[0.03,-0.039],[0.039,0.008],[-0.009,0.05],[-0.025,-0.005],[-0.063,-0.032]],"v":[[-0.144,-0.003],[0.036,-0.081],[0.135,0.005],[0.059,0.09],[-0.01,0.03]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.058823533152,0.035294117647,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.032,28.79],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 186","np":4,"cix":2,"bm":0,"ix":186,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.025,-0.03],[-0.012,0.03],[-0.015,0.019]],"o":[[-0.018,0.048],[0.058,0.023],[0.013,-0.03],[0,0]],"v":[[-0.051,-0.102],[-0.049,0.045],[0.014,-0.005],[0.066,-0.085]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0.032,0.04],[-0.019,0.046],[0,0],[0.016,-0.04],[0,0]],"o":[[-0.008,-0.002],[-0.034,-0.044],[0.012,-0.007],[0.007,0.02],[-0.016,0.039],[-0.005,0.016]],"v":[[0.036,0.124],[-0.065,0.059],[-0.067,-0.118],[0.092,-0.106],[0.037,0.002],[0.046,0.109]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.581,28.232],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 187","np":6,"cix":2,"bm":0,"ix":187,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.03,-0.039],[0,0],[-0.018,0.044],[0,0]],"o":[[-0.019,0.046],[0.03,0.039],[0,0],[0.018,-0.044],[0,0]],"v":[[-0.058,-0.114],[-0.058,0.052],[0.034,0.114],[0.025,-0.001],[0.089,-0.095]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.058823533152,0.035294117647,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.581,28.234],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 188","np":4,"cix":2,"bm":0,"ix":188,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.036,-0.026],[0.013,-0.033],[-0.039,0.02],[0,0]],"o":[[-0.032,0],[-0.037,0.027],[0.023,-0.01],[0.085,-0.01],[0,0]],"v":[[0.096,-0.075],[-0.029,-0.045],[-0.103,0.075],[-0.006,0.027],[0.108,-0.075]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[-0.06,0.042],[-0.004,-0.002],[0,0],[0,0]],"o":[[-0.009,-0.018],[0.06,-0.043],[0.01,0.014],[-0.153,0.043],[0,0]],"v":[[-0.122,0.107],[-0.042,-0.064],[0.121,-0.096],[0.094,0.036],[-0.118,0.105]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.356,28.005],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 189","np":6,"cix":2,"bm":0,"ix":189,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.059,0.041],[0,0],[0,0],[0.062,-0.032]],"o":[[0,0],[0.058,-0.041],[0,0],[0,0],[-0.06,0.03]],"v":[[-0.121,0.096],[-0.034,-0.055],[0.121,-0.085],[0.084,0.033],[-0.003,0.039]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.058823533152,0.035294117647,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.355,28.005],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 190","np":4,"cix":2,"bm":0,"ix":190,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.026,0],[0.003,0.046],[0.014,0],[0.03,-0.042]],"o":[[0.147,0.041],[-0.004,-0.047],[-0.03,0.002],[0.018,-0.001]],"v":[[-0.057,0.025],[0.114,-0.023],[0.006,-0.069],[-0.124,0.03]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.046,0.002],[-0.006,-0.048],[0.034,-0.003]],"o":[[-0.146,-0.051],[0.006,-0.062],[0.067,0],[0.005,0.053],[0,0]],"v":[[0.071,0.09],[-0.142,0.059],[0.006,-0.09],[0.137,-0.024],[0.076,0.09]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.379,27.736],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 191","np":6,"cix":2,"bm":0,"ix":191,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.039,0.001],[-0.003,-0.049],[0.025,-0.004],[0.067,0.011]],"o":[[0.018,-0.046],[0.041,-0.002],[0.004,0.05],[-0.026,0.004],[-0.067,-0.009]],"v":[[-0.136,0.047],[0.014,-0.079],[0.132,-0.026],[0.083,0.078],[0,0.039]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.058823533152,0.035294117647,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.37,27.735],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 192","np":4,"cix":2,"bm":0,"ix":192,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.021,-0.038],[-0.004,-0.036],[-0.036,0],[-0.023,-0.007]],"o":[[-0.046,0.002],[-0.012,0.022],[0.016,-0.029],[0.031,0],[0,0]],"v":[[0.064,-0.092],[-0.072,-0.035],[-0.079,0.069],[-0.001,0.005],[0.092,0.023]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.005,0],[-0.027,0.046],[-0.05,0],[0,0],[0.044,0],[0.009,-0.023]],"o":[[-0.013,-0.013],[0.026,-0.046],[0.014,0.009],[-0.014,0.012],[-0.032,0],[-0.002,0.005]],"v":[[-0.085,0.115],[-0.092,-0.048],[0.068,-0.115],[0.118,0.037],[-0.001,0.026],[-0.074,0.108]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.212,26.923],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 193","np":6,"cix":2,"bm":0,"ix":193,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.025,-0.043],[0,0],[-0.048,0],[0,0]],"o":[[-0.051,-0.002],[-0.024,0.042],[0,0],[0.047,0],[0,0]],"v":[[0.071,-0.103],[-0.083,-0.041],[-0.085,0.105],[-0.001,0.017],[0.107,0.042]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.058823533152,0.035294117647,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.213,26.923],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 194","np":4,"cix":2,"bm":0,"ix":194,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.018,0],[0,0],[0.051,0.004],[0.018,-0.04]],"o":[[0.06,0.055],[-0.021,-0.018],[-0.039,0],[0.018,-0.01]],"v":[[-0.047,0.003],[0.108,-0.004],[-0.015,-0.068],[-0.102,0.024]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[-0.076,0],[-0.004,-0.004],[0,0]],"o":[[-0.134,-0.04],[0.078,0.007],[-0.002,0.018],[0,0]],"v":[[-0.001,0.091],[-0.017,-0.091],[0.135,-0.011],[0.006,0.09]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.252,26.572],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 195","np":6,"cix":2,"bm":0,"ix":195,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.071,-0.006],[0,0],[0,0],[0.069,0.002]],"o":[[0,0],[0.071,0.005],[0,0],[0,0],[-0.033,-0.002]],"v":[[-0.126,0.062],[-0.014,-0.077],[0.126,-0.001],[-0.001,0.083],[-0.048,0.016]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.058823533152,0.035294117647,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.252,26.571],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 196","np":4,"cix":2,"bm":0,"ix":196,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.049,0.018],[0.009,-0.04],[-0.045,0],[0,0.012]],"o":[[0.014,0.025],[-0.04,0.096],[0.053,-0.002],[0,-0.072]],"v":[[-0.049,-0.117],[-0.028,-0.013],[0.015,0.109],[0.069,0.004]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0.001,0.033],[0,0],[0,-0.094],[0.053,-0.002]],"o":[[-0.052,0],[0.054,-0.145],[0.09,0.011],[0,0.06],[0,0]],"v":[[0.015,0.133],[-0.091,0.068],[-0.088,-0.133],[0.091,0.005],[0.02,0.133]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.616,26.426],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 197","np":6,"cix":2,"bm":0,"ix":197,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,-0.103],[0.049,-0.002],[0.002,0.027],[-0.014,0.066]],"o":[[0.046,0.021],[0,0.04],[-0.05,0.002],[-0.002,-0.024],[0.015,-0.067]],"v":[[-0.079,-0.133],[0.082,0.014],[0.022,0.13],[-0.079,0.076],[-0.038,-0.005]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.058823533152,0.035294117647,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.614,26.418],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 198","np":4,"cix":2,"bm":0,"ix":198,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.06,-0.011],[-0.043,-0.055],[-0.119,-0.007],[-0.046,-0.009],[0.065,0.023],[0.073,0.051],[0.025,0.016]],"o":[[0.055,0.011],[0.058,0.099],[0.144,0.009],[-0.049,-0.041],[-0.053,-0.017],[-0.033,-0.023],[-0.044,-0.03]],"v":[[-0.328,-0.11],[-0.153,-0.019],[0.031,0.102],[0.375,0.146],[0.156,0.092],[-0.051,-0.036],[-0.139,-0.097]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0.169,0.013],[0.025,0.049],[0,0],[-0.081,-0.051],[-0.031,-0.023],[-0.049,-0.016],[-0.044,0.004]],"o":[[-0.003,0],[-0.126,-0.009],[-0.099,-0.138],[0.005,-0.023],[0.025,0.016],[0.071,0.051],[0.064,0.021],[0.023,0.092]],"v":[[0.387,0.17],[0.031,0.123],[-0.134,0.05],[-0.393,-0.097],[-0.125,-0.118],[-0.037,-0.057],[0.163,0.067],[0.37,0.076]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.368,26.571],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 199","np":6,"cix":2,"bm":0,"ix":199,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.074,0.025],[0.078,0.049],[0,0],[-0.067,-0.087],[-0.171,-0.011],[0,0]],"o":[[-0.03,0.002],[-0.074,-0.025],[-0.077,-0.05],[0,0],[0.069,0.086],[0.171,0.011],[0,0]],"v":[[0.39,0.088],[0.163,0.08],[-0.129,-0.107],[-0.39,-0.107],[-0.158,-0.014],[0.034,0.111],[0.39,0.157]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.058823533152,0.035294117647,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.366,26.57],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 200","np":4,"cix":2,"bm":0,"ix":200,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.127,0.081],[-0.164,-0.154]],"o":[[-0.17,-0.154],[0.138,0.067],[-0.002,0.014]],"v":[[0.264,0.197],[-0.271,-0.197],[0.271,0.183]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.218,26.322],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 201","np":4,"cix":2,"bm":0,"ix":201,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-0.009,-0.009],[0.005,-0.009],[0.01,0.007],[-0.005,0.009],[0,0]],"v":[[-0.06,0.093],[-0.074,-0.038],[0.064,-0.093],[0.074,0.029],[-0.056,0.093]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.509,26.309],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 202","np":4,"cix":2,"bm":0,"ix":202,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.066,-0.085],[-0.066,-0.037],[-0.059,0.085],[0.066,0.03]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.509,26.308],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 203","np":4,"cix":2,"bm":0,"ix":203,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-0.009,-0.009],[0.005,-0.009],[0.01,0.007],[-0.005,0.007],[0,0]],"v":[[-0.06,0.093],[-0.074,-0.037],[0.064,-0.093],[0.074,0.029],[-0.056,0.092]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.166,26.056],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 204","np":4,"cix":2,"bm":0,"ix":204,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.066,-0.085],[-0.066,-0.037],[-0.059,0.085],[0.066,0.03]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.166,26.056],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 205","np":4,"cix":2,"bm":0,"ix":205,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-0.009,-0.009],[0.005,-0.009],[0.012,0.007],[-0.005,0.009],[0,0]],"v":[[-0.061,0.092],[-0.075,-0.036],[0.063,-0.092],[0.075,0.029],[-0.056,0.092]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.34,26.178],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 206","np":4,"cix":2,"bm":0,"ix":206,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.066,-0.085],[-0.066,-0.037],[-0.059,0.085],[0.066,0.03]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.339,26.177],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 207","np":4,"cix":2,"bm":0,"ix":207,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.005,-0.034],[-0.055,-0.034],[-0.021,-0.037],[-0.125,-0.016],[-0.027,0],[0.088,0.002],[0.097,0.067],[0.034,0.023],[0.046,0.113],[0.03,0.003]],"o":[[0.032,0.018],[0.115,0.07],[0.016,-0.025],[0.117,0.012],[-0.022,-0.027],[-0.099,-0.002],[-0.026,-0.018],[-0.159,-0.104],[-0.035,-0.085],[0.095,0.166]],"v":[[-0.38,0.017],[-0.138,0.155],[0.054,0.351],[0.24,0.303],[0.447,0.321],[0.284,0.238],[0.026,0.125],[-0.064,0.063],[-0.315,-0.248],[-0.445,-0.352]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0.14,0.086],[0,0],[0.113,0.183],[-0.05,-0.124],[-0.155,-0.103],[-0.026,-0.018],[-0.093,-0.004],[-0.002,-0.005],[0.17,0.017],[0,0]],"o":[[-0.009,-0.005],[-0.06,-0.037],[-0.003,-0.01],[0.007,-0.013],[0.044,0.109],[0.034,0.021],[0.094,0.065],[0.126,0.003],[-0.009,0.012],[-0.162,-0.004],[-0.008,0.005]],"v":[[0.053,0.379],[-0.149,0.169],[-0.396,0.029],[-0.47,-0.357],[-0.302,-0.255],[-0.057,0.049],[0.033,0.111],[0.282,0.222],[0.47,0.328],[0.236,0.323],[0.062,0.374]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.331,26.202],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 208","np":6,"cix":2,"bm":0,"ix":208,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.06,-0.039],[0,0],[-0.171,-0.018],[0,0],[0.123,0.001],[0.15,0.097],[0.047,0.119]],"o":[[0.117,0.189],[0,0],[0.143,0.088],[0,0],[0.172,0.019],[0,0],[-0.124,-0.004],[-0.15,-0.099],[-0.048,-0.118]],"v":[[-0.462,-0.363],[-0.391,0.02],[-0.144,0.162],[0.052,0.37],[0.237,0.31],[0.462,0.329],[0.282,0.229],[-0.061,0.056],[-0.308,-0.252]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.332,26.205],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 209","np":4,"cix":2,"bm":0,"ix":209,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-2.124,2.341],[2.122,2.341],[2.122,-2.343],[-2.124,-2.343]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.009,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-0.016,-0.016],[0.016,-0.016],[0.016,0.016],[0,0.009]],"v":[[2.138,2.373],[-2.138,2.373],[-2.154,-2.357],[2.138,-2.373],[2.154,2.357]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.427,27.863],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 210","np":6,"cix":2,"bm":0,"ix":210,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[2.138,-2.357],[-2.138,-2.357],[-2.138,2.357],[2.138,2.357]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.835294177485,0.011764706817,0.117647066303,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.427,27.861],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 211","np":4,"cix":2,"bm":0,"ix":211,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0.454],[0,0]],"o":[[0,0],[0.27,-0.367],[0,0],[0,0]],"v":[[-0.207,-1.993],[-0.207,1.967],[0.206,0.713],[0.206,-1.993]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.003,0],[0,0],[0,0],[0,0],[0.292,-0.382]],"o":[[-0.016,-0.016],[0.016,-0.016],[0.016,0.016],[0,0.477],[-0.003,0.005]],"v":[[-0.221,2.027],[-0.238,-2.011],[0.221,-2.027],[0.238,0.709],[-0.21,2.02]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.34,32.229],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 212","np":6,"cix":2,"bm":0,"ix":212,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0.489]],"o":[[0,0],[0,0],[0.277,-0.36],[0,0]],"v":[[0.222,-2.011],[-0.222,-2.011],[-0.222,2.011],[0.222,0.711]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.34,32.23],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 213","np":4,"cix":2,"bm":0,"ix":213,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.131,0.084],[0,0]],"o":[[0,0],[0.15,-0.055],[0,0],[0,0]],"v":[[-0.213,-2.35],[-0.213,2.345],[0.211,2.135],[0.211,-2.35]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0.163,-0.058]],"o":[[-0.016,-0.016],[0.016,-0.016],[0.016,0.016],[-0.147,0.104],[0,0]],"v":[[-0.227,2.382],[-0.243,-2.366],[0.227,-2.382],[0.243,2.142],[-0.222,2.38]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.37,32.586],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 214","np":6,"cix":2,"bm":0,"ix":214,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.14,0.091],[0,0]],"o":[[0,0],[0.161,-0.058],[0,0],[0,0]],"v":[[-0.227,-2.366],[-0.227,2.366],[0.227,2.142],[0.227,-2.366]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.369,32.585],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 215","np":4,"cix":2,"bm":0,"ix":215,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.15,0.016],[0,0],[0,0]],"o":[[0.143,0.014],[0,0],[0,0],[0,0]],"v":[[-0.213,2.403],[0.211,2.399],[0.211,-2.415],[-0.213,-2.415]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.078,0],[0.073,0.007],[0,0],[0,0],[0,0]],"o":[[-0.071,0],[-0.014,-0.016],[0.016,-0.016],[0.016,0.016],[-0.101,0.024]],"v":[[-0.017,2.445],[-0.229,2.434],[-0.243,-2.428],[0.227,-2.445],[0.243,2.415]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.438,32.649],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 216","np":6,"cix":2,"bm":0,"ix":216,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.148,0.016],[0,0],[0,0]],"o":[[0,0],[0.164,0.016],[0,0],[0,0],[0,0]],"v":[[-0.227,-2.431],[-0.227,2.417],[0.227,2.413],[0.227,-2.432],[-0.227,-2.432]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.436,32.65],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 217","np":4,"cix":2,"bm":0,"ix":217,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.15,-0.053],[0,0],[0,0]],"o":[[0.131,0.085],[0,0],[0,0],[0,0]],"v":[[-0.213,2.138],[0.211,2.346],[0.211,-2.35],[-0.213,-2.35]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.003,0],[0.141,0.092],[0,0],[0,0],[0,0]],"o":[[-0.168,-0.059],[-0.007,-0.012],[0.016,-0.016],[0.016,0.016],[-0.011,0.018]],"v":[[0.227,2.384],[-0.236,2.157],[-0.243,-2.368],[0.227,-2.384],[0.243,2.366]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[96.49,32.586],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 218","np":6,"cix":2,"bm":0,"ix":218,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.161,-0.056],[0,0]],"o":[[0,0],[0.141,0.092],[0,0],[0,0]],"v":[[-0.227,-2.368],[-0.227,2.145],[0.227,2.368],[0.227,-2.368]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[96.489,32.587],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 219","np":4,"cix":2,"bm":0,"ix":219,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.277,-0.369],[0,0]],"o":[[0,0],[0,0.461],[0,0],[0,0]],"v":[[-0.213,-2],[-0.213,0.706],[0.211,1.974],[0.211,-2]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0.484],[0,0],[0,0],[0,0]],"o":[[-0.311,-0.388],[0,0],[0.016,-0.016],[0.016,0.016],[-0.013,0.018]],"v":[[0.227,2.034],[-0.243,0.704],[-0.243,-2.018],[0.227,-2.034],[0.243,2.016]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[95.517,32.236],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 220","np":6,"cix":2,"bm":0,"ix":220,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.283,-0.362],[0,0]],"o":[[0,0],[0,0.496],[0,0],[0,0]],"v":[[-0.227,-2.018],[-0.227,0.704],[0.227,2.018],[0.227,-2.018]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[95.516,32.237],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 221","np":4,"cix":2,"bm":0,"ix":221,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.152,-0.016],[0,0],[0,0]],"o":[[0.155,0.053],[0,0],[0,0],[0,0]],"v":[[-0.23,2.299],[0.233,2.406],[0.233,-2.41],[-0.23,-2.41]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.003,0],[0.166,0.059],[0,0],[0,0],[0,0]],"o":[[-0.166,-0.016],[-0.011,-0.014],[0.016,-0.016],[0.016,0.016],[-0.009,0.014]],"v":[[0.247,2.439],[-0.252,2.325],[-0.263,-2.424],[0.247,-2.439],[0.263,2.424]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[96.963,32.643],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 222","np":6,"cix":2,"bm":0,"ix":222,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.172,-0.017],[0,0],[0,0]],"o":[[0,0],[0.157,0.055],[0,0],[0,0],[0,0]],"v":[[-0.247,-2.424],[-0.247,2.311],[0.247,2.424],[0.247,-2.422],[-0.247,-2.422]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.835294177485,0.011764706817,0.117647066303,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[96.962,32.643],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 223","np":4,"cix":2,"bm":0,"ix":223,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.185,-0.125],[0,0],[0,0]],"o":[[0.138,0.177],[0,0],[0,0],[0,0]],"v":[[-0.243,1.773],[0.244,2.227],[0.244,-2.239],[-0.243,-2.239]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.003,0],[0.146,0.189],[0,0],[0,0],[0,0]],"o":[[-0.209,-0.132],[-0.004,-0.009],[0.016,-0.016],[0.016,0.016],[-0.009,0.016]],"v":[[0.259,2.271],[-0.271,1.79],[-0.275,-2.256],[0.259,-2.271],[0.275,2.256]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[96.002,32.475],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 224","np":6,"cix":2,"bm":0,"ix":224,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.199,-0.129],[0,0]],"o":[[0,0],[0.145,0.186],[0,0],[0,0]],"v":[[-0.26,-2.257],[-0.26,1.78],[0.26,2.257],[0.26,-2.257]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.835294177485,0.011764706817,0.117647066303,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[96.002,32.476],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 225","np":4,"cix":2,"bm":0,"ix":225,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.149,0.053],[0,0]],"o":[[0,0],[0.148,-0.017],[0,0],[0,0]],"v":[[-0.222,-2.406],[-0.222,2.405],[0.225,2.299],[0.225,-2.406]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.163,-0.018],[0,0],[0,0],[0,0]],"o":[[-0.016,-0.016],[0.016,-0.016],[0.016,0.016],[-0.17,0.072]],"v":[[-0.238,2.438],[-0.255,-2.422],[0.239,-2.438],[0.255,2.31]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.901,32.641],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 226","np":6,"cix":2,"bm":0,"ix":226,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.152,0.053],[0,0],[0,0]],"o":[[0,0],[0.166,-0.018],[0,0],[0,0],[0,0]],"v":[[-0.238,-2.423],[-0.238,2.423],[0.238,2.312],[0.238,-2.42],[-0.238,-2.42]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.835294177485,0.011764706817,0.117647066303,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.901,32.642],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 227","np":4,"cix":2,"bm":0,"ix":227,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.141,0.182],[0,0]],"o":[[0,0],[0.185,-0.125],[0,0],[0,0]],"v":[[-0.244,-2.238],[-0.244,2.225],[0.247,1.763],[0.247,-2.238]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.004,0],[0,0],[0,0],[0,0],[0.198,-0.131]],"o":[[-0.016,-0.016],[0.016,-0.016],[0.016,0.016],[-0.154,0.203],[-0.004,0.002]],"v":[[-0.26,2.27],[-0.277,-2.254],[0.26,-2.27],[0.277,1.768],[-0.251,2.266]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.857,32.474],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 228","np":6,"cix":2,"bm":0,"ix":228,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.147,0.189],[0,0]],"o":[[0,0],[0.201,-0.131],[0,0],[0,0]],"v":[[-0.262,-2.254],[-0.262,2.254],[0.262,1.768],[0.262,-2.254]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.835294177485,0.011764706817,0.117647066303,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.857,32.473],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 229","np":4,"cix":2,"bm":0,"ix":229,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-2.138,2.341],[2.136,2.341],[2.136,-2.343],[-2.138,-2.343]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.009,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-0.016,-0.016],[0.015,-0.016],[0.016,0.016],[0.002,0.009]],"v":[[2.153,2.373],[-2.153,2.373],[-2.169,-2.357],[2.151,-2.373],[2.167,2.357]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.686,27.863],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 230","np":6,"cix":2,"bm":0,"ix":230,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[2.153,-2.357],[-2.153,-2.357],[-2.153,2.357],[2.153,2.357]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.898039275525,0.898039275525,0.898039275525,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.685,27.861],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 231","np":4,"cix":2,"bm":0,"ix":231,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-1.021,0],[0,1.455],[0,0]],"o":[[0,0],[0,1.455],[1.022,0],[0,0],[0,0]],"v":[[-2.12,-2.41],[-2.12,0.296],[-0.001,2.414],[2.122,0.296],[2.122,-2.41]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[1.036,0],[0.39,0.346],[0,0.664],[0,0],[0,0],[0,0]],"o":[[-0.564,0],[-0.44,-0.391],[0,0],[0.016,-0.016],[0.016,0.016],[0,1.479]],"v":[[-0.001,2.444],[-1.48,1.907],[-2.153,0.294],[-2.153,-2.428],[2.136,-2.444],[2.152,0.292]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.436,32.646],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 232","np":6,"cix":2,"bm":0,"ix":232,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-1.169,0],[0,1.169],[0,0]],"o":[[0,0],[0,1.169],[1.17,0],[0,0],[0,0]],"v":[[-2.12,-2.412],[-2.12,0.295],[0.001,2.416],[2.123,0.295],[2.123,-2.412]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[1.186,0],[0,1.187],[0,0],[0,0],[0,0]],"o":[[-1.187,0],[0,0],[0.016,-0.016],[0.016,0.016],[0,1.189]],"v":[[-0.001,2.446],[-2.153,0.292],[-2.153,-2.429],[2.137,-2.446],[2.153,0.291]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.702,32.647],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 233","np":6,"cix":2,"bm":0,"ix":233,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.18,0],[0,1.18],[0,0],[0,0],[0,0]],"o":[[-1.18,0],[0,0],[0,0],[0,0],[0,1.18]],"v":[[0.001,2.429],[-2.136,0.292],[-2.136,-2.429],[2.136,-2.429],[2.136,0.292]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.839215746113,0.011764706817,0.125490196078,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.701,32.647],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 234","np":4,"cix":2,"bm":0,"ix":234,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-2.032,0],[0,1.895],[0,0],[0,0]],"o":[[0,0],[0,1.833],[2.063,0],[0,0],[0,0],[-0.027,0.002]],"v":[[-4.251,-5.034],[-4.251,2.365],[-0.032,5.032],[4.253,2.275],[4.253,-5.036],[0.014,-5.036]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[2.1,0],[0.779,0.44],[0,0.847],[0,0],[0,0],[0,0],[0,0]],"o":[[-1.122,0],[-0.882,-0.498],[0,0],[0.037,-0.037],[0,0],[0.037,0.037],[0.002,1.943]],"v":[[-0.032,5.106],[-2.98,4.424],[-4.327,2.367],[-4.327,-5.069],[-0.014,-5.106],[4.288,-5.106],[4.326,2.278]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.579,30.576],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 235","np":6,"cix":2,"bm":0,"ix":235,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,3.614],[0,0],[0,0]],"o":[[0,0],[0,0],[0,3.716],[0,0],[0,0],[0,0]],"v":[[0.014,-5.532],[4.289,-5.532],[4.289,1.816],[-4.29,1.904],[-4.29,-5.532],[-0.012,-5.532]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.898039275525,0.898039275525,0.898039275525,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.58,31.036],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 236","np":4,"cix":2,"bm":0,"ix":236,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.217,-0.042],[-0.014,-0.007],[-0.036,0.009]],"o":[[-0.021,-0.035],[0.025,-0.028],[0.114,-0.039]],"v":[[-0.068,0.075],[-0.135,0.004],[-0.05,-0.036]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.855,24.33],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 237","np":4,"cix":2,"bm":0,"ix":237,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.051,0.242],[-0.021,0.019],[0.007,-0.029]],"o":[[0.032,-0.012],[0.046,0.046],[-0.007,0.203]],"v":[[-0.062,-0.084],[0.016,-0.158],[0.053,-0.066]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.911,24.263],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 238","np":4,"cix":2,"bm":0,"ix":238,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.005,0.097],[0.016,0.036],[0.034,0],[0.006,-0.045],[0.014,-0.058],[0,0],[0,0]],"o":[[-0.005,-0.097],[-0.014,-0.035],[-0.035,0],[-0.01,0.088],[-0.02,0.087],[0,0],[0,0]],"v":[[0.084,-0.008],[0.068,-0.206],[-0.003,-0.248],[-0.07,-0.186],[-0.087,0.036],[0.006,0.248],[0.107,0.126]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.926,23.981],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 239","np":4,"cix":2,"bm":0,"ix":239,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.369,0.097],[-0.371,-0.099]],"o":[[0.369,-0.099],[-0.37,0.097]],"v":[[-0.567,0],[0.555,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0.412,-0.12],[-0.409,0.121]],"o":[[-0.424,-0.148],[0.41,0.175],[0.015,-0.024]],"v":[[0.631,0],[-0.631,-0.027],[0.616,0.026]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.933,24.842],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 240","np":6,"cix":2,"bm":0,"ix":240,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.314,0],[0,0],[0.396,0],[0,0]],"o":[[0.374,0],[0,0],[-0.395,0],[0,0]],"v":[[0,-0.098],[0.604,-0.006],[0.021,0.098],[-0.604,0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.835294177485,0.011764706817,0.117647066303,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.922,24.841],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 241","np":4,"cix":2,"bm":0,"ix":241,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.011,0.002],[0.454,-0.118],[-0.459,-0.12]],"o":[[-0.454,-0.118],[0.45,-0.163],[0.012,0.037]],"v":[[0.68,0.08],[-0.701,0.08],[0.689,0.038]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.938,24.606],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 242","np":4,"cix":2,"bm":0,"ix":242,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.01,-0.034],[-0.035,0.017],[-0.045,-0.025]],"o":[[-0.062,-0.03],[-0.067,-0.072],[0,0.044],[0.042,0.025]],"v":[[0.091,0.002],[-0.024,0.085],[-0.024,-0.07],[0.049,-0.06]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[106.856,24.408],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 243","np":4,"cix":2,"bm":0,"ix":243,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.076,0.164],[0.007,0.023],[0.007,-0.03]],"o":[[-0.032,-0.018],[-0.041,0.03],[-0.014,0.196]],"v":[[0.059,-0.047],[0.006,-0.133],[-0.045,-0.063]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[106.407,24.309],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 244","np":4,"cix":2,"bm":0,"ix":244,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.054,-0.023],[-0.014,0.032],[-0.067,0.023],[0,0.028],[-0.037,-0.03],[-0.039,0.037],[-0.067,-0.006],[-0.006,0.023],[-0.067,-0.03],[-0.014,0.021],[-0.08,-0.023],[-0.007,0.021],[-0.039,-0.032],[-0.025,0.016],[-0.046,-0.009],[0,0],[0.048,-0.021],[0.023,0.01],[0.062,0.009],[0,0],[0.072,0.007],[0,0],[0.069,0.002],[0,0],[0.079,0.001],[0,0],[0.064,0.002],[0,0],[0.062,-0.008],[0,0],[0.057,-0.013],[0.026,0.023]],"o":[[0,0],[0.055,0.023],[0.023,-0.051],[0.069,-0.023],[0.033,-0.06],[0.039,0.03],[0.038,-0.076],[0.067,0.005],[0.039,-0.069],[0.067,0.03],[0.035,-0.042],[0.079,0.022],[0.053,-0.048],[0.037,0.033],[0.054,-0.03],[0.057,0.011],[0.016,0.028],[-0.048,0.023],[-0.039,-0.055],[-0.061,-0.01],[0,0],[-0.072,-0.005],[0,0],[-0.07,-0.002],[0,0],[-0.08,-0.002],[0,0],[-0.065,-0.001],[0,0],[-0.062,0.009],[0,0],[-0.056,0.012],[-0.052,-0.065]],"v":[[-0.831,-0.01],[-0.743,0.076],[-0.653,0.055],[-0.531,0.055],[-0.458,-0.044],[-0.391,-0.01],[-0.253,-0.01],[-0.126,0.001],[-0.02,-0.081],[0.07,-0.012],[0.199,-0.04],[0.298,0.017],[0.421,-0.052],[0.485,0.022],[0.6,0.046],[0.702,0.094],[0.833,-0.001],[0.771,0.112],[0.669,0.13],[0.525,0.094],[0.432,0.016],[0.317,0.062],[0.218,0.007],[0.119,0.048],[0.004,-0.017],[-0.11,0.047],[-0.211,0.004],[-0.305,0.062],[-0.423,0.016],[-0.513,0.092],[-0.617,0.077],[-0.676,0.137],[-0.797,0.085]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.924,24.506],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 245","np":4,"cix":2,"bm":0,"ix":245,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.076,0.166],[-0.016,0.025],[-0.002,-0.03]],"o":[[0.03,-0.021],[0.021,0.022],[0.021,0.194]],"v":[[-0.059,-0.048],[-0.013,-0.134],[0.038,-0.06]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.447,24.308],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 246","np":4,"cix":2,"bm":0,"ix":246,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-0.053],[0.01,-0.034],[0.037,0.017]],"o":[[0.062,-0.03],[0.067,-0.072],[-0.037,-0.032]],"v":[[-0.091,0.01],[0.024,0.093],[0.024,-0.062]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105,24.399],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 247","np":4,"cix":2,"bm":0,"ix":247,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.005,0.088],[0.102,0.067],[0.032,-0.012],[-0.102,-0.008],[-0.021,-0.099],[0,0]],"o":[[0.005,-0.101],[-0.155,-0.073],[-0.067,0.078],[0.103,0.011],[0.021,0.099],[0.077,0.044]],"v":[[0.242,0.088],[0.106,-0.144],[-0.18,-0.183],[-0.062,-0.165],[0.168,-0.011],[0.101,0.174]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[106.248,23.947],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 248","np":4,"cix":2,"bm":0,"ix":248,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.329,-0.134],[0.164,-0.16],[0,0]],"o":[[0.353,-0.049],[0,0],[0.231,-0.211]],"v":[[-0.338,-0.162],[0.047,0.205],[0.107,0.295]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[106.775,24.041],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 249","np":4,"cix":2,"bm":0,"ix":249,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.233,-0.155],[-0.224,-0.173]],"o":[[-0.164,-0.274],[-0.352,-0.24]],"v":[[-0.092,0.287],[0.325,-0.047]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.527,23.888],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 250","np":4,"cix":2,"bm":0,"ix":250,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0.064,0.157],[0,0],[0,0],[0.072,-0.157],[0,0],[0,0]],"v":[[-0.687,-0.034],[-0.27,0.064],[0.152,0.049],[0.615,0.122],[0.205,-0.115],[-0.249,-0.124]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.927,24.701],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 251","np":4,"cix":2,"bm":0,"ix":251,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.237,-0.214],[0,0],[-0.334,-0.088]],"o":[[0,0],[-0.166,-0.161],[-0.299,-0.167]],"v":[[-0.094,0.293],[-0.036,0.203],[0.332,-0.126]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.061,24.045],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 252","np":4,"cix":2,"bm":0,"ix":252,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.12,0.02],[0,0],[-0.165,0.065],[0,0],[-0.173,-0.064],[-0.051,0.016],[-0.097,-0.063],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0.06,-0.147],[0.12,-0.019],[0,0],[0.162,-0.066],[0,0],[0.159,0.058],[0.057,-0.016],[0.098,0.064],[0,0],[0,0],[0,0],[-0.064,0.053],[0,0],[0,0],[0,0],[0,0]],"v":[[-0.98,-0.084],[-0.703,-0.305],[-0.478,-0.275],[-0.328,-0.407],[0.014,-0.345],[0.329,-0.414],[0.551,-0.28],[0.861,-0.259],[0.98,-0.075],[0.98,0.087],[0.852,0.299],[0.729,0.418],[-0.674,0.478],[-0.791,0.347],[-0.932,0.11],[-0.957,-0.01]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.835294177485,0.011764706817,0.117647066303,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.912,24.188],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 253","np":4,"cix":2,"bm":0,"ix":253,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[-0.042,0],[0,0]],"v":[[0.021,0.074],[0.021,-0.074],[-0.021,0.074]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.927,23.551],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 254","np":4,"cix":2,"bm":0,"ix":254,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.051],[-0.046,0],[0,-0.051],[0.046,0]],"o":[[0,-0.051],[0.046,0],[0,0.051],[-0.046,0]],"v":[[-0.083,0],[0,-0.094],[0.083,0],[0,0.094]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.254901960784,0.800000059838,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.925,23.64],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 255","np":4,"cix":2,"bm":0,"ix":255,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.217,-0.042],[-0.014,-0.007],[-0.036,0.009]],"o":[[-0.021,-0.035],[0.025,-0.028],[0.114,-0.039]],"v":[[-0.068,0.075],[-0.135,0.004],[-0.05,-0.036]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.174,24.33],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 256","np":4,"cix":2,"bm":0,"ix":256,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.053,0.242],[-0.021,0.019],[0.009,-0.029]],"o":[[0.032,-0.012],[0.046,0.046],[-0.005,0.203]],"v":[[-0.062,-0.084],[0.016,-0.158],[0.053,-0.066]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.228,24.263],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 257","np":4,"cix":2,"bm":0,"ix":257,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.007,0.097],[0.016,0.036],[0.034,0],[0.006,-0.045],[0.014,-0.058],[0,0],[0,0]],"o":[[-0.005,-0.097],[-0.014,-0.035],[-0.035,0],[-0.01,0.088],[-0.02,0.087],[0,0],[0,0]],"v":[[0.083,-0.008],[0.067,-0.206],[-0.004,-0.248],[-0.071,-0.186],[-0.088,0.036],[0.005,0.248],[0.108,0.126]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.244,23.981],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 258","np":4,"cix":2,"bm":0,"ix":258,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.369,0.097],[-0.371,-0.099]],"o":[[0.369,-0.099],[-0.371,0.097]],"v":[[-0.567,0],[0.555,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0.412,-0.12],[-0.409,0.121]],"o":[[-0.424,-0.148],[0.41,0.175],[0.015,-0.024]],"v":[[0.631,0],[-0.631,-0.027],[0.616,0.026]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.251,24.842],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 259","np":6,"cix":2,"bm":0,"ix":259,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.314,0],[0,0],[0.396,0],[0,0]],"o":[[0.374,0],[0,0],[-0.395,0],[0,0]],"v":[[0,-0.098],[0.604,-0.006],[0.021,0.098],[-0.604,0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.835294177485,0.011764706817,0.117647066303,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.24,24.841],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 260","np":4,"cix":2,"bm":0,"ix":260,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.011,0.002],[0.454,-0.118],[-0.459,-0.12]],"o":[[-0.454,-0.118],[0.452,-0.163],[0.012,0.037]],"v":[[0.68,0.08],[-0.701,0.08],[0.689,0.038]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.257,24.606],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 261","np":4,"cix":2,"bm":0,"ix":261,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.01,-0.034],[-0.035,0.017],[-0.043,-0.025]],"o":[[-0.062,-0.03],[-0.067,-0.072],[0,0.044],[0.044,0.025]],"v":[[0.091,0.002],[-0.024,0.085],[-0.024,-0.07],[0.047,-0.06]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[94.174,24.408],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 262","np":4,"cix":2,"bm":0,"ix":262,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.076,0.164],[0.007,0.023],[0.005,-0.03]],"o":[[-0.032,-0.018],[-0.041,0.03],[-0.016,0.196]],"v":[[0.059,-0.047],[0.006,-0.133],[-0.043,-0.063]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.725,24.309],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 263","np":4,"cix":2,"bm":0,"ix":263,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.054,-0.023],[-0.014,0.032],[-0.069,0.023],[0,0.028],[-0.039,-0.03],[-0.039,0.037],[-0.068,-0.006],[-0.007,0.023],[-0.068,-0.03],[-0.015,0.021],[-0.079,-0.023],[-0.007,0.021],[-0.037,-0.032],[-0.026,0.016],[-0.046,-0.009],[0,0],[0.047,-0.021],[0.023,0.01],[0.062,0.009],[0,0],[0.072,0.007],[0,0],[0.069,0.002],[0,0],[0.08,0.001],[0,0],[0.066,0.002],[0,0],[0.062,-0.008],[0,0],[0.057,-0.013],[0.026,0.023]],"o":[[0,0],[0.055,0.023],[0.023,-0.051],[0.069,-0.023],[0.033,-0.06],[0.038,0.03],[0.039,-0.076],[0.067,0.005],[0.039,-0.069],[0.067,0.03],[0.035,-0.042],[0.08,0.022],[0.055,-0.048],[0.037,0.033],[0.055,-0.03],[0.058,0.011],[0.015,0.028],[-0.048,0.023],[-0.039,-0.055],[-0.062,-0.01],[0,0],[-0.073,-0.005],[0,0],[-0.069,-0.002],[0,0],[-0.079,-0.002],[0,0],[-0.065,-0.001],[0,0],[-0.062,0.009],[0,0],[-0.056,0.012],[-0.052,-0.065]],"v":[[-0.831,-0.01],[-0.743,0.076],[-0.654,0.055],[-0.532,0.055],[-0.459,-0.044],[-0.39,-0.01],[-0.253,-0.01],[-0.125,0.001],[-0.02,-0.081],[0.072,-0.012],[0.201,-0.04],[0.299,0.017],[0.423,-0.052],[0.486,0.022],[0.601,0.046],[0.704,0.094],[0.835,-0.001],[0.773,0.112],[0.67,0.13],[0.527,0.094],[0.434,0.016],[0.318,0.062],[0.219,0.007],[0.12,0.048],[0.006,-0.017],[-0.11,0.047],[-0.21,0.004],[-0.306,0.062],[-0.424,0.016],[-0.514,0.092],[-0.618,0.077],[-0.676,0.137],[-0.798,0.085]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.243,24.506],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 264","np":4,"cix":2,"bm":0,"ix":264,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.074,0.166],[-0.014,0.025],[-0.002,-0.03]],"o":[[0.03,-0.021],[0.021,0.022],[0.02,0.194]],"v":[[-0.059,-0.048],[-0.012,-0.134],[0.038,-0.06]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[92.766,24.308],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 265","np":4,"cix":2,"bm":0,"ix":265,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-0.053],[0.01,-0.034],[0.037,0.017]],"o":[[0.062,-0.03],[0.067,-0.072],[-0.037,-0.032]],"v":[[-0.091,0.01],[0.024,0.093],[0.024,-0.062]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[92.319,24.399],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 266","np":4,"cix":2,"bm":0,"ix":266,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.005,0.088],[0.102,0.067],[0.032,-0.012],[-0.102,-0.008],[-0.021,-0.099],[0,0]],"o":[[0.005,-0.101],[-0.155,-0.073],[-0.067,0.078],[0.103,0.011],[0.021,0.099],[0.077,0.044]],"v":[[0.242,0.088],[0.106,-0.144],[-0.18,-0.183],[-0.062,-0.165],[0.168,-0.011],[0.101,0.174]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.567,23.947],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 267","np":4,"cix":2,"bm":0,"ix":267,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.33,-0.134],[0.164,-0.16],[0,0]],"o":[[0.353,-0.049],[0,0],[0.233,-0.211]],"v":[[-0.339,-0.162],[0.046,0.205],[0.106,0.295]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[94.093,24.041],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 268","np":4,"cix":2,"bm":0,"ix":268,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.235,-0.155],[-0.224,-0.173]],"o":[[-0.164,-0.274],[-0.352,-0.24]],"v":[[-0.091,0.287],[0.326,-0.047]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[92.844,23.888],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 269","np":4,"cix":2,"bm":0,"ix":269,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0.064,0.157],[0,0],[0,0],[0.072,-0.157],[0,0],[0,0]],"v":[[-0.687,-0.034],[-0.27,0.064],[0.152,0.049],[0.615,0.122],[0.205,-0.115],[-0.247,-0.124]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.244,24.701],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 270","np":4,"cix":2,"bm":0,"ix":270,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.237,-0.214],[0,0],[-0.335,-0.088]],"o":[[0,0],[-0.166,-0.161],[-0.302,-0.167]],"v":[[-0.095,0.293],[-0.035,0.203],[0.332,-0.126]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[92.38,24.045],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 271","np":4,"cix":2,"bm":0,"ix":271,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.12,0.02],[0,0],[-0.165,0.065],[0,0],[-0.175,-0.064],[-0.055,0.016],[-0.097,-0.063],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0.06,-0.147],[0.12,-0.019],[0,0],[0.162,-0.066],[0,0],[0.159,0.058],[0.056,-0.016],[0.097,0.064],[0,0],[0,0],[0,0],[-0.064,0.053],[0,0],[0,0],[0,0],[0,0]],"v":[[-0.981,-0.084],[-0.704,-0.305],[-0.479,-0.275],[-0.329,-0.407],[0.013,-0.345],[0.33,-0.414],[0.554,-0.28],[0.863,-0.259],[0.981,-0.075],[0.981,0.087],[0.854,0.299],[0.731,0.418],[-0.672,0.478],[-0.788,0.347],[-0.93,0.11],[-0.955,-0.01]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.835294177485,0.011764706817,0.117647066303,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.231,24.188],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 272","np":4,"cix":2,"bm":0,"ix":272,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[-0.042,0],[0,0]],"v":[[0.021,0.074],[0.021,-0.074],[-0.021,0.074]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.244,23.551],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 273","np":4,"cix":2,"bm":0,"ix":273,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.051],[-0.046,0],[0,-0.051],[0.046,0]],"o":[[0,-0.051],[0.046,0],[0,0.051],[-0.046,0]],"v":[[-0.083,0],[0,-0.094],[0.083,0],[0,0.094]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.254901960784,0.800000059838,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.244,23.64],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 274","np":4,"cix":2,"bm":0,"ix":274,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.023,-0.081],[-0.08,-0.023],[-0.035,0.127],[0.03,0.054]],"o":[[-0.037,0.127],[0.079,0.023],[0.023,-0.079],[-0.205,-0.015]],"v":[[-0.132,-0.038],[-0.056,0.234],[0.152,0.045],[0.142,-0.17]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.092,0],[-0.045,0.152],[-0.065,0.036],[-0.037,-0.012],[-0.023,-0.039],[0.026,-0.09]],"o":[[-0.142,-0.035],[0.026,-0.09],[0.039,-0.021],[0.037,0.011],[0.035,0.066],[-0.039,0.133]],"v":[[-0.031,0.28],[-0.174,-0.05],[-0.028,-0.252],[0.089,-0.268],[0.179,-0.192],[0.193,0.057]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.372,23.68],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 275","np":6,"cix":2,"bm":0,"ix":275,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.041,0.14],[-0.09,-0.027],[0.04,-0.139],[0.09,0.026]],"o":[[0.041,-0.138],[0.09,0.026],[-0.041,0.138],[-0.09,-0.027]],"v":[[-0.163,-0.048],[0.074,-0.25],[0.164,0.047],[-0.073,0.251]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.383,23.682],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 276","np":4,"cix":2,"bm":0,"ix":276,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.009,0],[0.032,-0.113],[-0.03,-0.055],[-0.023,0.079],[0.079,0.022]],"o":[[-0.072,0],[-0.023,0.08],[0.203,0.012],[0.037,-0.128],[-0.007,-0.002]],"v":[[0.032,-0.223],[-0.152,-0.031],[-0.141,0.186],[0.133,0.053],[0.057,-0.218]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.026,0],[0.021,0.039],[-0.027,0.09],[-0.099,-0.028],[0.044,-0.152],[0.064,-0.035]],"o":[[-0.076,-0.015],[-0.036,-0.065],[0.044,-0.15],[0.102,0.03],[-0.026,0.09],[-0.028,0.014]],"v":[[-0.051,0.287],[-0.178,0.206],[-0.192,-0.042],[0.071,-0.26],[0.175,0.066],[0.03,0.266]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.578,23.36],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 277","np":6,"cix":2,"bm":0,"ix":277,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.041,0.138],[-0.09,-0.027],[0.04,-0.139],[0.09,0.026]],"o":[[0.041,-0.138],[0.09,0.026],[-0.041,0.138],[-0.09,-0.027]],"v":[[-0.163,-0.048],[0.074,-0.25],[0.164,0.047],[-0.073,0.251]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.568,23.372],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 278","np":4,"cix":2,"bm":0,"ix":278,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.023,0],[-0.018,-0.131],[-0.036,-0.042],[-0.04,0.003],[0.018,0.132],[0.049,0.038]],"o":[[-0.094,0.011],[0.009,0.065],[0.033,0.039],[0.081,-0.011],[-0.011,-0.081],[-0.023,-0.018]],"v":[[-0.02,-0.237],[-0.147,0.022],[-0.078,0.188],[0.032,0.241],[0.146,-0.017],[0.049,-0.21]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.005,0],[0.039,0.045],[0.009,0.073],[-0.106,0.014],[-0.035,-0.026],[-0.012,-0.094],[0.106,-0.015]],"o":[[-0.046,0],[-0.04,-0.047],[-0.021,-0.157],[0.039,-0.004],[0.059,0.046],[0.022,0.157],[-0.006,0.001]],"v":[[0.019,0.283],[-0.112,0.214],[-0.19,0.026],[-0.038,-0.279],[0.076,-0.245],[0.189,-0.025],[0.038,0.281]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.568,23.368],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 279","np":6,"cix":2,"bm":0,"ix":279,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.018,0.143],[-0.093,0.013],[-0.019,-0.143],[0.094,-0.013]],"o":[[-0.019,-0.143],[0.094,-0.012],[0.02,0.143],[-0.094,0.012]],"v":[[-0.169,0.022],[-0.035,-0.259],[0.168,-0.022],[0.034,0.259]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.568,23.371],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 280","np":4,"cix":2,"bm":0,"ix":280,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.009,-0.035],[-0.071,-0.016],[-0.016,0.07],[0.07,0.016],[0.03,-0.018]],"o":[[-0.018,0.072],[0.072,0.017],[0.017,-0.073],[-0.034,-0.007],[-0.03,0.019]],"v":[[-0.132,-0.022],[-0.033,0.139],[0.129,0.04],[0.03,-0.121],[-0.072,-0.105]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.077,0],[-0.022,0.092],[-0.093,-0.025],[0.021,-0.091]],"o":[[-0.131,-0.026],[0.021,-0.092],[0.092,0.021],[-0.022,0.078]],"v":[[-0.001,0.181],[-0.167,-0.031],[0.039,-0.156],[0.168,0.05]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.545,23.209],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 281","np":6,"cix":2,"bm":0,"ix":281,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.019,0.081],[-0.082,-0.02],[0.019,-0.082],[0.081,0.019]],"o":[[0.019,-0.081],[0.081,0.019],[-0.02,0.081],[-0.081,-0.02]],"v":[[-0.148,-0.035],[0.036,-0.148],[0.149,0.036],[-0.036,0.149]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.835294177485,0.011764706817,0.117647066303,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.544,23.219],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 282","np":4,"cix":2,"bm":0,"ix":282,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.088,0.076],[0,0.066],[0.088,0.069],[0.189,-0.039],[0,0],[0.085,-0.08],[-0.118,0.003]],"o":[[0.194,0.023],[0.05,-0.042],[0,-0.032],[-0.073,-0.057],[0,0],[-0.194,0.048],[0.059,0.035],[0.034,-0.002]],"v":[[-0.105,0.278],[0.331,0.193],[0.407,0.028],[0.284,-0.16],[-0.101,-0.234],[-0.033,-0.122],[-0.395,0.024],[-0.056,0.136]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.149,0],[0.051,0.007],[0,0],[0.011,0.021],[-0.116,0.029],[0,0],[-0.081,-0.063],[0,-0.045],[0.058,-0.052]],"o":[[-0.047,0],[-0.027,-0.004],[-0.15,-0.01],[0.117,-0.118],[0.032,-0.008],[0.242,-0.06],[0.096,0.074],[0,0.076],[-0.078,0.067]],"v":[[0.013,0.321],[-0.135,0.311],[-0.086,0.171],[-0.446,0.028],[-0.121,-0.14],[-0.158,-0.26],[0.308,-0.191],[0.446,0.025],[0.358,0.221]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.088,23.178],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 283","np":6,"cix":2,"bm":0,"ix":283,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-0.083],[0.362,0.048],[0,0],[-0.064,-0.027],[-0.147,0.038],[0,0]],"o":[[0,0.189],[0,0],[-0.17,0.009],[0.108,-0.108],[0,0],[0.388,-0.095]],"v":[[0.455,0.028],[-0.105,0.293],[-0.025,0.153],[-0.391,0.023],[-0.032,-0.135],[-0.101,-0.246]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.059,23.178],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 284","np":4,"cix":2,"bm":0,"ix":284,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.002,-0.109],[-0.192,-0.037],[0,0],[-0.09,0.06],[0.118,0.027],[0,0]],"o":[[0.002,0.111],[0,0],[0.141,0.03],[-0.048,-0.05],[-0.023,-0.005],[-0.191,0.038]],"v":[[-0.406,0.015],[0.166,0.276],[0.078,0.114],[0.401,0.026],[0.117,-0.121],[0.156,-0.276]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0.004,0.189],[-0.147,0.023],[0,0],[-0.035,-0.051],[0.095,0]],"o":[[-0.047,-0.007],[-0.002,-0.164],[0.035,-0.005],[0.141,0.037],[-0.101,0.092],[-0.007,0]],"v":[[0.242,0.329],[-0.445,0.015],[0.186,-0.324],[0.149,-0.156],[0.447,0.017],[0.161,0.167]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.029,23.217],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 285","np":6,"cix":2,"bm":0,"ix":285,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.002,0.145],[-0.159,0.025],[0,0],[-0.037,-0.051],[0.11,0.025],[0,0]],"o":[[-0.002,-0.141],[0,0],[0.141,0.032],[-0.1,0.065],[0,0],[-0.144,-0.023]],"v":[[-0.428,0.016],[0.187,-0.304],[0.12,-0.141],[0.43,0.03],[0.116,0.143],[0.203,0.304]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.031,23.215],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 286","np":4,"cix":2,"bm":0,"ix":286,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.035,-0.118],[-0.067,0],[-0.073,0.197],[-0.02,0.072],[0,0],[0.016,0.055],[0.058,0.051],[0.039,-0.071],[0,0]],"o":[[0.016,0.062],[0.058,0.193],[0.09,-0.015],[0.044,-0.119],[0,0],[0.016,-0.055],[-0.01,-0.037],[-0.025,0.023],[-0.048,0.092],[0.016,0.046]],"v":[[-0.303,-0.154],[-0.22,0.146],[-0.024,0.447],[0.204,0.145],[0.303,-0.182],[0.124,-0.078],[0.149,-0.269],[0.001,-0.442],[-0.112,-0.297],[-0.132,-0.129]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.007,0],[0.046,0.153],[0,0],[0,0],[-0.033,0.065],[-0.002,0.003],[-0.018,-0.067],[0.005,-0.033],[0,0],[0.061,-0.173],[0.124,-0.02]],"o":[[-0.115,0],[-0.05,-0.168],[-0.01,-0.041],[-0.005,-0.037],[0.057,-0.106],[0.044,0.016],[0.009,0.035],[0,0],[-0.012,0.053],[-0.055,0.152],[-0.005,-0.002]],"v":[[-0.026,0.491],[-0.264,0.159],[-0.358,-0.184],[-0.185,-0.156],[-0.153,-0.318],[-0.015,-0.491],[0.19,-0.281],[0.192,-0.17],[0.368,-0.272],[0.245,0.16],[-0.008,0.491]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.549,22.795],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 287","np":6,"cix":2,"bm":0,"ix":287,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.102,-0.016],[0.049,0.169],[0,0],[0,0],[-0.055,0.104],[0,0],[-0.016,-0.061],[0,0],[0,0],[0.063,-0.173]],"o":[[-0.102,0.016],[-0.05,-0.17],[0,0],[0,0],[0.055,-0.103],[0,0],[0.018,0.062],[0,0],[0,0],[-0.064,0.175]],"v":[[-0.01,0.462],[-0.242,0.148],[-0.336,-0.195],[-0.154,-0.126],[-0.133,-0.313],[0.001,-0.479],[0.17,-0.282],[0.161,-0.131],[0.336,-0.234],[0.225,0.146]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.55,22.799],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 288","np":4,"cix":2,"bm":0,"ix":288,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.049,0],[0,-0.049],[-0.048,0],[0,0.05]],"o":[[-0.049,0],[0,0.05],[0.048,0],[0.002,-0.051]],"v":[[0,-0.09],[-0.088,0],[0,0.09],[0.088,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.062,0],[0,0.062],[-0.062,0],[0,-0.062]],"o":[[-0.062,0],[0,-0.062],[0.062,0],[0,0.06]],"v":[[0,0.111],[-0.111,0],[0,-0.111],[0.111,0]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.547,21.384],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 289","np":6,"cix":2,"bm":0,"ix":289,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.057],[0.057,0],[0,-0.055],[-0.056,0]],"o":[[0,-0.055],[-0.054,0],[0,0.055],[0.057,0]],"v":[[0.101,0],[-0.001,-0.101],[-0.101,0],[-0.001,0.101]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.547,21.382],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 290","np":4,"cix":2,"bm":0,"ix":290,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.049,0],[0,-0.049],[-0.048,0],[0,0.05]],"o":[[-0.049,0],[0,0.05],[0.048,0],[0.002,-0.049]],"v":[[0,-0.09],[-0.088,0],[0,0.09],[0.088,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.062,0],[0,0.062],[-0.062,0],[0,-0.062]],"o":[[-0.062,0],[0,-0.062],[0.062,0],[0,0.062]],"v":[[0,0.111],[-0.111,0],[0,-0.111],[0.111,0]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.547,21.106],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 291","np":6,"cix":2,"bm":0,"ix":291,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.055],[0.057,0],[0,-0.057],[-0.056,0]],"o":[[0,-0.055],[-0.054,0],[0,0.055],[0.057,0]],"v":[[0.101,0],[-0.001,-0.101],[-0.101,0],[-0.001,0.101]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.547,21.106],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 292","np":4,"cix":2,"bm":0,"ix":292,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.058,0],[0,-0.058],[-0.058,0],[0,0.058]],"o":[[-0.058,0],[0,0.058],[0.058,0],[0,-0.058]],"v":[[0,-0.106],[-0.106,0],[0,0.106],[0.106,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.074,0],[0,0.072],[-0.072,0],[0,-0.072]],"o":[[-0.072,0],[0,-0.072],[0.072,0],[0,0.074]],"v":[[0,0.132],[-0.132,0],[0,-0.132],[0.132,0]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.548,21.647],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 293","np":6,"cix":2,"bm":0,"ix":293,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.065],[0.065,0],[0,-0.067],[-0.066,0]],"o":[[0,-0.065],[-0.066,0],[0,0.065],[0.063,0]],"v":[[0.119,0],[0,-0.12],[-0.119,0],[0,0.12]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.549,21.646],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 294","np":4,"cix":2,"bm":0,"ix":294,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.069,0],[0,-0.069],[-0.069,0],[0,0.069]],"o":[[-0.069,0],[0,0.069],[0.069,0],[0,-0.069]],"v":[[0,-0.126],[-0.125,-0.001],[0,0.125],[0.125,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.087,0],[0,0.087],[-0.087,0],[0,-0.086]],"o":[[-0.087,0],[0,-0.086],[0.087,0],[0,0.087]],"v":[[0,0.158],[-0.157,-0.001],[0,-0.158],[0.157,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.548,21.953],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 295","np":6,"cix":2,"bm":0,"ix":295,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.078],[0.077,0],[0,-0.078],[-0.078,0]],"o":[[0,-0.078],[-0.078,0],[0,0.078],[0.077,0]],"v":[[0.142,0],[0.001,-0.141],[-0.142,0],[0.001,0.141]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.548,21.952],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 296","np":4,"cix":2,"bm":0,"ix":296,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.088,0],[0,-0.091],[-0.088,0],[0,0.09]],"o":[[-0.088,0],[0,0.09],[0.088,0],[0,-0.091]],"v":[[0,-0.163],[-0.161,0.001],[0,0.162],[0.161,0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.111,0],[0,0.113],[-0.111,0],[0,-0.112]],"o":[[-0.111,0],[0,-0.112],[0.111,0],[0,0.113]],"v":[[0,0.204],[-0.201,0.001],[0,-0.204],[0.201,0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.547,22.321],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 297","np":6,"cix":2,"bm":0,"ix":297,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.101],[0.101,0],[0,-0.101],[-0.099,0]],"o":[[0,-0.101],[-0.101,0],[0,0.101],[0.101,0]],"v":[[0.181,0],[-0.001,-0.182],[-0.181,0],[-0.001,0.182]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.548,22.32],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 298","np":4,"cix":2,"bm":0,"ix":298,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0.019,0.316],[0.001,0.098],[0.043,0.09],[0.139,0],[0.02,-0.147],[0.007,-0.132],[0.035,-0.129]],"o":[[0,0],[0,0],[-0.018,-0.042],[-0.009,-0.122],[-0.006,-0.192],[-0.061,-0.125],[-0.161,0],[-0.019,0.147],[-0.007,0.168],[0,0]],"v":[[-0.436,0.459],[0.029,0.919],[0.441,0.481],[0.35,-0.032],[0.337,-0.36],[0.285,-0.782],[-0.001,-0.933],[-0.275,-0.712],[-0.305,-0.296],[-0.354,0.144]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[-0.007,0.166],[-0.022,0.15],[-0.179,0],[-0.07,-0.141],[-0.005,-0.198],[-0.007,-0.122],[0,0]],"o":[[-0.015,-0.014],[0,0],[0.033,-0.123],[0.005,-0.126],[0.021,-0.163],[0.146,0],[0.046,0.097],[0.002,0.095],[0.023,0.36],[-0.002,0.025]],"v":[[0.029,0.972],[-0.479,0.471],[-0.391,0.132],[-0.344,-0.299],[-0.312,-0.718],[-0.003,-0.972],[0.318,-0.801],[0.372,-0.364],[0.385,-0.036],[0.479,0.472]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.533,21.856],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 299","np":6,"cix":2,"bm":0,"ix":299,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.023,0.369],[0.067,0.14],[0.146,0],[0.023,-0.171],[0.061,-0.227],[0,0],[0,0],[0,0]],"o":[[-0.025,-0.369],[-0.064,-0.132],[-0.15,0],[-0.046,0.336],[-0.056,0.213],[0,0],[0,0],[0,0]],"v":[[0.363,-0.03],[0.298,-0.788],[-0.006,-0.948],[-0.296,-0.711],[-0.374,0.141],[-0.46,0.466],[0.026,0.948],[0.46,0.487]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.537,21.851],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 300","np":4,"cix":2,"bm":0,"ix":300,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,-0.053],[-0.053,0],[0,0],[0,0.053],[0.053,0]],"o":[[-0.053,0],[0,0.053],[0,0],[0.053,0],[0,-0.053],[0,0]],"v":[[-0.359,-0.096],[-0.454,-0.001],[-0.359,0.095],[0.356,0.095],[0.452,-0.001],[0.356,-0.096]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.073,0],[0,0],[0,0.073],[-0.073,0],[0,0],[0,-0.072]],"o":[[0,0],[-0.073,0],[0,-0.072],[0,0],[0.073,0],[0,0.073]],"v":[[0.358,0.13],[-0.357,0.13],[-0.489,-0.001],[-0.357,-0.13],[0.358,-0.13],[0.489,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.562,24.448],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 301","np":6,"cix":2,"bm":0,"ix":301,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.062,0],[0,0],[0,0.062],[-0.062,0],[0,0],[0,-0.062]],"o":[[0,0],[-0.062,0],[0,-0.062],[0,0],[0.062,0],[0,0.062]],"v":[[0.358,0.113],[-0.358,0.113],[-0.471,0],[-0.358,-0.113],[0.358,-0.113],[0.471,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.835294177485,0.011764706817,0.117647066303,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.562,24.447],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 302","np":4,"cix":2,"bm":0,"ix":302,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.005,0],[0.006,-0.032],[-0.019,-0.026],[-0.032,-0.004],[0,0],[-0.027,0.02],[-0.004,0.032],[0.067,0.009],[0,0]],"o":[[-0.102,0.046],[-0.005,0.044],[0.02,0.027],[0,0],[0.032,0.004],[0.026,-0.019],[0.01,-0.079],[0,0],[-0.004,-0.002]],"v":[[-0.365,-0.172],[-0.49,-0.064],[-0.467,0.038],[-0.385,0.086],[0.344,0.183],[0.436,0.158],[0.484,0.077],[0.38,-0.073],[-0.35,-0.17]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.079,0],[0,0],[0.027,0.036],[-0.005,0.042],[-0.084,-0.013],[0,0],[0.012,-0.088]],"o":[[-0.021,-0.002],[-0.042,-0.005],[-0.026,-0.033],[0.013,-0.099],[0,0],[0.086,0.01],[-0.009,0.092]],"v":[[0.363,0.22],[-0.389,0.121],[-0.495,0.059],[-0.527,-0.059],[-0.346,-0.207],[0.383,-0.11],[0.52,0.07]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.971,24.528],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 303","np":6,"cix":2,"bm":0,"ix":303,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.078,-0.011],[0,0],[-0.008,0.078],[0.078,0.011],[0,0],[0.009,-0.078]],"o":[[0,0],[0.078,0.011],[0.013,-0.088],[0,0],[-0.078,-0.011],[-0.012,0.09]],"v":[[-0.384,0.098],[0.344,0.195],[0.503,0.073],[0.383,-0.098],[-0.346,-0.195],[-0.505,-0.073]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.027450982262,0.505882352941,0.360784313725,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.97,24.532],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 304","np":4,"cix":2,"bm":0,"ix":304,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.053,0],[0,0],[-0.06,0.007],[0,0]],"o":[[-0.014,0],[-0.083,0.191],[0,0],[0.083,-0.185]],"v":[[0.325,-0.158],[-0.337,-0.07],[-0.307,0.156],[0.34,0.068]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.005,0],[0.011,0.073],[-0.023,0.03],[-0.037,0.005],[0,0],[-0.011,-0.072],[0.023,-0.03],[0.037,-0.003],[0,0]],"o":[[-0.071,0],[-0.007,-0.047],[0.023,-0.03],[0,0],[0.09,-0.001],[0.005,0.048],[-0.023,0.03],[0,0],[-0.007,0.002]],"v":[[-0.322,0.192],[-0.465,0.067],[-0.438,-0.05],[-0.344,-0.105],[0.305,-0.192],[0.467,-0.067],[0.441,0.049],[0.346,0.104],[-0.303,0.191]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.119,24.534],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 305","np":6,"cix":2,"bm":0,"ix":305,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.069,-0.009],[0,0],[0.009,0.069],[-0.069,0.009],[0,0],[-0.009,-0.069]],"o":[[0,0],[-0.069,0.008],[-0.01,-0.08],[0,0],[0.069,-0.008],[0.009,0.08]],"v":[[0.342,0.086],[-0.307,0.173],[-0.449,0.065],[-0.34,-0.086],[0.307,-0.173],[0.449,-0.065]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.027450982262,0.505882352941,0.360784313725,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.121,24.534],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 306","np":4,"cix":2,"bm":0,"ix":306,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.157,-0.021],[0,0],[0,0],[0.019,0.018]],"o":[[0,0],[0,0],[-0.067,-0.077],[-0.034,0.006]],"v":[[-0.258,-0.089],[0.055,0.137],[0.293,0.029],[0.136,-0.146]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.01,0],[-0.174,-0.205]],"o":[[-0.009,-0.007],[0.175,-0.025],[0.009,0],[0.016,0.017]],"v":[[0.049,0.179],[-0.351,-0.11],[0.14,-0.179],[0.335,0.026]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.18,24.77],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 307","np":6,"cix":2,"bm":0,"ix":307,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.01,0],[0,0],[0,0]],"o":[[0,0],[-0.011,0],[0,0],[0,0]],"v":[[0.312,0.039],[0.132,-0.161],[-0.312,-0.097],[0.042,0.161]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.835294177485,0.011764706817,0.117647066303,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.191,24.767],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 308","np":4,"cix":2,"bm":0,"ix":308,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.064,-0.076],[0,0],[0,0],[0.039,0.005]],"o":[[0,0],[0,0],[-0.169,-0.025],[-0.02,0.019]],"v":[[-0.315,0.033],[-0.057,0.15],[0.28,-0.096],[-0.147,-0.156]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.011,0],[-0.108,-0.016]],"o":[[-0.009,-0.005],[0.202,-0.236],[0.012,0],[0.042,0.005]],"v":[[-0.052,0.191],[-0.372,0.046],[-0.149,-0.191],[0.33,-0.123]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[96.911,24.751],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 309","np":6,"cix":2,"bm":0,"ix":309,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.012,0],[0,0],[0,0]],"o":[[0,0],[0.013,0],[0,0],[0,0]],"v":[[-0.335,0.041],[-0.142,-0.173],[0.335,-0.105],[-0.046,0.173]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.835294177485,0.011764706817,0.117647066303,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[96.903,24.748],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 310","np":4,"cix":2,"bm":0,"ix":310,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.542,-0.353],[-1.541,0.352]],"o":[[1.542,0.352],[-1.541,-0.353]],"v":[[-2.317,0.018],[2.327,0.018]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.802,0],[0.796,0.189],[-1.595,-0.378]],"o":[[-0.802,0],[1.594,-0.412],[-0.799,0.221]],"v":[[0.006,0.318],[-2.396,0.036],[2.41,0.002]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[-0.005,-0.035],[-0.03,-0.008],[-1.745,0.454],[0,0.028],[0.037,0.011],[1.745,-0.455]],"o":[[-0.007,0.053],[1.745,0.454],[0.037,-0.01],[0,-0.028],[-1.745,-0.455],[-0.03,0.008]],"v":[[-2.706,0.007],[-2.661,0.106],[2.671,0.106],[2.713,0.02],[2.671,-0.069],[-2.661,-0.069]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0.899,0],[0.874,0.228],[-0.013,0.053],[-0.05,0.012],[-1.751,-0.458],[0,-0.067],[0.044,-0.013]],"o":[[-0.899,0],[-0.05,-0.012],[-0.011,-0.055],[1.75,-0.458],[0.044,0.011],[0,0.065],[-0.877,0.226]],"v":[[0.006,0.483],[-2.668,0.14],[-2.737,0.02],[-2.668,-0.102],[2.682,-0.102],[2.75,0.02],[2.682,0.142]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.54,25.118],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 311","np":8,"cix":2,"bm":0,"ix":311,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.581,0.374],[-1.581,-0.374]],"o":[[1.583,-0.374],[-1.582,0.374]],"v":[[-2.393,0],[2.405,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0.053],[0.039,0.01],[1.757,-0.459],[-0.01,-0.044],[-0.041,-0.01],[-1.757,0.458]],"o":[[0,-0.051],[-1.755,-0.459],[-0.041,0.01],[-0.008,0.052],[1.756,0.458],[0.039,-0.01]],"v":[[2.732,0],[2.676,-0.103],[-2.665,-0.103],[-2.722,-0.004],[-2.665,0.104],[2.676,0.104]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.539,25.134],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 312","np":6,"cix":2,"bm":0,"ix":312,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.344,0],[0,0],[1.694,0],[0,0]],"o":[[1.6,0],[0,0],[-1.694,0],[0,0]],"v":[[-0.001,-0.374],[2.587,-0.025],[0.089,0.374],[-2.587,0.003]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.141176470588,0.141176470588,0.133333333333,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.53,25.132],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 313","np":4,"cix":2,"bm":0,"ix":313,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.996,0],[-0.97,-0.226],[-0.008,0.036],[0.037,0.009],[1.955,-0.456],[-0.036,0.009]],"o":[[0.996,0],[0.037,0.009],[0.008,-0.035],[-1.955,-0.456],[-0.041,0.113],[0.968,-0.226]],"v":[[-0.007,-0.052],[2.955,0.287],[3.035,0.239],[2.983,0.16],[-2.997,0.16],[-2.967,0.287]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.048,0],[1.932,-0.45],[0.013,0.054],[-1.962,-0.458],[0.014,-0.055]],"o":[[-1.955,-0.454],[-0.055,0.013],[2.04,-0.582],[0.057,0.014],[-0.011,0.047]],"v":[[2.969,0.326],[-2.96,0.322],[-3.084,0.247],[2.992,0.123],[3.07,0.247]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.553,24.235],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 314","np":6,"cix":2,"bm":0,"ix":314,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.046,0.011],[1.944,-0.454],[0.011,0.044],[-0.046,0.01],[-1.969,-0.46],[0.01,-0.044]],"o":[[-1.945,-0.454],[-0.046,0.011],[-0.011,-0.044],[1.969,-0.46],[0.046,0.01],[-0.011,0.044]],"v":[[2.958,0.305],[-2.955,0.305],[-3.058,0.243],[-2.994,0.143],[2.995,0.143],[3.059,0.243]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.545,24.234],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 315","np":4,"cix":2,"bm":0,"ix":315,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.072,0],[-0.019,-0.081],[-0.055,-0.032],[0.032,0.129]],"o":[[-0.12,0.11],[0.02,0.081],[0.162,-0.003],[-0.028,-0.115]],"v":[[-0.046,-0.225],[-0.154,0.047],[-0.035,0.228],[0.134,-0.025]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.011,0],[0.021,0.091],[-0.038,0.064],[-0.039,0.009],[-0.037,-0.152],[0.104,-0.024]],"o":[[-0.146,-0.064],[-0.023,-0.092],[0.023,-0.039],[0.104,-0.028],[0.039,0.153],[-0.012,0.002]],"v":[[0.026,0.289],[-0.194,0.059],[-0.17,-0.19],[-0.076,-0.262],[0.178,-0.034],[0.06,0.285]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[96.771,23.672],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 316","np":6,"cix":2,"bm":0,"ix":316,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.035,0.14],[-0.09,0.023],[-0.036,-0.14],[0.09,-0.023]],"o":[[-0.035,-0.14],[0.092,-0.023],[0.035,0.14],[-0.09,0.021]],"v":[[-0.165,0.042],[-0.064,-0.252],[0.165,-0.04],[0.064,0.255]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[96.761,23.683],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 317","np":4,"cix":2,"bm":0,"ix":317,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.014,0],[0.024,-0.055],[-0.061,-0.027],[-0.032,0.014],[-0.014,0.036],[0.061,0.026]],"o":[[-0.049,0],[-0.032,0.071],[0.029,0.012],[0.032,-0.016],[0.03,-0.07],[-0.013,-0.007]],"v":[[0.014,-0.128],[-0.111,-0.037],[-0.057,0.14],[0.037,0.135],[0.109,0.058],[0.055,-0.119]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.021,0],[-0.039,0.09],[-0.078,-0.033],[0.039,-0.09],[0.041,-0.019]],"o":[[-0.136,-0.046],[0.039,-0.09],[0.079,0.036],[-0.018,0.045],[-0.021,0.009]],"v":[[-0.014,0.186],[-0.143,-0.051],[0.071,-0.153],[0.143,0.074],[0.051,0.17]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[103.258,23.83],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 318","np":6,"cix":2,"bm":0,"ix":318,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.035,0.079],[0.071,0.03],[0.035,-0.08],[-0.07,-0.03]],"o":[[0.035,-0.081],[-0.07,-0.03],[-0.036,0.081],[0.069,0.03]],"v":[[0.128,0.055],[0.064,-0.146],[-0.127,-0.056],[-0.064,0.146]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.835294177485,0.011764706817,0.117647066303,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[103.257,23.84],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 319","np":4,"cix":2,"bm":0,"ix":319,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.106,-0.001],[-0.028,-0.002],[-0.028,0.049],[0.118,0.09],[0.042,0.03],[0,0],[0.094,-0.012],[0.014,-0.005],[-0.029,-0.022],[0,0]],"o":[[0.062,0.007],[0.031,0],[0.101,0.005],[0.034,-0.059],[-0.081,-0.062],[0,0],[-0.018,0.002],[-0.053,0.007],[0.028,0.041],[0.038,0.028],[0.039,0.007]],"v":[[-0.253,0.235],[0.031,0.255],[0.118,0.258],[0.322,0.217],[0.156,-0.074],[-0.053,-0.226],[-0.053,-0.08],[-0.262,-0.071],[-0.359,-0.048],[-0.249,0.088],[-0.165,0.124]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.074,0],[0,0],[0,0],[0.003,0.005],[-0.101,0.012],[-0.033,0],[0,0],[-0.115,-0.088],[0.047,-0.086]],"o":[[-0.316,-0.007],[-0.043,-0.006],[-0.109,-0.067],[0.005,-0.027],[0.072,-0.009],[0,0],[0.031,0.019],[0.124,0.095],[-0.032,0.053]],"v":[[0.193,0.298],[-0.302,0.268],[-0.209,0.15],[-0.403,-0.044],[-0.267,-0.109],[-0.091,-0.119],[-0.091,-0.298],[0.179,-0.105],[0.355,0.234]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.902,23.608],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 320","np":6,"cix":2,"bm":0,"ix":320,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.042,0.074],[0.116,0.09],[0,0],[0,0],[0.097,-0.011],[0,0],[-0.044,-0.031],[0,0],[0,0],[-0.154,-0.002]],"o":[[0.042,-0.074],[-0.117,-0.089],[0,0],[0,0],[-0.096,0.012],[0,0],[0.044,0.032],[0,0],[0,0],[0.154,0.001]],"v":[[0.341,0.206],[0.17,-0.107],[-0.069,-0.281],[-0.069,-0.12],[-0.261,-0.109],[-0.383,-0.072],[-0.258,0.083],[-0.166,0.124],[-0.297,0.23],[0.032,0.255]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.898,23.625],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 321","np":4,"cix":2,"bm":0,"ix":321,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.014,-0.034],[0,0],[-0.105,0.114],[-0.067,-0.018],[0.127,0.064],[0.004,-0.009],[0,0],[0.056,-0.098]],"o":[[0,0],[0.004,-0.038],[0.125,-0.138],[-0.009,-0.042],[-0.168,-0.083],[-0.035,0.064],[-0.03,0.023],[-0.08,0.13]],"v":[[-0.273,0.23],[-0.13,0.279],[0.003,0.053],[0.359,-0.041],[0.188,-0.231],[-0.093,-0.113],[-0.128,-0.253],[-0.269,-0.084]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.097,0.166],[-0.005,0.002],[0,0],[-0.14,-0.07],[0,-0.007],[0.141,-0.155],[0,0]],"o":[[-0.034,-0.01],[-0.007,-0.014],[0.095,-0.161],[0.027,-0.013],[0.051,-0.062],[0.194,0.097],[-0.034,0.014],[-0.14,0.154],[0,0]],"v":[[-0.082,0.333],[-0.3,0.261],[-0.303,-0.104],[-0.118,-0.304],[-0.091,-0.179],[0.204,-0.262],[0.4,-0.014],[0.031,0.079],[-0.091,0.301]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[103.527,23.498],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 322","np":6,"cix":2,"bm":0,"ix":322,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.152,-0.167],[0,0],[0,0],[-0.093,0.159],[0,0],[0,0],[-0.188,-0.092]],"o":[[0,0],[-0.154,0.168],[0,0],[0,0],[0.094,-0.157],[0,0],[0,0],[0.187,0.093]],"v":[[0.38,0.001],[0.015,0.08],[-0.112,0.322],[-0.289,0.262],[-0.289,-0.077],[-0.112,-0.271],[-0.112,-0.105],[0.194,-0.23]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[103.527,23.482],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 323","np":4,"cix":2,"bm":0,"ix":323,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.03,-0.072],[-0.06,0.027],[0.03,0.07],[0.06,-0.026]],"o":[[0.032,0.071],[0.06,-0.026],[-0.032,-0.071],[-0.06,0.025]],"v":[[-0.111,0.061],[0.055,0.142],[0.111,-0.034],[-0.056,-0.116]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.02,0],[0.03,0.069],[-0.078,0.035],[-0.039,-0.09],[0.079,-0.036]],"o":[[-0.063,0],[-0.038,-0.09],[0.081,-0.035],[0.039,0.09],[-0.018,0.007]],"v":[[0.015,0.186],[-0.145,0.075],[-0.072,-0.151],[0.144,-0.05],[0.072,0.176]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[95.846,23.826],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 324","np":6,"cix":2,"bm":0,"ix":324,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.035,0.079],[-0.071,0.03],[-0.035,-0.08],[0.07,-0.03]],"o":[[-0.035,-0.081],[0.07,-0.03],[0.036,0.079],[-0.071,0.03]],"v":[[-0.128,0.055],[-0.064,-0.146],[0.127,-0.056],[0.064,0.146]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.835294177485,0.011764706817,0.117647066303,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[95.848,23.838],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 325","np":4,"cix":2,"bm":0,"ix":325,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.074,0],[0,-0.074],[-0.074,0],[0,0.074]],"o":[[-0.074,0],[0,0.074],[0.074,0],[0,-0.074]],"v":[[0,-0.135],[-0.134,-0.001],[0,0.133],[0.134,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.095,0],[0,0.096],[-0.095,0],[0,-0.095]],"o":[[-0.094,0],[0,-0.093],[0.095,0],[0,0.094]],"v":[[0,0.172],[-0.171,-0.001],[0,-0.172],[0.171,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.472,23.399],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 326","np":6,"cix":2,"bm":0,"ix":326,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.083],[0.083,0],[0,-0.083],[-0.083,0]],"o":[[0,-0.085],[-0.085,0],[0,0.085],[0.083,0]],"v":[[0.152,0],[0,-0.152],[-0.152,0],[0,0.152]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.835294177485,0.011764706817,0.117647066303,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.473,23.398],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 327","np":4,"cix":2,"bm":0,"ix":327,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.032,0],[0.022,-0.074],[-0.025,-0.033],[-0.18,-0.015],[0,0],[-0.088,0.035],[-0.014,0.011],[0.086,-0.006],[0,0]],"o":[[-0.237,0],[-0.015,0.055],[0.079,0.11],[0,0],[0.019,-0.005],[0.05,-0.02],[-0.072,-0.065],[-0.041,0.003],[-0.033,-0.005]],"v":[[0.108,-0.244],[-0.357,-0.066],[-0.321,0.072],[0.12,0.282],[0.082,0.131],[0.281,0.07],[0.371,0.021],[0.14,-0.097],[0.205,-0.236]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0.092,0.126],[-0.014,0.055],[-0.301,-0.051],[0,0],[-0.07,-0.064],[0.093,-0.037],[0.032,-0.009]],"o":[[-0.224,-0.008],[-0.041,-0.056],[0.032,-0.11],[0.03,0.006],[0.091,0.009],[0.002,0.028],[-0.067,0.026],[0,0]],"v":[[0.166,0.32],[-0.353,0.093],[-0.394,-0.075],[0.239,-0.269],[0.172,-0.132],[0.406,0.007],[0.292,0.105],[0.124,0.16]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.879,23.463],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 328","np":6,"cix":2,"bm":0,"ix":328,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.028,-0.101],[-0.292,-0.011],[0,0],[-0.09,0.036],[0,0],[0.103,-0.007],[0,0]],"o":[[-0.048,0.168],[0,0],[0,0],[0.09,-0.035],[-0.08,-0.072],[0,0],[-0.292,-0.048]],"v":[[-0.362,-0.071],[0.156,0.3],[0.117,0.144],[0.3,0.085],[0.41,0.02],[0.15,-0.117],[0.251,-0.252]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.866,23.464],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 329","np":4,"cix":2,"bm":0,"ix":329,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.029,0.076],[0.028,0.05],[0.18,0.033],[0,0],[0.05,-0.036],[-0.09,-0.002]],"o":[[0.288,0.039],[0.015,-0.04],[-0.067,-0.114],[0,0],[-0.097,0.014],[0.067,0.072],[0.041,0]],"v":[[-0.223,0.251],[0.349,0.135],[0.329,-0.002],[-0.094,-0.253],[-0.069,-0.102],[-0.368,-0.019],[-0.147,0.12]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.221,0],[0.062,0.011],[0,0],[0.064,0.069],[-0.062,0.01],[0,0],[-0.077,-0.131],[0.019,-0.051]],"o":[[-0.061,0],[-0.033,-0.005],[-0.09,-0.018],[0.041,-0.079],[0,0],[0.227,0.033],[0.034,0.058],[-0.036,0.09]],"v":[[-0.075,0.298],[-0.262,0.282],[-0.184,0.152],[-0.405,-0.007],[-0.11,-0.132],[-0.136,-0.298],[0.364,-0.02],[0.385,0.148]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.082,23.269],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 330","np":6,"cix":2,"bm":0,"ix":330,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.037,0.099],[0.287,0.043],[0,0],[0.037,-0.049],[-0.103,-0.002],[0,0]],"o":[[0.062,-0.163],[0,0],[-0.06,0.009],[0.073,0.078],[0,0],[0.289,0.047]],"v":[[0.348,0.123],[-0.132,-0.294],[-0.108,-0.135],[-0.41,-0.038],[-0.164,0.121],[-0.277,0.247]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.1,23.286],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 331","np":4,"cix":2,"bm":0,"ix":331,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.138,-0.057],[-0.035,0.019],[-0.042,0.171],[0,0],[0.069,0.092],[0.021,-0.104]],"o":[[-0.039,0.27],[0.025,0.01],[0.108,-0.057],[0,0],[0.039,-0.155],[-0.157,0.106],[-0.007,0.027]],"v":[[-0.246,-0.182],[-0.078,0.378],[0.012,0.366],[0.282,-0.053],[0.12,-0.032],[0.075,-0.38],[-0.117,-0.133]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.023,0],[-0.051,0.303],[0,0],[-0.167,0.111],[0.019,-0.09],[0,0],[0.122,-0.065]],"o":[[-0.205,-0.076],[0.006,-0.029],[0.021,-0.095],[0.128,0.127],[0,0],[-0.041,0.213],[-0.028,0.014]],"v":[[-0.046,0.42],[-0.279,-0.217],[-0.15,-0.166],[0.068,-0.42],[0.171,-0.076],[0.329,-0.095],[0.031,0.399]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.549,22.997],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 332","np":6,"cix":2,"bm":0,"ix":332,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.159,-0.067],[-0.046,0.233],[0,0],[0.097,0.118],[0.023,-0.111],[0,0]],"o":[[0.138,0.057],[0,0],[0.028,-0.113],[-0.177,0.116],[0,0],[-0.048,0.277]],"v":[[-0.083,0.37],[0.307,-0.098],[0.146,-0.077],[0.079,-0.427],[-0.137,-0.16],[-0.258,-0.236]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.548,23.022],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 333","np":4,"cix":2,"bm":0,"ix":333,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.074,0],[0,-0.074],[-0.074,0],[0,0.074]],"o":[[-0.074,0],[0,0.074],[0.074,0],[0,-0.074]],"v":[[0,-0.135],[-0.134,-0.001],[0,0.133],[0.134,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.095,0],[0,0.096],[-0.095,0],[0,-0.095]],"o":[[-0.094,0],[0,-0.093],[0.094,0],[0,0.096]],"v":[[0,0.172],[-0.171,-0.001],[0,-0.172],[0.171,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.624,23.395],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 334","np":6,"cix":2,"bm":0,"ix":334,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.085],[-0.083,0],[0,-0.083],[0.083,0]],"o":[[0,-0.085],[0.085,0],[0,0.083],[-0.083,0]],"v":[[-0.152,0],[0,-0.152],[0.152,0],[0,0.152]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.835294177485,0.011764706817,0.117647066303,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.623,23.394],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 335","np":4,"cix":2,"bm":0,"ix":335,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.072,-0.065],[-0.051,-0.02],[0,0],[0,0],[-0.072,0.097],[0.016,0.057],[0.249,-0.033],[0,0]],"o":[[0.012,0.011],[0.088,0.035],[0.02,0.005],[0.192,-0.007],[0.027,-0.035],[-0.023,-0.081],[0,0],[-0.131,-0.008]],"v":[[-0.367,0.02],[-0.277,0.068],[-0.097,0.126],[-0.116,0.281],[0.321,0.08],[0.36,-0.067],[-0.201,-0.24],[-0.093,-0.097]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.191,0],[0,0],[0.069,0.027],[0.001,0.003],[-0.092,0.011],[0,0],[-0.031,-0.12],[0.045,-0.06]],"o":[[-0.023,0],[-0.032,-0.009],[-0.094,-0.037],[0.074,-0.089],[0,0],[0.283,-0.055],[0.016,0.056],[-0.096,0.127]],"v":[[-0.141,0.319],[-0.123,0.158],[-0.291,0.103],[-0.409,0.031],[-0.171,-0.134],[-0.268,-0.264],[0.393,-0.075],[0.348,0.103]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.216,23.461],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 336","np":6,"cix":2,"bm":0,"ix":336,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.028,-0.101],[0.29,0],[0,0],[0.09,0.036],[0,0],[-0.103,-0.007],[0,0]],"o":[[0.048,0.168],[0,0],[0,0],[-0.09,-0.035],[0.08,-0.071],[0,0],[0.262,-0.049]],"v":[[0.362,-0.07],[-0.156,0.301],[-0.117,0.144],[-0.3,0.085],[-0.41,0.02],[-0.15,-0.116],[-0.251,-0.252]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.231,23.462],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 337","np":4,"cix":2,"bm":0,"ix":337,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.069,-0.102],[-0.019,-0.049],[-0.229,0.065],[0,0],[-0.068,0.073],[0.08,0.012]],"o":[[-0.187,0.011],[-0.041,0.062],[0.03,0.081],[0,0],[0.129,-0.002],[-0.05,-0.033],[-0.021,-0.006]],"v":[[0.093,-0.269],[-0.313,-0.05],[-0.349,0.123],[0.227,0.245],[0.107,0.111],[0.369,-0.029],[0.089,-0.108]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.068,0],[0.032,0.083],[-0.048,0.073],[-0.21,0.006],[0,0],[-0.042,-0.055],[0.09,-0.017],[0,0]],"o":[[-0.207,0],[-0.023,-0.062],[0.076,-0.115],[0.021,0],[0.06,0.01],[-0.067,0.095],[0,0],[-0.089,0.035]],"v":[[0.067,0.3],[-0.384,0.134],[-0.345,-0.073],[0.114,-0.31],[0.111,-0.147],[0.407,-0.046],[0.185,0.137],[0.293,0.256]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.014,23.279],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 338","np":6,"cix":2,"bm":0,"ix":338,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.037,0.097],[-0.296,0.005],[0,0],[-0.037,-0.049],[0.103,-0.002],[0,0]],"o":[[-0.062,-0.163],[0,0],[0.06,0.009],[-0.073,0.078],[0,0],[-0.233,0.083]],"v":[[-0.348,0.105],[0.132,-0.312],[0.108,-0.153],[0.41,-0.056],[0.164,0.103],[0.277,0.229]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.996,23.302],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 339","np":4,"cix":2,"bm":0,"ix":339,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.094,-0.073],[-0.21,0.039],[0,0.007],[-0.256,0.037],[-0.001,0.003],[-0.267,-0.007],[0,0],[-0.321,-0.004],[0,0],[-0.286,-0.005],[0,0],[-0.299,-0.021],[0,0],[-0.249,-0.035],[0,0],[-0.092,-0.039],[-0.195,0.083],[-0.026,0.046],[0,0],[0.216,0],[0.006,0.055],[0.087,-0.045],[0.162,0.129],[-0.023,0.073],[0,0],[0.025,-0.065],[0.401,0.106],[-0.009,0.066],[0.046,-0.064],[0.314,0.124],[-0.009,0.088],[0,0],[0.022,-0.076],[0.277,0],[0.022,0.062],[0.134,-0.115],[0.164,0.111],[0,0.067],[0,0],[-0.002,-0.077],[0.291,-0.084],[0.028,0.052],[0.044,-0.083],[0.219,0.085],[0.042,0.062]],"o":[[0.023,0.037],[0.141,0.113],[0.223,-0.043],[0.029,-0.014],[0.253,-0.036],[0.03,-0.005],[0.267,0],[0.032,0],[0.327,0],[0.032,0],[0.288,0],[0.031,0.003],[0.298,0.021],[0.032,0.007],[0.249,0.035],[0.029,0.01],[0.097,0.039],[0.171,-0.074],[0,0],[-0.066,0.078],[-0.219,-0.03],[-0.076,0.007],[-0.116,0.06],[-0.149,-0.117],[0,0],[-0.004,0.051],[-0.002,0.004],[-0.302,-0.078],[-0.052,0.022],[-0.053,0.074],[-0.26,-0.102],[0,0],[0.002,0.049],[-0.024,0.088],[-0.3,-0.023],[-0.01,0.051],[-0.177,0.152],[-0.143,-0.099],[0,0],[0.014,0.035],[0.001,0.127],[-0.27,0.078],[-0.039,0.036],[-0.074,0.143],[-0.198,-0.074],[0,0]],"v":[[-3.606,0.089],[-3.401,0.335],[-2.898,0.529],[-2.665,0.317],[-2.202,0.356],[-1.833,0.068],[-1.31,0.239],[-0.921,0.027],[-0.471,0.176],[0.002,-0.059],[0.511,0.179],[0.923,0.024],[1.363,0.234],[1.839,0.055],[2.256,0.352],[2.685,0.282],[2.869,0.492],[3.297,0.428],[3.616,0.117],[3.567,0.041],[3.042,0.396],[2.791,0.091],[2.581,0.206],[2.071,0.114],[2.02,-0.353],[1.866,-0.407],[1.829,-0.178],[1.278,0.096],[0.992,-0.284],[0.877,-0.126],[0.305,-0.01],[0.07,-0.536],[-0.042,-0.536],[-0.058,-0.285],[-0.492,0.04],[-0.92,-0.291],[-1.059,-0.008],[-1.67,-0.006],[-1.827,-0.365],[-1.972,-0.338],[-1.933,-0.155],[-2.253,0.237],[-2.696,0.048],[-2.765,0.232],[-3.177,0.313],[-3.549,0.008]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.028,0],[0.095,0.076],[0.005,0.009],[0,0],[-0.226,-0.087],[-0.054,0.105],[0,0],[0,0],[-0.274,0.08],[0.002,0.075],[0,0],[0,0],[-0.154,-0.108],[-0.163,0.139],[0.004,0.005],[0,0],[-0.271,-0.022],[-0.023,0.079],[0,0],[0,0],[-0.27,-0.106],[-0.045,0.063],[0,0],[0,0],[-0.314,-0.081],[-0.039,0],[-0.002,0.003],[0,0],[0,0],[-0.147,-0.116],[-0.104,0.055],[0,0],[0,0],[-0.177,-0.026],[-0.002,0.003],[0,0],[0.207,-0.088],[0.11,0.046],[0.021,0.047],[0.22,0.032],[0.04,0.067],[0.237,0],[0.039,0.053],[0.236,0],[0.053,0.059],[0.282,0],[0.04,0.046],[0.224,0],[0.06,0.043],[0.233,-0.032],[0.056,0.024],[0.196,-0.037]],"o":[[-0.184,0],[-0.143,-0.113],[-0.005,-0.011],[0.015,0.027],[0.229,0.086],[0.055,-0.104],[-0.023,-0.031],[0.011,0.021],[0.298,-0.086],[-0.002,-0.098],[-0.011,-0.022],[-0.002,0.027],[0.152,0.106],[0.154,-0.131],[-0.008,-0.025],[0.005,0.016],[0.289,0.001],[0.025,-0.087],[-0.002,-0.019],[-0.004,0.024],[0.292,0.113],[0.057,-0.08],[0.001,-0.023],[-0.007,0.028],[0.044,0.012],[0.275,0],[0.03,-0.078],[0,-0.027],[-0.007,0.021],[0.15,0.12],[0.1,-0.051],[0.008,-0.016],[0,0.016],[0.259,0.002],[0.016,-0.022],[-0.011,0.02],[-0.207,0.089],[-0.086,-0.035],[-0.053,0.028],[-0.227,-0.032],[-0.05,0.049],[-0.311,-0.021],[-0.044,0.044],[-0.272,-0.005],[-0.044,0.062],[-0.283,-0.004],[-0.041,0.058],[-0.253,-0.005],[-0.034,0.064],[-0.215,0.03],[-0.013,0.056],[-0.02,0.007]],"v":[[-2.979,0.573],[-3.394,0.387],[-3.645,0.098],[-3.549,-0.058],[-3.166,0.28],[-2.801,0.214],[-2.799,0.04],[-2.677,0.011],[-2.267,0.2],[-1.974,-0.157],[-2.02,-0.346],[-1.792,-0.411],[-1.654,-0.038],[-1.089,-0.036],[-0.987,-0.303],[-0.898,-0.328],[-0.534,0.001],[-0.1,-0.296],[-0.086,-0.554],[0.107,-0.573],[0.313,-0.045],[0.841,-0.149],[0.909,-0.324],[1.029,-0.308],[1.281,0.061],[1.407,0.078],[1.788,-0.19],[1.824,-0.432],[2.058,-0.374],[2.085,0.087],[2.555,0.174],[2.7,0.04],[2.818,0.066],[3.002,0.359],[3.544,0.001],[3.65,0.117],[3.3,0.463],[2.844,0.527],[2.675,0.326],[2.239,0.391],[1.838,0.1],[1.398,0.274],[0.924,0.066],[0.515,0.216],[0.011,-0.021],[-0.469,0.213],[-0.914,0.066],[-1.308,0.274],[-1.82,0.101],[-2.209,0.391],[-2.643,0.342],[-2.901,0.562]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.533,23.838],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 340","np":6,"cix":2,"bm":0,"ix":340,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.237,-0.089],[-0.06,0.119],[0,0],[0,0],[-0.293,0.085],[0.002,0.104],[0,0],[0,0],[-0.166,-0.115],[-0.166,0.141],[0,0],[-0.288,-0.023],[-0.026,0.09],[0,0],[0,0],[-0.288,-0.114],[-0.058,0.083],[0,0],[-0.337,-0.088],[-0.03,0.081],[0,0],[0,0],[-0.159,-0.125],[-0.109,0.056],[0,0],[0,0],[-0.195,-0.03],[0,0],[0,0],[0.203,-0.089],[0.101,0.041],[0,0],[0.261,0.039],[0,0],[0.312,0.023],[0,0],[0.299,0.006],[0,0],[0.339,0.005],[0,0],[0.278,0.007],[0,0],[0.265,-0.037],[0,0],[0.24,-0.044],[0.111,0.088],[0,0]],"o":[[0,0],[0.235,0.088],[0.062,-0.116],[0,0],[0,0],[0.293,-0.085],[-0.001,-0.105],[0,0],[0,0],[0.166,0.115],[0.166,-0.141],[0.058,0],[0.288,0.023],[0.027,-0.09],[0,0],[0,0],[0.287,0.113],[0.058,-0.083],[0.079,0.025],[0.337,0.087],[0.032,-0.081],[0,0],[0,0],[0.159,0.126],[0.108,-0.057],[0,0],[0,0],[0.245,0.039],[0,0],[0,0],[-0.203,0.086],[-0.101,-0.042],[0,0],[-0.262,-0.038],[0,0],[-0.313,-0.023],[0,0],[-0.298,-0.005],[0,0],[-0.339,-0.005],[0,0],[-0.277,-0.007],[0,0],[-0.265,0.037],[0,0],[-0.24,0.046],[-0.112,-0.087],[0,0]],"v":[[-3.558,-0.043],[-3.178,0.28],[-2.79,0.204],[-2.79,0.009],[-2.694,0.01],[-2.267,0.199],[-1.96,-0.174],[-2.007,-0.372],[-1.816,-0.406],[-1.668,-0.04],[-1.08,-0.04],[-0.972,-0.327],[-0.538,0.001],[-0.084,-0.31],[-0.07,-0.573],[0.084,-0.573],[0.307,-0.046],[0.856,-0.155],[0.927,-0.34],[1.278,0.061],[1.806,-0.202],[1.843,-0.451],[2.038,-0.379],[2.076,0.085],[2.567,0.173],[2.721,0.03],[2.804,0.061],[3.004,0.361],[3.564,-0.005],[3.634,0.1],[3.299,0.43],[2.857,0.495],[2.689,0.283],[2.248,0.354],[1.849,0.052],[1.356,0.237],[0.932,0.02],[0.506,0.182],[0.013,-0.065],[-0.478,0.178],[-0.912,0.02],[-1.317,0.241],[-1.824,0.059],[-2.207,0.357],[-2.654,0.298],[-2.901,0.526],[-3.418,0.328],[-3.634,0.069]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.541,23.858],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 341","np":4,"cix":2,"bm":0,"ix":341,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.104,-0.066],[-0.035,0.016],[0.051,0.253],[0,0],[0.086,0.072],[-0.042,-0.15]],"o":[[0.021,0.164],[0.03,0.017],[0.147,-0.06],[0,0],[-0.005,-0.127],[-0.032,0.046],[0.009,0.026]],"v":[[-0.292,-0.062],[-0.042,0.348],[0.067,0.369],[0.238,-0.193],[0.081,-0.096],[-0.109,-0.378],[-0.137,-0.067]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.016,0],[0.036,0.021],[0.015,0.185],[0,0],[-0.03,0.055],[-0.021,-0.097],[0,0],[0.17,-0.071]],"o":[[-0.03,0],[-0.12,-0.074],[-0.001,-0.023],[-0.035,-0.152],[0.143,0.071],[0,0],[0.072,0.308],[-0.012,0.007]],"v":[[0.037,0.41],[-0.062,0.378],[-0.333,-0.083],[-0.18,-0.087],[-0.145,-0.41],[0.113,-0.161],[0.262,-0.255],[0.081,0.401]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.554,23.005],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 342","np":6,"cix":2,"bm":0,"ix":342,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.157,-0.065],[0.017,0.231],[0,0],[0.047,-0.067],[-0.007,-0.114],[0,0]],"o":[[-0.138,0.058],[0,0],[-0.074,-0.252],[0.092,0.078],[0,0],[0.061,0.274]],"v":[[0.076,0.402],[-0.314,-0.066],[-0.154,-0.045],[-0.118,-0.393],[0.101,-0.108],[0.253,-0.204]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.554,22.988],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 343","np":4,"cix":2,"bm":0,"ix":343,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.021,-0.035],[-0.237,0.118],[0,0],[-0.053,0.081],[0.082,0],[0,0],[0.048,-0.127]],"o":[[0.042,0.074],[0,0],[0.127,-0.023],[-0.051,-0.025],[-0.03,0],[-0.167,0.06],[-0.019,0.052]],"v":[[-0.33,0.177],[0.258,0.207],[0.117,0.092],[0.352,-0.086],[0.074,-0.121],[0.044,-0.275],[-0.333,0.046]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.108,0],[0.034,0.06],[-0.023,0.06],[-0.186,0.06],[0,0],[-0.05,-0.046],[0.086,-0.031],[0,0]],"o":[[-0.163,0],[-0.026,-0.046],[0.055,-0.141],[0.025,-0.007],[0.061,0.002],[-0.05,0.104],[0,0],[-0.126,0.072]],"v":[[-0.027,0.308],[-0.365,0.196],[-0.367,0.034],[0.057,-0.318],[0.081,-0.157],[0.391,-0.104],[0.2,0.113],[0.324,0.214]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[96.214,23.645],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 344","np":6,"cix":2,"bm":0,"ix":344,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.053,0.09],[-0.258,0.081],[0,0],[-0.044,-0.042],[0.101,-0.019],[0,0]],"o":[[-0.087,-0.152],[0,0],[0.062,0],[-0.058,0.088],[0,0],[-0.242,0.14]],"v":[[-0.318,0.162],[0.091,-0.325],[0.091,-0.165],[0.406,-0.117],[0.188,0.079],[0.319,0.185]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[96.185,23.67],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 345","np":4,"cix":2,"bm":0,"ix":345,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.035,0],[-0.064,-0.041],[-0.02,-0.12],[0,0],[0.033,0.097],[0.069,0.041],[0,0],[0.104,-0.028],[0.014,-0.087]],"o":[[0.067,0],[0.115,0.071],[0,0],[0.044,-0.086],[-0.03,-0.088],[0,0],[-0.096,-0.174],[-0.099,0.027],[0.033,-0.013]],"v":[[-0.236,-0.091],[-0.038,-0.031],[0.181,0.285],[0.294,0.2],[0.31,-0.084],[0.151,-0.289],[0.151,-0.08],[-0.144,-0.273],[-0.338,-0.073]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0.113,0.071],[0.096,-0.037],[-0.125,0.034],[-0.067,-0.086],[0,0],[-0.038,-0.107],[0.05,-0.095]],"o":[[-0.009,-0.152],[-0.093,-0.06],[-0.026,-0.132],[0.103,-0.028],[0,0],[0.115,0.051],[0.037,0.11],[-0.003,0.011]],"v":[[0.149,0.354],[-0.058,-0.001],[-0.353,-0.033],[-0.155,-0.314],[0.112,-0.22],[0.112,-0.354],[0.342,-0.102],[0.322,0.216]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[95.556,23.533],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 346","np":6,"cix":2,"bm":0,"ix":346,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.002,-0.201],[-0.013,-0.215],[0,0],[0.157,0.071],[0,0]],"o":[[0.258,-0.108],[0,0],[0.111,-0.212],[0,0],[-0.157,-0.29]],"v":[[-0.388,0.014],[0.137,0.382],[0.28,0.275],[0.103,-0.259],[0.103,-0.091]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[95.585,23.469],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 347","np":4,"cix":2,"bm":0,"ix":347,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.355,-0.313],[0,0],[0.229,0.377],[0.761,-0.392],[0,0],[-0.309,-0.397]],"o":[[0,0],[0.415,-0.295],[-0.318,-0.524],[0,0],[0.523,-0.346],[0.246,0.314]],"v":[[0.298,0.792],[0.545,0.947],[0.844,-0.125],[-1.083,-0.552],[-1.083,-0.43],[0.471,-0.206]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0.237,0.304],[0.507,-0.362],[0,0],[-0.328,-0.54],[0.443,-0.309]],"o":[[-0.011,-0.007],[0.373,-0.317],[-0.306,-0.392],[-0.029,0.021],[0.79,-0.415],[0.242,0.399],[0,0]],"v":[[0.547,0.992],[0.236,0.796],[0.443,-0.185],[-1.09,-0.381],[-1.119,-0.577],[0.877,-0.146],[0.558,0.983]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.963,21.706],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 348","np":6,"cix":2,"bm":0,"ix":348,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.316,-0.687],[0,0],[0.996,-0.847],[0,0]],"o":[[0,0],[0.896,-0.64],[0,0],[1.199,-0.833]],"v":[[-1.423,-0.422],[-1.423,-0.254],[-0.056,0.935],[0.224,1.109]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.284,21.564],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 349","np":4,"cix":2,"bm":0,"ix":349,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.081,0],[0,-0.081],[-0.081,0],[0,0.082]],"o":[[-0.081,0],[0,0.082],[0.081,0],[0,-0.081]],"v":[[0,-0.147],[-0.147,0.001],[0,0.151],[0.147,0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.101,0],[0,0.102],[-0.101,0],[0,-0.103]],"o":[[-0.102,0],[0,-0.103],[0.101,0],[0,0.102]],"v":[[0,0.185],[-0.184,0],[0,-0.185],[0.184,0]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.068,20.949],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 350","np":6,"cix":2,"bm":0,"ix":350,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.092,0],[0,0.092],[0.092,0],[0,-0.092]],"o":[[0.092,0],[0,-0.092],[-0.092,0],[0,0.092]],"v":[[0,0.166],[0.166,0],[0,-0.166],[-0.166,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.066,20.951],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 351","np":4,"cix":2,"bm":0,"ix":351,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.081,0],[0,-0.081],[-0.081,0],[0,0.082]],"o":[[-0.081,0],[0,0.082],[0.081,0],[0,-0.081]],"v":[[0,-0.149],[-0.147,-0.001],[0,0.149],[0.147,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.101,0],[0,0.103],[-0.101,0],[0,-0.102]],"o":[[-0.101,0],[0,-0.102],[0.101,0],[0,0.103]],"v":[[0,0.186],[-0.184,-0.001],[0,-0.186],[0.184,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.353,20.877],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 352","np":6,"cix":2,"bm":0,"ix":352,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.092,0],[0,0.092],[0.092,0],[0,-0.092]],"o":[[0.092,0],[0,-0.092],[-0.092,0],[0,0.092]],"v":[[0,0.166],[0.166,0],[0,-0.166],[-0.166,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.352,20.876],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 353","np":4,"cix":2,"bm":0,"ix":353,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.081,0],[0,-0.081],[-0.081,0],[0,0.082]],"o":[[-0.081,0],[0,0.082],[0.081,0],[0,-0.081]],"v":[[0,-0.149],[-0.147,-0.001],[0,0.149],[0.147,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.101,0],[0,0.103],[-0.101,0],[0,-0.102]],"o":[[-0.101,0],[0,-0.102],[0.101,0],[0,0.103]],"v":[[0,0.186],[-0.184,-0.001],[0,-0.186],[0.184,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.635,20.877],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 354","np":6,"cix":2,"bm":0,"ix":354,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.092],[0.092,0],[0,-0.092],[-0.092,0]],"o":[[0,-0.092],[-0.092,0],[0,0.092],[0.092,0]],"v":[[0.166,0],[0,-0.166],[-0.166,0],[0,0.166]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.635,20.876],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 355","np":4,"cix":2,"bm":0,"ix":355,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.081,0],[0,-0.081],[-0.081,0],[0,0.082]],"o":[[-0.081,0],[0,0.082],[0.081,0],[0,-0.081]],"v":[[0,-0.147],[-0.147,0.001],[0,0.151],[0.147,0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.101,0],[0,0.102],[-0.101,0],[0,-0.103]],"o":[[-0.101,0],[0,-0.103],[0.101,0],[0,0.102]],"v":[[0,0.185],[-0.184,0],[0,-0.185],[0.184,0]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.929,20.904],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 356","np":6,"cix":2,"bm":0,"ix":356,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.092,0],[0,0.092],[0.092,0],[0,-0.092]],"o":[[0.092,0],[0,-0.092],[-0.092,0],[0,0.092]],"v":[[0,0.166],[0.166,0],[0,-0.166],[-0.166,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.928,20.904],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 357","np":4,"cix":2,"bm":0,"ix":357,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.081,0],[0,-0.081],[-0.081,0],[0,0.082]],"o":[[-0.081,0],[0,0.082],[0.081,0],[0.001,-0.083]],"v":[[0,-0.147],[-0.147,0.001],[0,0.151],[0.147,0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.102,0],[0,0.102],[-0.101,0],[0,-0.103]],"o":[[-0.101,0],[0,-0.103],[0.101,0],[0,0.102]],"v":[[0,0.185],[-0.184,0],[0,-0.185],[0.184,0]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.18,20.973],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 358","np":6,"cix":2,"bm":0,"ix":358,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.092],[0.092,0],[0,-0.092],[-0.092,0]],"o":[[0,-0.092],[-0.092,0],[0,0.092],[0.092,0]],"v":[[0.166,0],[0,-0.166],[-0.166,0],[0,0.166]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.18,20.973],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 359","np":4,"cix":2,"bm":0,"ix":359,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.081,0],[0,-0.081],[-0.081,0],[0,0.082]],"o":[[-0.081,0],[0,0.082],[0.081,0],[0,-0.081]],"v":[[0,-0.149],[-0.147,-0.001],[0,0.149],[0.147,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.102,0],[0,0.103],[-0.101,0],[0,-0.102]],"o":[[-0.101,0],[0,-0.102],[0.101,0],[0,0.103]],"v":[[0,0.186],[-0.184,-0.001],[0,-0.186],[0.184,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.42,21.117],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 360","np":6,"cix":2,"bm":0,"ix":360,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.092,0],[0,0.092],[0.092,0],[0,-0.092]],"o":[[0.092,0],[0,-0.092],[-0.092,0],[0,0.092]],"v":[[0,0.166],[0.166,0],[0,-0.166],[-0.166,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.42,21.116],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 361","np":4,"cix":2,"bm":0,"ix":361,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.081,0],[0,-0.081],[-0.081,0],[0,0.082]],"o":[[-0.081,0],[0,0.082],[0.081,0],[0,-0.081]],"v":[[0,-0.149],[-0.147,-0.001],[0,0.149],[0.147,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.101,0],[0,0.103],[-0.101,0],[0,-0.102]],"o":[[-0.101,0],[0,-0.102],[0.101,0],[0,0.103]],"v":[[0,0.186],[-0.184,-0.001],[0,-0.186],[0.184,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.643,21.296],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 362","np":6,"cix":2,"bm":0,"ix":362,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.092],[0.092,0],[0,-0.092],[-0.092,0]],"o":[[0,-0.092],[-0.092,0],[0,0.092],[0.092,0]],"v":[[0.166,0],[0,-0.166],[-0.166,0],[0,0.166]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.642,21.296],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 363","np":4,"cix":2,"bm":0,"ix":363,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.079,0],[0,-0.081],[-0.081,0],[0,0.082]],"o":[[-0.081,0],[0,0.082],[0.081,0],[0,-0.083]],"v":[[0,-0.149],[-0.147,-0.001],[0,0.149],[0.147,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.101,0],[0,0.103],[-0.101,0],[0,-0.102]],"o":[[-0.101,0],[0,-0.102],[0.101,0],[0,0.103]],"v":[[0,0.186],[-0.184,-0.001],[0,-0.186],[0.184,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.855,21.494],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 364","np":6,"cix":2,"bm":0,"ix":364,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.092,0],[0,0.092],[0.092,0],[0,-0.092]],"o":[[0.092,0],[0,-0.092],[-0.092,0],[0,0.092]],"v":[[0,0.166],[0.166,0],[0,-0.166],[-0.166,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.853,21.494],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 365","np":4,"cix":2,"bm":0,"ix":365,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.081,0],[0,-0.081],[-0.081,0],[0,0.082]],"o":[[-0.081,0],[0,0.082],[0.081,0],[0,-0.081]],"v":[[0,-0.147],[-0.147,0.001],[0,0.151],[0.147,0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.102,0],[0,0.102],[-0.101,0],[0,-0.103]],"o":[[-0.101,0],[0,-0.103],[0.101,0],[0,0.102]],"v":[[0,0.185],[-0.184,0],[0,-0.185],[0.184,0]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.005,21.76],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 366","np":6,"cix":2,"bm":0,"ix":366,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.092,0],[0,0.092],[0.092,0],[0,-0.092]],"o":[[0.092,0],[0,-0.092],[-0.092,0],[0,0.092]],"v":[[0,0.166],[0.166,0],[0,-0.166],[-0.166,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.005,21.761],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 367","np":4,"cix":2,"bm":0,"ix":367,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.079,0],[0,-0.081],[-0.081,0],[0,0.082]],"o":[[-0.081,0],[0,0.082],[0.081,0],[0,-0.081]],"v":[[0,-0.149],[-0.147,-0.001],[0,0.149],[0.147,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.101,0],[0,0.103],[-0.101,0],[0,-0.102]],"o":[[-0.101,0],[0,-0.102],[0.101,0],[0,0.103]],"v":[[0,0.186],[-0.184,-0.001],[0,-0.186],[0.184,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.991,22.041],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 368","np":6,"cix":2,"bm":0,"ix":368,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.094],[0.092,0],[0,-0.092],[-0.092,0]],"o":[[0,-0.092],[-0.092,0],[0,0.092],[0.092,0.002]],"v":[[0.166,-0.001],[0,-0.167],[-0.166,-0.001],[0,0.165]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.989,22.042],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 369","np":4,"cix":2,"bm":0,"ix":369,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.081,0],[0,-0.081],[-0.081,0],[0,0.082]],"o":[[-0.081,0],[0,0.082],[0.081,0],[0,-0.083]],"v":[[0,-0.149],[-0.147,-0.001],[0,0.149],[0.147,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.101,0],[0,0.103],[-0.101,0],[0,-0.102]],"o":[[-0.101,0],[0,-0.102],[0.101,0],[0,0.103]],"v":[[0,0.186],[-0.184,-0.001],[0,-0.186],[0.184,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.941,22.335],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 370","np":6,"cix":2,"bm":0,"ix":370,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.092],[0.092,0],[0,-0.092],[-0.092,0]],"o":[[0,-0.092],[-0.092,0],[0,0.092],[0.092,0]],"v":[[0.166,0],[0,-0.166],[-0.166,0],[0,0.166]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.941,22.334],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 371","np":4,"cix":2,"bm":0,"ix":371,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.081,0],[0,-0.081],[-0.081,0],[0,0.082]],"o":[[-0.081,0],[0,0.082],[0.081,0],[0,-0.081]],"v":[[0,-0.149],[-0.147,-0.001],[0,0.149],[0.147,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.101,0],[0,0.103],[-0.101,0],[0,-0.102]],"o":[[-0.101,0],[0,-0.102],[0.101,0],[0,0.103]],"v":[[0,0.186],[-0.184,-0.001],[0,-0.186],[0.184,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.772,22.552],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 372","np":6,"cix":2,"bm":0,"ix":372,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.094],[0.092,0],[0,-0.092],[-0.092,0]],"o":[[0,-0.092],[-0.092,0],[0,0.092],[0.092,0.002]],"v":[[0.166,-0.001],[0,-0.167],[-0.166,-0.001],[0,0.165]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.772,22.552],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 373","np":4,"cix":2,"bm":0,"ix":373,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.276,-0.249],[0,0],[0.207,0.363],[0.816,-0.284],[0,0],[-0.201,-0.392]],"o":[[0,0],[0.327,-0.272],[-0.321,-0.569],[0,0],[0.858,-0.198],[0.154,0.302]],"v":[[0.404,0.805],[0.743,0.999],[0.932,0.001],[-1.13,-0.713],[-1.07,-0.596],[0.598,-0.072]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0.15,0.291],[0.848,-0.201],[0,0],[-0.332,-0.587],[0.352,-0.286]],"o":[[-0.011,-0.005],[0.296,-0.258],[-0.196,-0.382],[-0.014,0.004],[0.858,-0.311],[0.219,0.387],[0,0]],"v":[[0.745,1.044],[0.339,0.813],[0.562,-0.054],[-1.077,-0.557],[-1.183,-0.732],[0.964,-0.018],[0.755,1.038]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.887,22.189],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 374","np":6,"cix":2,"bm":0,"ix":374,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.339,-0.487],[0,0],[0.747,-0.645],[0,0]],"o":[[0,0],[1.399,-0.33],[0,0],[1.013,-0.823]],"v":[[-1.457,-0.629],[-1.381,-0.481],[0.071,0.904],[0.444,1.116]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[103.187,22.095],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 375","np":4,"cix":2,"bm":0,"ix":375,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.249,0],[0.224,-0.353],[-0.422,-0.302],[0,0],[-0.234,0.306],[-0.553,-0.358],[0,0]],"o":[[-0.512,0],[-0.237,0.374],[0,0],[-0.347,-0.304],[0.31,-0.404],[0,0],[-0.237,-0.133]],"v":[[0.361,-0.728],[-0.859,-0.129],[-0.562,0.948],[-0.339,0.772],[-0.52,-0.202],[1.091,-0.421],[1.104,-0.537]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[-0.251,0.396],[-0.763,-0.434],[0,0],[0.303,-0.397],[-0.35,-0.299]],"o":[[-0.463,-0.323],[0.344,-0.544],[0.01,0.005],[-0.565,-0.386],[-0.228,0.299],[0.018,0.012]],"v":[[-0.56,0.996],[-0.892,-0.147],[1.132,-0.562],[1.121,-0.354],[-0.491,-0.177],[-0.299,0.761]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.115,21.703],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 376","np":6,"cix":2,"bm":0,"ix":376,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.247,-0.873],[0,0],[-0.938,-0.645],[0,0]],"o":[[0,0],[-0.989,-0.84],[0,0],[-1.266,-0.721]],"v":[[-0.218,1.12],[0.033,0.92],[1.449,-0.24],[1.465,-0.399]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.773,21.555],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 377","np":4,"cix":2,"bm":0,"ix":377,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.079,0],[0,-0.081],[-0.081,0],[0,0.082]],"o":[[-0.081,0],[0,0.082],[0.079,0],[0,-0.081]],"v":[[0,-0.147],[-0.147,0.001],[0,0.151],[0.145,0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.101,0],[0,0.102],[-0.102,0],[0,-0.103]],"o":[[-0.101,0],[0,-0.103],[0.101,0],[0,0.102]],"v":[[0,0.185],[-0.184,0],[0,-0.185],[0.184,0]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.017,20.949],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 378","np":6,"cix":2,"bm":0,"ix":378,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.092,0],[0,0.092],[0.092,0],[0,-0.092]],"o":[[0.092,0],[0,-0.092],[-0.092,0],[0,0.092]],"v":[[0,0.166],[0.166,0],[0,-0.166],[-0.166,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.017,20.951],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 379","np":4,"cix":2,"bm":0,"ix":379,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.079,0],[0,-0.081],[-0.081,0],[0,0.082]],"o":[[-0.081,0],[0,0.082],[0.081,0],[0,-0.081]],"v":[[0,-0.149],[-0.147,-0.001],[0,0.149],[0.147,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.101,0],[0,0.103],[-0.102,0],[0,-0.102]],"o":[[-0.101,0],[0,-0.102],[0.101,0],[0,0.103]],"v":[[0,0.186],[-0.184,-0.001],[0,-0.186],[0.184,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.735,20.877],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 380","np":6,"cix":2,"bm":0,"ix":380,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.092],[-0.09,0],[0,-0.092],[0.09,0]],"o":[[0,-0.092],[0.09,0],[0,0.092],[-0.09,0]],"v":[[-0.165,0],[-0.001,-0.166],[0.165,0],[-0.001,0.166]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.733,20.876],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 381","np":4,"cix":2,"bm":0,"ix":381,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.081,0],[0,-0.081],[-0.081,0],[0,0.082]],"o":[[-0.081,0],[0,0.082],[0.081,0],[0,-0.081]],"v":[[0,-0.149],[-0.147,-0.001],[0,0.149],[0.147,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.101,0],[0,0.103],[-0.101,0],[0,-0.102]],"o":[[-0.101,0],[0,-0.102],[0.101,0],[0,0.103]],"v":[[0,0.186],[-0.184,-0.001],[0,-0.186],[0.184,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.453,20.877],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 382","np":6,"cix":2,"bm":0,"ix":382,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.092],[-0.09,0],[0,-0.092],[0.09,0]],"o":[[0,-0.092],[0.09,0],[0,0.092],[-0.09,0]],"v":[[-0.165,0],[-0.001,-0.166],[0.165,0],[-0.001,0.166]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.453,20.876],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 383","np":4,"cix":2,"bm":0,"ix":383,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.079,0],[0,-0.081],[-0.081,0],[0,0.082]],"o":[[-0.081,0],[0,0.082],[0.079,0],[0,-0.081]],"v":[[0.001,-0.147],[-0.146,0.001],[0.001,0.151],[0.146,0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.101,0],[0,0.102],[-0.101,0],[0,-0.103]],"o":[[-0.101,0],[0,-0.103],[0.101,0],[0,0.102]],"v":[[0.001,0.185],[-0.183,0],[0.001,-0.185],[0.183,0]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.163,20.904],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 384","np":6,"cix":2,"bm":0,"ix":384,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.094],[-0.09,0],[0,-0.092],[0.09,0]],"o":[[0,-0.092],[0.09,0],[0,0.092],[-0.09,0.002]],"v":[[-0.165,-0.001],[-0.001,-0.167],[0.165,-0.001],[-0.001,0.165]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.164,20.905],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 385","np":4,"cix":2,"bm":0,"ix":385,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.079,0],[0,-0.081],[-0.081,0],[0,0.082]],"o":[[-0.081,0],[0,0.082],[0.081,0],[0,-0.083]],"v":[[0,-0.147],[-0.147,0.001],[0,0.151],[0.145,0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.101,0],[0,0.102],[-0.102,0],[0,-0.103]],"o":[[-0.101,0],[0,-0.103],[0.101,0],[0,0.102]],"v":[[0,0.185],[-0.184,0],[0,-0.185],[0.184,0]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.912,20.973],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 386","np":6,"cix":2,"bm":0,"ix":386,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.092],[-0.09,0],[0,-0.092],[0.09,0]],"o":[[0,-0.092],[0.09,0],[0,0.092],[-0.092,0.002]],"v":[[-0.165,-0.001],[-0.001,-0.167],[0.165,-0.001],[-0.001,0.165]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.912,20.974],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 387","np":4,"cix":2,"bm":0,"ix":387,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.081,0],[0,-0.081],[-0.081,0],[0,0.082]],"o":[[-0.081,0],[0,0.082],[0.081,0],[0,-0.081]],"v":[[0,-0.149],[-0.147,-0.001],[0,0.149],[0.147,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.101,0],[0,0.103],[-0.102,0],[0,-0.102]],"o":[[-0.101,0],[0,-0.102],[0.101,0],[0,0.103]],"v":[[0,0.186],[-0.184,-0.001],[0,-0.186],[0.184,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.674,21.117],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 388","np":6,"cix":2,"bm":0,"ix":388,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.092],[-0.09,0],[0,-0.092],[0.09,0]],"o":[[0,-0.092],[0.09,0],[0,0.092],[-0.09,0]],"v":[[-0.165,0],[-0.001,-0.166],[0.165,0],[-0.001,0.166]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.674,21.116],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 389","np":4,"cix":2,"bm":0,"ix":389,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.079,0],[0,-0.081],[-0.081,0],[0,0.082]],"o":[[-0.081,0],[0,0.082],[0.081,0],[0,-0.081]],"v":[[0,-0.149],[-0.147,-0.001],[0,0.149],[0.147,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.099,0],[0,0.103],[-0.101,0],[0,-0.102]],"o":[[-0.101,0],[0,-0.102],[0.101,0],[0,0.103]],"v":[[0,0.186],[-0.184,-0.001],[0,-0.186],[0.184,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.455,21.296],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 390","np":6,"cix":2,"bm":0,"ix":390,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.092],[-0.09,0],[0,-0.092],[0.09,0]],"o":[[0,-0.092],[0.09,0],[0,0.092],[-0.09,0]],"v":[[-0.165,0],[-0.001,-0.166],[0.165,0],[-0.001,0.166]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.453,21.296],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 391","np":4,"cix":2,"bm":0,"ix":391,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.081,0],[0,-0.081],[-0.081,0],[0,0.082]],"o":[[-0.081,0],[0,0.082],[0.081,0],[0,-0.083]],"v":[[0,-0.149],[-0.147,-0.001],[0,0.149],[0.145,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.101,0],[0,0.103],[-0.101,0],[0,-0.102]],"o":[[-0.101,0],[0,-0.102],[0.101,0],[0,0.103]],"v":[[0,0.186],[-0.184,-0.001],[0,-0.186],[0.184,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.244,21.494],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 392","np":6,"cix":2,"bm":0,"ix":392,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.092],[-0.09,0],[0,-0.092],[0.09,0]],"o":[[0,-0.092],[0.09,0],[0,0.092],[-0.09,0]],"v":[[-0.165,0],[-0.001,-0.166],[0.165,0],[-0.001,0.166]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.244,21.494],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 393","np":4,"cix":2,"bm":0,"ix":393,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.079,0],[0,-0.081],[-0.081,0],[0,0.082]],"o":[[-0.081,0],[0,0.082],[0.079,0],[0,-0.081]],"v":[[0,-0.147],[-0.147,0.001],[0,0.151],[0.145,0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.101,0],[0,0.102],[-0.102,0],[0,-0.103]],"o":[[-0.101,0],[0,-0.103],[0.101,0],[0,0.102]],"v":[[0,0.185],[-0.184,0],[0,-0.185],[0.184,0]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.094,21.76],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 394","np":6,"cix":2,"bm":0,"ix":394,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.092],[-0.09,0],[0,-0.092],[0.09,0]],"o":[[0,-0.092],[0.09,0],[0,0.092],[-0.092,0]],"v":[[-0.165,0],[-0.001,-0.166],[0.165,0],[-0.001,0.166]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.094,21.761],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 395","np":4,"cix":2,"bm":0,"ix":395,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.079,0],[0,-0.081],[-0.081,0],[0,0.082]],"o":[[-0.081,0],[0,0.082],[0.081,0],[-0.002,-0.081]],"v":[[0,-0.149],[-0.147,-0.001],[0,0.149],[0.147,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.101,0],[0,0.103],[-0.102,0],[0,-0.102]],"o":[[-0.101,0],[0,-0.102],[0.101,0],[0,0.103]],"v":[[0,0.186],[-0.184,-0.001],[0,-0.186],[0.184,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.11,22.041],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 396","np":6,"cix":2,"bm":0,"ix":396,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.094],[-0.09,0],[0,-0.092],[0.09,0]],"o":[[0,-0.092],[0.09,0],[0,0.092],[-0.092,0.002]],"v":[[-0.165,-0.001],[-0.001,-0.167],[0.165,-0.001],[-0.001,0.165]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.11,22.042],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 397","np":4,"cix":2,"bm":0,"ix":397,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.081,0],[0,-0.081],[-0.081,0],[0,0.082]],"o":[[-0.081,0],[0,0.082],[0.081,0],[0,-0.083]],"v":[[0,-0.149],[-0.147,-0.001],[0,0.149],[0.147,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.101,0],[0,0.103],[-0.102,0],[0,-0.102]],"o":[[-0.101,0],[0,-0.102],[0.102,0],[0,0.103]],"v":[[0,0.186],[-0.184,-0.001],[0,-0.186],[0.184,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.158,22.335],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 398","np":6,"cix":2,"bm":0,"ix":398,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.092,0],[0,0.092],[0.092,0],[0,-0.092]],"o":[[0.092,0],[0,-0.092],[-0.092,0],[0,0.092]],"v":[[0,0.166],[0.166,0],[0,-0.166],[-0.166,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.158,22.334],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 399","np":4,"cix":2,"bm":0,"ix":399,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.081,0],[0,-0.081],[-0.081,0],[0,0.082]],"o":[[-0.081,0],[0,0.082],[0.081,0],[0,-0.081]],"v":[[0,-0.149],[-0.147,-0.001],[0,0.149],[0.147,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.101,0],[0,0.103],[-0.101,0],[0,-0.102]],"o":[[-0.101,0],[0,-0.102],[0.101,0],[0,0.103]],"v":[[0,0.186],[-0.184,-0.001],[0,-0.186],[0.184,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.325,22.552],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 400","np":6,"cix":2,"bm":0,"ix":400,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.094],[-0.09,0],[0,-0.092],[0.09,0]],"o":[[0,-0.092],[0.09,0],[0,0.092],[-0.09,0.002]],"v":[[-0.165,-0.001],[-0.001,-0.167],[0.165,-0.001],[-0.001,0.165]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.325,22.552],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 401","np":4,"cix":2,"bm":0,"ix":401,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.072,-0.057],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0.003,-0.004],[0,0],[0,0],[0,0],[0.037,0.034],[0.005,0.004],[0,0],[0,0],[0,0]],"v":[[0.64,0.172],[2.607,0.448],[2.661,0.214],[2.714,0.04],[2.89,-0.116],[0.864,-0.414],[-1.072,-0.451],[-2.917,-0.116],[-2.732,0.036],[-2.667,0.26],[-2.667,0.449],[-1.171,0.225]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0.016,0.026],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[-0.051,-0.041],[0.012,-0.028],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-2.704,0.49],[-2.704,0.26],[-2.76,0.059],[-2.973,-0.121],[-1.077,-0.49],[0.866,-0.453],[2.973,-0.142],[2.743,0.059],[2.693,0.223],[2.633,0.488],[0.635,0.207],[-1.167,0.259]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.561,24.595],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 402","np":6,"cix":2,"bm":0,"ix":402,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0.016,0.027],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-2.943,-0.129],[-2.732,0.049],[-2.674,0.258],[-2.674,0.468],[-1.157,0.242],[0.65,0.191],[2.632,0.47],[2.689,0.219],[2.74,0.049],[2.943,-0.129],[0.878,-0.433],[-1.061,-0.47]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.549,24.595],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 403","np":4,"cix":2,"bm":0,"ix":403,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.173,0],[0.258,-0.419],[-0.267,-0.279],[-0.025,-0.019],[0,0],[-0.147,0.282],[-0.88,-0.201],[0,0]],"o":[[-0.668,0],[-0.203,0.33],[0.02,0.019],[0,0],[-0.27,-0.244],[0.196,-0.383],[0,0],[-0.173,-0.049]],"v":[[0.608,-0.803],[-0.943,-0.047],[-0.844,0.898],[-0.744,0.981],[-0.416,0.725],[-0.615,-0.114],[1.071,-0.614],[1.131,-0.731]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0.026,0.029],[-0.208,0.34],[-0.892,-0.268],[0,0],[0.189,-0.375],[-0.271,-0.233]],"o":[[-0.016,-0.013],[-0.276,-0.288],[0.334,-0.544],[0.021,0.007],[-0.881,-0.209],[-0.139,0.274],[0,0.03]],"v":[[-0.742,1.029],[-0.87,0.924],[-0.975,-0.066],[1.163,-0.761],[1.09,-0.573],[-0.582,-0.098],[-0.373,0.711]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[96.177,22.206],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 404","np":6,"cix":2,"bm":0,"ix":404,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.818,-0.857],[0,0],[0,0],[-1.395,-0.328],[0,0]],"o":[[0.025,0.026],[0,0],[-0.749,-0.648],[0,0],[-1.346,-0.405]],"v":[[-0.598,0.984],[-0.484,1.076],[-0.126,0.797],[1.34,-0.523],[1.417,-0.671]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[95.918,22.135],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 405","np":4,"cix":2,"bm":0,"ix":405,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.12,-0.392],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.59,-0.138],[0.477,0.228],[0.797,-0.431],[0.454,-0.005],[0.525,-0.523]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.429,-0.566],[-0.661,0.157],[-0.575,-0.274],[-0.866,0.468],[-0.478,0.007],[0.022,0.039]],"v":[[-3.967,0.468],[-3.366,1.171],[-2.876,1.556],[2.837,1.537],[3.109,1.379],[3.636,1.028],[4.176,0.404],[4.176,-0.065],[2.64,-0.708],[1.009,-1.014],[-0.907,-1.116],[-2.792,-0.634],[-4.174,-0.099]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[-0.491,0.007],[-0.857,0.465],[-0.586,-0.279],[-0.648,0.151],[-0.435,-0.572],[0,0],[0,0],[0,0],[0,0]],"o":[[-0.005,-0.003],[0,0],[-0.145,-0.475],[0.543,-0.569],[0.45,-0.007],[0.814,-0.441],[0.47,0.224],[0.597,-0.144],[0.003,0.005],[0,0],[0,0],[0,0],[-0.003,0.002]],"v":[[-2.889,1.591],[-3.39,1.196],[-4.003,0.482],[-4.214,-0.09],[-2.793,-0.671],[-0.926,-1.15],[1.025,-1.049],[2.632,-0.745],[4.21,-0.085],[4.214,0.415],[3.66,1.053],[3.13,1.408],[2.848,1.57]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.487,22.893],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 406","np":6,"cix":2,"bm":0,"ix":406,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-1.768,0.957],[-1.445,0.341],[-0.289,-0.383],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[1.044,-1.051],[1.475,-0.799],[0.764,-0.18],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.148,-0.493]],"v":[[-4.197,0.076],[-0.915,-0.955],[2.638,-0.549],[4.197,0.106],[4.197,0.588],[3.652,1.219],[3.122,1.574],[2.846,1.735],[-2.881,1.754],[-3.379,1.364],[-3.985,0.659]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.835294177485,0.011764706817,0.117647066303,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.486,22.714],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 407","np":4,"cix":2,"bm":0,"ix":407,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.079,0],[0,-0.081],[-0.081,0],[0,0.082]],"o":[[-0.081,0],[0,0.082],[0.081,0],[0,-0.081]],"v":[[0,-0.149],[-0.147,-0.001],[0,0.149],[0.147,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.101,0],[0,0.103],[-0.101,0],[0,-0.102]],"o":[[-0.101,0],[0,-0.102],[0.101,0],[0,0.103]],"v":[[0,0.186],[-0.184,-0.001],[0,-0.186],[0.184,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.993,21.306],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 408","np":6,"cix":2,"bm":0,"ix":408,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.092],[0.092,0],[0,-0.092],[-0.092,0]],"o":[[0,-0.092],[-0.092,0],[0,0.092],[0.092,0]],"v":[[0.166,0],[0,-0.166],[-0.166,0],[0,0.166]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.991,21.306],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 409","np":4,"cix":2,"bm":0,"ix":409,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.081,0],[0,-0.081],[-0.081,0],[0,0.082]],"o":[[-0.081,0],[0,0.082],[0.081,0],[0,-0.081]],"v":[[0,-0.149],[-0.147,-0.001],[0,0.149],[0.147,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.101,0],[0,0.103],[-0.101,0],[0,-0.102]],"o":[[-0.101,0],[0,-0.102],[0.101,0],[0,0.103]],"v":[[0,0.186],[-0.184,-0.001],[0,-0.186],[0.184,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.29,21.294],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 410","np":6,"cix":2,"bm":0,"ix":410,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.092],[0.092,0],[0,-0.092],[-0.092,0]],"o":[[0,-0.092],[-0.092,0],[0,0.092],[0.092,0]],"v":[[0.166,0],[0,-0.166],[-0.166,0],[0,0.166]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.289,21.294],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 411","np":4,"cix":2,"bm":0,"ix":411,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.081,0],[0,-0.081],[-0.081,0],[0,0.082]],"o":[[-0.081,0],[0,0.082],[0.081,0],[0,-0.081]],"v":[[0,-0.149],[-0.147,-0.001],[0,0.149],[0.147,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.101,0],[0,0.103],[-0.101,0],[0,-0.102]],"o":[[-0.101,0],[0,-0.102],[0.101,0],[0,0.103]],"v":[[0,0.186],[-0.184,-0.001],[0,-0.186],[0.184,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.59,21.306],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 412","np":6,"cix":2,"bm":0,"ix":412,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.092,0],[0,0.092],[0.092,0],[0,-0.092]],"o":[[0.092,0],[0,-0.092],[-0.092,0],[0,0.092]],"v":[[0,0.166],[0.166,0],[0,-0.166],[-0.166,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.589,21.306],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 413","np":4,"cix":2,"bm":0,"ix":413,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.081,0],[0,-0.081],[-0.081,0],[0,0.083]],"o":[[-0.081,0],[0,0.082],[0.081,0],[0,-0.083]],"v":[[0,-0.147],[-0.147,0.001],[0,0.151],[0.147,0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.101,0],[0,0.102],[-0.101,0],[0,-0.103]],"o":[[-0.101,0],[0,-0.103],[0.101,0],[0,0.102]],"v":[[0,0.185],[-0.184,0],[0,-0.185],[0.184,0]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.883,21.361],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 414","np":6,"cix":2,"bm":0,"ix":414,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.092,0],[0,0.092],[0.092,0],[0,-0.092]],"o":[[0.092,0],[0,-0.092],[-0.092,0],[0,0.092]],"v":[[0,0.166],[0.166,0],[0,-0.166],[-0.166,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.883,21.363],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 415","np":4,"cix":2,"bm":0,"ix":415,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.081,0],[0,-0.081],[-0.081,0],[0,0.082]],"o":[[-0.081,0],[0,0.082],[0.081,0],[0,-0.081]],"v":[[0,-0.147],[-0.147,0.001],[0,0.151],[0.147,0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.101,0],[0,0.102],[-0.101,0],[0,-0.103]],"o":[[-0.101,0],[0,-0.103],[0.101,0],[0,0.102]],"v":[[0,0.185],[-0.184,0],[0,-0.185],[0.184,0]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[103.161,21.472],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 416","np":6,"cix":2,"bm":0,"ix":416,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.092,0],[0,0.092],[0.092,0],[0,-0.092]],"o":[[0.092,0],[0,-0.092],[-0.092,0],[0,0.092]],"v":[[0,0.166],[0.166,0],[0,-0.166],[-0.166,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[103.159,21.471],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 417","np":4,"cix":2,"bm":0,"ix":417,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.081,0],[0,-0.081],[-0.081,0],[0,0.082]],"o":[[-0.081,0],[0,0.082],[0.081,0],[0,-0.081]],"v":[[0,-0.149],[-0.147,-0.001],[0,0.149],[0.147,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.101,0],[0,0.103],[-0.101,0],[0,-0.102]],"o":[[-0.101,0],[0,-0.102],[0.101,0],[0,0.103]],"v":[[0,0.186],[-0.184,-0.001],[0,-0.186],[0.184,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[103.419,21.607],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 418","np":6,"cix":2,"bm":0,"ix":418,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.092,0],[0,0.092],[0.092,0],[0,-0.092]],"o":[[0.092,0],[0,-0.092],[-0.092,0],[0,0.092]],"v":[[0,0.166],[0.166,0],[0,-0.166],[-0.166,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[103.419,21.606],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 419","np":4,"cix":2,"bm":0,"ix":419,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.081,0],[0,-0.081],[-0.081,0],[0,0.082]],"o":[[-0.081,0],[0,0.082],[0.081,0],[0,-0.081]],"v":[[0,-0.149],[-0.147,-0.001],[0,0.149],[0.147,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.102,0],[0,0.103],[-0.101,0],[0,-0.102]],"o":[[-0.101,0],[0,-0.102],[0.101,0],[0,0.103]],"v":[[0,0.186],[-0.184,-0.001],[0,-0.186],[0.184,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[103.659,21.795],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 420","np":6,"cix":2,"bm":0,"ix":420,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.092],[0.092,0],[0,-0.092],[-0.092,0]],"o":[[0,-0.092],[-0.092,0],[0,0.092],[0.092,0]],"v":[[0.166,0],[0,-0.166],[-0.166,0],[0,0.166]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[103.659,21.794],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 421","np":4,"cix":2,"bm":0,"ix":421,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.081,0],[0,-0.081],[-0.081,0],[0,0.083]],"o":[[-0.081,0],[0,0.082],[0.081,0],[0,-0.083]],"v":[[0,-0.149],[-0.147,-0.001],[0,0.149],[0.147,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.101,0],[0,0.103],[-0.101,0],[0,-0.102]],"o":[[-0.101,0],[0,-0.102],[0.101,0],[0,0.103]],"v":[[0,0.186],[-0.184,-0.001],[0,-0.186],[0.184,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[103.856,22.008],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 422","np":6,"cix":2,"bm":0,"ix":422,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.092,0],[0,0.092],[0.092,0],[0,-0.092]],"o":[[0.092,0],[0,-0.092],[-0.092,0],[0,0.092]],"v":[[0,0.166],[0.166,0],[0,-0.166],[-0.166,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[103.855,22.008],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 423","np":4,"cix":2,"bm":0,"ix":423,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.081,0],[0,-0.081],[-0.081,0],[0,0.082]],"o":[[-0.081,0],[0,0.082],[0.081,0],[0,-0.081]],"v":[[0,-0.147],[-0.147,0.001],[0,0.151],[0.147,0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.102,0],[0,0.102],[-0.101,0],[0,-0.103]],"o":[[-0.101,0],[0,-0.103],[0.101,0],[0,0.102]],"v":[[0,0.185],[-0.184,0],[0,-0.185],[0.184,0]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[103.977,22.312],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 424","np":6,"cix":2,"bm":0,"ix":424,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.092,0],[0,0.092],[0.092,0],[0,-0.092]],"o":[[0.092,0],[0,-0.092],[-0.092,0],[0,0.092]],"v":[[0,0.166],[0.166,0],[0,-0.166],[-0.166,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[103.976,22.313],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 425","np":4,"cix":2,"bm":0,"ix":425,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.081,0],[0,-0.081],[-0.081,0],[0,0.082]],"o":[[-0.081,0],[0,0.082],[0.081,0],[0.001,-0.083]],"v":[[0,-0.149],[-0.147,-0.001],[0,0.149],[0.147,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.102,0],[0,0.103],[-0.101,0],[0,-0.102]],"o":[[-0.101,0],[0,-0.102],[0.101,0],[0,0.103]],"v":[[0,0.186],[-0.184,-0.001],[0,-0.186],[0.184,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[104.011,22.605],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 426","np":6,"cix":2,"bm":0,"ix":426,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.092],[0.092,0],[0,-0.092],[-0.092,0]],"o":[[0,-0.092],[-0.092,0],[0,0.092],[0.092,0]],"v":[[0.166,0],[0,-0.166],[-0.166,0],[0,0.166]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[104.011,22.605],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 427","np":4,"cix":2,"bm":0,"ix":427,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.081,0],[0,-0.081],[-0.081,0],[0,0.082]],"o":[[-0.081,0],[0,0.082],[0.081,0],[0,-0.081]],"v":[[0,-0.149],[-0.147,-0.001],[0,0.149],[0.147,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.102,0],[0,0.103],[-0.101,0],[0,-0.102]],"o":[[-0.101,0],[0,-0.102],[0.101,0],[0,0.103]],"v":[[0,0.186],[-0.184,-0.001],[0,-0.186],[0.184,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[103.977,22.911],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 428","np":6,"cix":2,"bm":0,"ix":428,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.094],[0.092,0],[0,-0.092],[-0.092,0]],"o":[[0,-0.092],[-0.092,0],[0,0.092],[0.092,0.002]],"v":[[0.166,-0.001],[0,-0.167],[-0.166,-0.001],[0,0.165]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[103.976,22.911],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 429","np":4,"cix":2,"bm":0,"ix":429,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.081,0],[0,-0.081],[-0.081,0],[0,0.082]],"o":[[-0.081,0],[0,0.082],[0.081,0],[0,-0.081]],"v":[[0,-0.149],[-0.147,-0.001],[0,0.149],[0.147,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.101,0],[0,0.103],[-0.101,0],[0,-0.102]],"o":[[-0.101,0],[0,-0.102],[0.101,0],[0,0.103]],"v":[[0,0.186],[-0.184,-0.001],[0,-0.186],[0.184,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[103.847,23.19],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 430","np":6,"cix":2,"bm":0,"ix":430,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.092,0],[0,0.092],[0.092,0],[0,-0.092]],"o":[[0.092,0],[0,-0.092],[-0.092,0],[0,0.092]],"v":[[0,0.166],[0.166,0],[0,-0.166],[-0.166,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[103.847,23.189],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 431","np":4,"cix":2,"bm":0,"ix":431,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.081,0],[0,-0.081],[-0.081,0],[0,0.082]],"o":[[-0.081,0],[0,0.082],[0.081,0],[0,-0.081]],"v":[[0.001,-0.149],[-0.148,-0.001],[0.001,0.149],[0.148,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.102,0],[0,0.103],[-0.102,0],[0,-0.102]],"o":[[-0.102,0],[0,-0.102],[0.102,0],[0,0.103]],"v":[[0.001,0.186],[-0.186,-0.001],[0.001,-0.186],[0.186,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.063,21.327],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 432","np":6,"cix":2,"bm":0,"ix":432,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.092,0],[0,0.092],[0.092,0],[0,-0.092]],"o":[[0.092,0],[0,-0.092],[-0.092,0],[0,0.092]],"v":[[0,0.166],[0.166,0],[0,-0.166],[-0.166,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.063,21.327],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 433","np":4,"cix":2,"bm":0,"ix":433,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.083,0],[0,-0.081],[-0.081,0],[0,0.082]],"o":[[-0.081,0],[0,0.082],[0.081,0],[0,-0.081]],"v":[[0,-0.149],[-0.148,-0.001],[0,0.149],[0.148,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.102,0],[0,0.103],[-0.102,0],[0,-0.102]],"o":[[-0.102,0],[0,-0.102],[0.102,0],[0,0.103]],"v":[[0,0.186],[-0.185,-0.001],[0,-0.186],[0.185,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[96.763,21.315],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 434","np":6,"cix":2,"bm":0,"ix":434,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.092],[-0.092,0],[0,-0.092],[0.092,0]],"o":[[0,-0.092],[0.092,0],[0,0.092],[-0.092,0.002]],"v":[[-0.166,-0.001],[0,-0.167],[0.166,-0.001],[0,0.165]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[96.763,21.315],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 435","np":4,"cix":2,"bm":0,"ix":435,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.081,0],[0,-0.081],[-0.081,0],[0,0.082]],"o":[[-0.081,0],[0,0.082],[0.081,0],[0,-0.081]],"v":[[0,-0.149],[-0.148,-0.001],[0,0.149],[0.148,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.102,0],[0,0.103],[-0.102,0],[0,-0.102]],"o":[[-0.102,0],[0,-0.102],[0.102,0],[0,0.103]],"v":[[0,0.186],[-0.185,-0.001],[0,-0.186],[0.185,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[96.46,21.327],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 436","np":6,"cix":2,"bm":0,"ix":436,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.092,0],[0,0.092],[0.092,0],[0,-0.092]],"o":[[0.092,0],[0,-0.092],[-0.092,0],[0,0.092]],"v":[[0,0.166],[0.166,0],[0,-0.166],[-0.166,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[96.459,21.327],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 437","np":4,"cix":2,"bm":0,"ix":437,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.083,0],[0,-0.081],[-0.081,0],[0,0.082]],"o":[[-0.081,0],[0,0.082],[0.081,0],[0,-0.083]],"v":[[0,-0.149],[-0.148,-0.001],[0,0.149],[0.148,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.102,0],[0,0.103],[-0.102,0],[0,-0.102]],"o":[[-0.102,0],[0,-0.102],[0.102,0],[0,0.103]],"v":[[0,0.186],[-0.185,-0.001],[0,-0.186],[0.185,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[96.165,21.384],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 438","np":6,"cix":2,"bm":0,"ix":438,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.092],[-0.092,0],[0,-0.092],[0.092,0]],"o":[[0,-0.092],[0.092,0],[0,0.092],[-0.092,0]],"v":[[-0.166,0],[0,-0.166],[0.166,0],[0,0.166]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[96.164,21.383],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 439","np":4,"cix":2,"bm":0,"ix":439,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.081,0],[0,-0.081],[-0.081,0],[0,0.082]],"o":[[-0.081,0],[0,0.082],[0.081,0],[-0.001,-0.083]],"v":[[0,-0.149],[-0.148,-0.001],[0,0.149],[0.148,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.101,0],[0,0.103],[-0.102,0],[0,-0.102]],"o":[[-0.102,0],[0,-0.102],[0.102,0],[0,0.103]],"v":[[0,0.186],[-0.185,-0.001],[0,-0.186],[0.185,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[95.889,21.494],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 440","np":6,"cix":2,"bm":0,"ix":440,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.092],[-0.092,0],[0,-0.092],[0.092,0]],"o":[[0,-0.092],[0.092,0],[0,0.092],[-0.092,0]],"v":[[-0.166,0],[0,-0.166],[0.166,0],[0,0.166]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[95.886,21.494],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 441","np":4,"cix":2,"bm":0,"ix":441,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.081,0],[0,-0.081],[-0.081,0],[0,0.082]],"o":[[-0.081,0],[0,0.082],[0.081,0],[0,-0.083]],"v":[[0,-0.149],[-0.148,-0.001],[0,0.149],[0.148,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.102,0],[0,0.103],[-0.102,0],[0,-0.102]],"o":[[-0.102,0],[0,-0.102],[0.102,0],[0,0.103]],"v":[[0,0.186],[-0.185,-0.001],[0,-0.186],[0.185,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[95.625,21.629],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 442","np":6,"cix":2,"bm":0,"ix":442,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.092],[-0.092,0],[0,-0.092],[0.092,0]],"o":[[0,-0.092],[0.092,0],[0,0.092],[-0.092,0]],"v":[[-0.166,0],[0,-0.166],[0.166,0],[0,0.166]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[95.624,21.628],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 443","np":4,"cix":2,"bm":0,"ix":443,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.081,0],[0,-0.081],[-0.083,0],[0,0.082]],"o":[[-0.081,0],[0,0.082],[0.081,0],[0,-0.081]],"v":[[0,-0.149],[-0.148,-0.001],[0,0.149],[0.148,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.102,0],[0,0.103],[-0.102,0],[0,-0.102]],"o":[[-0.102,0],[0,-0.102],[0.102,0],[0,0.103]],"v":[[0,0.186],[-0.185,-0.001],[0,-0.186],[0.185,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[95.385,21.815],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 444","np":6,"cix":2,"bm":0,"ix":444,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.094],[-0.092,0],[0,-0.092],[0.092,0]],"o":[[0,-0.092],[0.092,0],[0,0.092],[-0.092,0.002]],"v":[[-0.166,-0.001],[0,-0.167],[0.166,-0.001],[0,0.165]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[95.384,21.816],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 445","np":4,"cix":2,"bm":0,"ix":445,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.081,0],[0,-0.083],[-0.081,0],[0,0.082]],"o":[[-0.081,0],[0,0.082],[0.081,0],[-0.001,-0.081]],"v":[[0,-0.149],[-0.148,-0.001],[0,0.149],[0.148,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.101,0],[0,0.103],[-0.102,0],[0,-0.102]],"o":[[-0.102,0],[0,-0.102],[0.102,0],[0,0.103]],"v":[[0,0.186],[-0.185,-0.001],[0,-0.186],[0.185,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[95.187,22.029],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 446","np":6,"cix":2,"bm":0,"ix":446,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.092],[-0.092,0],[0,-0.092],[0.092,0]],"o":[[0,-0.092],[0.092,0],[0,0.092],[-0.092,0.002]],"v":[[-0.166,-0.001],[0,-0.167],[0.166,-0.001],[0,0.165]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[95.184,22.03],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 447","np":4,"cix":2,"bm":0,"ix":447,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.081,0],[0,-0.081],[-0.081,0],[0,0.082]],"o":[[-0.081,0],[0,0.082],[0.081,0],[0,-0.083]],"v":[[0,-0.149],[-0.148,-0.001],[0,0.149],[0.148,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.102,0],[0,0.103],[-0.102,0],[0,-0.102]],"o":[[-0.102,0],[0,-0.102],[0.102,0],[0,0.103]],"v":[[0,0.186],[-0.185,-0.001],[0,-0.186],[0.185,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[95.064,22.335],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 448","np":6,"cix":2,"bm":0,"ix":448,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.092,0],[0,0.092],[0.092,0],[0,-0.092]],"o":[[0.092,0],[0,-0.092],[-0.092,0],[0,0.092]],"v":[[0,0.166],[0.166,0],[0,-0.166],[-0.166,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[95.064,22.334],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 449","np":4,"cix":2,"bm":0,"ix":449,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.081,0],[0,-0.081],[-0.081,0],[0,0.082]],"o":[[-0.081,0],[0,0.082],[0.081,0],[0,-0.081]],"v":[[0,-0.149],[-0.148,-0.001],[0,0.149],[0.148,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.101,0],[0,0.103],[-0.102,0],[0,-0.102]],"o":[[-0.102,0],[0,-0.102],[0.102,0],[0,0.103]],"v":[[0,0.186],[-0.185,-0.001],[0,-0.186],[0.185,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[95.03,22.626],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 450","np":6,"cix":2,"bm":0,"ix":450,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.092,0],[0,0.092],[0.092,0],[0,-0.092]],"o":[[0.092,0],[0,-0.092],[-0.092,0],[0,0.092]],"v":[[0,0.166],[0.166,0],[0,-0.166],[-0.166,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[95.029,22.625],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 451","np":4,"cix":2,"bm":0,"ix":451,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.081,0],[0,-0.081],[-0.081,0],[0,0.082]],"o":[[-0.081,0],[0,0.082],[0.081,0],[0,-0.083]],"v":[[0,-0.149],[-0.148,-0.001],[0,0.149],[0.148,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.102,0],[0,0.103],[-0.102,0],[0,-0.102]],"o":[[-0.102,0],[0,-0.102],[0.102,0],[0,0.103]],"v":[[0,0.186],[-0.185,-0.001],[0,-0.186],[0.185,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[95.064,22.933],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 452","np":6,"cix":2,"bm":0,"ix":452,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.092,0],[0,0.092],[0.092,0],[0,-0.092]],"o":[[0.092,0],[0,-0.092],[-0.092,0],[0,0.092]],"v":[[0,0.166],[0.166,0],[0,-0.166],[-0.166,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[95.064,22.932],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 453","np":4,"cix":2,"bm":0,"ix":453,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.081,0],[0,-0.081],[-0.081,0],[0,0.083]],"o":[[-0.081,0],[0,0.082],[0.081,0],[0,-0.083]],"v":[[0,-0.147],[-0.148,0.001],[0,0.151],[0.148,0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.102,0],[0,0.102],[-0.102,0],[0,-0.103]],"o":[[-0.102,0],[0,-0.103],[0.102,0],[0,0.102]],"v":[[0,0.185],[-0.185,0],[0,-0.185],[0.185,0]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[95.195,23.21],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 454","np":6,"cix":2,"bm":0,"ix":454,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.092,0],[0,0.092],[0.092,0],[0,-0.092]],"o":[[0.092,0],[0,-0.092],[-0.092,0],[0,0.092]],"v":[[0,0.166],[0.166,0],[0,-0.166],[-0.166,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[95.195,23.21],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 455","np":4,"cix":2,"bm":0,"ix":455,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[-0.018,-0.018],[0.018,-0.018],[0,0],[0,0],[-0.018,-0.02],[0,0],[0,0],[-0.018,0.02],[0,0],[0,0],[0.018,0.018],[-0.018,0.018],[0,0]],"v":[[-0.327,0.542],[0.33,0.542],[0.341,0.406],[0.097,0.406],[0.079,-0.18],[0.296,-0.198],[0.296,-0.362],[0.099,-0.362],[0.081,-0.543],[-0.068,-0.543],[-0.068,-0.382],[-0.287,-0.362],[-0.287,-0.198],[-0.086,-0.198],[-0.068,0.388],[-0.333,0.406]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.011,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-0.017,-0.018],[0.018,-0.019],[0,0],[0,0],[-0.018,-0.017],[0.018,-0.017],[0,0],[0.018,-0.02],[0.018,0.02],[0,0],[0.017,0.017],[-0.017,0.017],[0,0],[0,0],[0.017,0.019],[0.002,0.009]],"v":[[0.346,0.579],[-0.346,0.579],[-0.374,0.388],[-0.109,0.37],[-0.109,-0.163],[-0.31,-0.163],[-0.327,-0.382],[-0.109,-0.398],[-0.109,-0.56],[0.095,-0.579],[0.113,-0.398],[0.311,-0.398],[0.328,-0.18],[0.111,-0.163],[0.111,0.37],[0.357,0.37],[0.362,0.561]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.542,20.109],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 456","np":6,"cix":2,"bm":0,"ix":456,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.093,0.387],[0.093,-0.181],[0.31,-0.181],[0.31,-0.38],[0.093,-0.38],[0.093,-0.561],[-0.093,-0.561],[-0.093,-0.38],[-0.312,-0.38],[-0.312,-0.181],[-0.093,-0.181],[-0.093,0.387],[-0.358,0.387],[-0.348,0.561],[-0.093,0.561],[0.093,0.561],[0.344,0.561],[0.358,0.387]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176470588,0.643137254902,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.544,20.109],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 457","np":4,"cix":2,"bm":0,"ix":457,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.187,0],[0,-0.187],[-0.187,0],[0,0.187]],"o":[[-0.187,0],[0,0.187],[0.187,0],[0,-0.187]],"v":[[0,-0.339],[-0.339,0],[0,0.339],[0.339,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.208,0],[0,0.209],[-0.208,0],[0,-0.208]],"o":[[-0.208,0],[0,-0.208],[0.208,0],[0,0.209]],"v":[[0,0.378],[-0.378,0],[0,-0.378],[0.378,0]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.545,20.548],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 458","np":6,"cix":2,"bm":0,"ix":458,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.198],[-0.198,0],[0,-0.198],[0.197,0]],"o":[[0,-0.198],[0.197,0],[0,0.198],[-0.198,0]],"v":[[-0.359,0],[0.001,-0.359],[0.359,0],[0.001,0.359]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.254901960784,0.800000059838,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.544,20.548],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 459","np":4,"cix":2,"bm":0,"ix":459,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.032,0],[0.018,-0.031],[0.054,0],[0.069,-0.079],[0.04,0],[0.059,-0.15],[-0.057,-0.072],[-0.03,-0.002],[-0.214,0],[-0.208,0.062],[0.007,0.031],[-0.016,0.025],[-0.012,0.03],[0.041,0.033],[0.036,0.091],[0.171,0],[0.043,-0.014],[0.032,0.019],[0.054,0],[0.01,-0.004]],"o":[[-0.042,0],[-0.053,-0.023],[-0.105,0],[-0.039,-0.012],[-0.173,0],[-0.035,0.092],[0.102,0.232],[0.434,0.385],[0.213,0],[0.03,-0.009],[0.145,-0.198],[0.03,0],[0.125,-0.127],[0.056,-0.075],[-0.058,-0.152],[-0.044,0],[-0.019,-0.021],[-0.103,-0.052],[-0.062,0],[-0.06,-0.029]],"v":[[0,-0.655],[-0.092,-0.605],[-0.254,-0.641],[-0.528,-0.516],[-0.648,-0.533],[-1.053,-0.27],[-1.017,-0.016],[-0.858,0.238],[0.004,0.655],[0.639,0.562],[0.68,0.491],[0.867,0.238],[0.938,0.186],[1.021,-0.017],[1.054,-0.272],[0.657,-0.534],[0.526,-0.513],[0.454,-0.577],[0.246,-0.638],[0.131,-0.62]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[-0.008,0.014]],"o":[[0.044,-0.016],[-0.014,0.001]],"v":[[0.731,0.249],[0.828,0.165]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[-0.035,0],[-0.014,-0.035],[-0.048,0],[-0.049,-0.021],[-0.021,-0.028],[-0.048,0],[0.2,-0.181],[-0.009,-0.028],[0.042,-0.019],[0.209,0],[0.205,0.06],[0.021,0.017],[0.051,0],[-0.032,0],[-0.27,0],[-0.044,-0.019],[-0.113,0],[-0.066,-0.037]],"o":[[0.034,0],[0.09,-0.019],[0.04,0],[0.089,0.053],[0.046,-0.021],[0.276,0],[-0.014,0.066],[-0.064,0.051],[-0.35,0.311],[-0.208,0],[-0.126,-0.237],[-0.092,-0.129],[-0.028,-0.028],[-0.212,-0.189],[0.044,0],[0.055,-0.074],[0.059,0],[0.003,-0.051]],"v":[[0,-0.613],[0.071,-0.572],[0.246,-0.599],[0.383,-0.572],[0.516,-0.464],[0.657,-0.493],[0.959,-0.008],[0.91,0.147],[0.774,0.272],[0.005,0.613],[-0.618,0.523],[-0.795,0.249],[-0.982,0.057],[-0.947,-0.003],[-0.648,-0.492],[-0.514,-0.465],[-0.253,-0.598],[-0.065,-0.546]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.927,24.347],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 460","np":7,"cix":2,"bm":0,"ix":460,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.212,0],[0.207,0.06],[0,0],[0.032,0.028],[0.023,0],[-0.044,0],[-0.037,0.099],[-0.165,0],[-0.044,-0.02],[-0.108,0],[-0.064,-0.037],[-0.052,0],[-0.021,-0.044],[-0.058,0],[-0.044,-0.019],[-0.022,-0.028],[-0.051,0],[-0.055,-0.143],[0.067,-0.07],[0,0],[0.012,-0.016],[0.045,-0.021],[0,0],[0,0]],"o":[[-0.212,0],[-0.014,-0.115],[-0.076,-0.028],[-0.131,-0.168],[-0.048,-0.059],[-0.1,-0.042],[0.054,-0.143],[0.047,0],[0.042,-0.081],[0.065,0],[-0.023,-0.038],[0.033,0],[0.058,-0.025],[0.051,0],[0.094,0.056],[0.023,-0.028],[0.164,0],[0.035,0.094],[0.057,0.034],[-0.071,0.014],[-0.082,0.107],[-0.086,0.049],[0.019,0.005],[-0.232,0.101]],"v":[[0.006,0.633],[-0.625,0.543],[-0.667,0.336],[-0.808,0.262],[-0.983,0.077],[-0.948,-0.024],[-1.034,-0.263],[-0.649,-0.513],[-0.508,-0.485],[-0.255,-0.619],[-0.059,-0.565],[0.001,-0.633],[0.089,-0.582],[0.246,-0.621],[0.391,-0.591],[0.531,-0.478],[0.656,-0.517],[1.036,-0.27],[0.986,-0.012],[1.043,0.061],[0.939,0.107],[0.781,0.287],[0.633,0.409],[0.66,0.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.835294177485,0.011764706817,0.117647066303,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.925,24.347],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 461","np":4,"cix":2,"bm":0,"ix":461,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.009,-0.032],[-0.041,0],[-0.021,0.046],[0.025,0.015]],"o":[[-0.109,0.21],[0.037,0.145],[0.044,0],[0.002,-0.131],[0,0]],"v":[[0.029,-0.218],[-0.109,0.049],[0.005,0.218],[0.107,0.146],[0.067,-0.025]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[-0.006,-0.035],[0.035,0],[0.012,0.033],[-0.032,0.011]],"o":[[0.03,0.189],[-0.02,0.079],[-0.035,0],[-0.002,-0.081],[0,0]],"v":[[0.029,-0.179],[0.085,0.07],[0.005,0.178],[-0.066,0.116],[-0.016,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.924,23.555],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 462","np":6,"cix":2,"bm":0,"ix":462,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.041,0],[0.018,0.046],[-0.038,0.014],[-0.004,-0.039]],"o":[[-0.039,0],[-0.002,-0.097],[0.099,0.017],[-0.025,0.105]],"v":[[-0.003,0.108],[-0.094,0.035],[-0.031,-0.108],[0.096,-0.022]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.835294177485,0.011764706817,0.117647066303,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.932,23.644],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 463","np":4,"cix":2,"bm":0,"ix":463,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.032,0],[0.018,-0.031],[0.054,0],[0.069,-0.079],[0.04,0],[0.059,-0.15],[-0.057,-0.072],[-0.03,-0.002],[-0.214,0],[-0.208,0.062],[0.007,0.031],[-0.016,0.025],[-0.012,0.03],[0.041,0.033],[0.036,0.091],[0.173,0],[0.041,-0.014],[0.034,0.019],[0.055,0],[0.011,-0.004]],"o":[[-0.042,0],[-0.053,-0.023],[-0.105,0],[-0.039,-0.012],[-0.172,0],[-0.035,0.092],[0.102,0.232],[0.434,0.385],[0.213,0],[0.03,-0.009],[0.145,-0.198],[0.03,0],[0.125,-0.127],[0.056,-0.075],[-0.058,-0.152],[-0.044,0],[-0.019,-0.021],[-0.102,-0.052],[-0.062,0],[-0.058,-0.029]],"v":[[0.001,-0.655],[-0.092,-0.605],[-0.254,-0.641],[-0.528,-0.516],[-0.648,-0.533],[-1.053,-0.27],[-1.017,-0.016],[-0.857,0.238],[0.005,0.655],[0.64,0.562],[0.68,0.491],[0.868,0.238],[0.939,0.186],[1.021,-0.017],[1.055,-0.272],[0.656,-0.534],[0.527,-0.513],[0.452,-0.577],[0.245,-0.638],[0.13,-0.62]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[-0.01,0.014]],"o":[[0.046,-0.016],[-0.014,0.001]],"v":[[0.732,0.249],[0.831,0.165]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[-0.035,0],[-0.014,-0.035],[-0.048,0],[-0.049,-0.021],[-0.021,-0.028],[-0.048,0],[0.2,-0.181],[-0.009,-0.028],[0.042,-0.019],[0.21,0],[0.205,0.06],[0.022,0.017],[0.051,0],[-0.032,0],[-0.272,0],[-0.044,-0.019],[-0.113,0],[-0.065,-0.037]],"o":[[0.034,0],[0.09,-0.019],[0.04,0],[0.089,0.053],[0.046,-0.021],[0.276,0],[-0.014,0.066],[-0.064,0.051],[-0.35,0.311],[-0.209,0],[-0.125,-0.237],[-0.091,-0.129],[-0.028,-0.028],[-0.212,-0.189],[0.044,0],[0.055,-0.074],[0.058,0],[0.005,-0.051]],"v":[[0.001,-0.613],[0.072,-0.572],[0.247,-0.599],[0.383,-0.572],[0.517,-0.464],[0.658,-0.493],[0.96,-0.008],[0.911,0.147],[0.775,0.272],[0.005,0.613],[-0.62,0.523],[-0.797,0.249],[-0.984,0.057],[-0.948,-0.003],[-0.65,-0.492],[-0.516,-0.465],[-0.254,-0.598],[-0.066,-0.546]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.239,24.347],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 464","np":7,"cix":2,"bm":0,"ix":464,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.212,0],[0.207,0.06],[0,0],[0.032,0.028],[0.023,0],[-0.042,0],[-0.039,0.099],[-0.165,0],[-0.044,-0.02],[-0.109,0],[-0.063,-0.037],[-0.051,0],[-0.021,-0.044],[-0.058,0],[-0.044,-0.019],[-0.021,-0.028],[-0.051,0],[-0.054,-0.143],[0.067,-0.07],[0,0],[0.013,-0.016],[0.044,-0.021],[0,0],[0,0]],"o":[[-0.212,0],[-0.014,-0.115],[-0.076,-0.028],[-0.131,-0.168],[-0.05,-0.059],[-0.1,-0.042],[0.054,-0.143],[0.049,0],[0.042,-0.081],[0.066,0],[-0.023,-0.038],[0.034,0],[0.06,-0.025],[0.051,0],[0.093,0.056],[0.023,-0.028],[0.164,0],[0.038,0.094],[0.057,0.034],[-0.071,0.014],[-0.081,0.107],[-0.086,0.049],[0.019,0.005],[-0.231,0.101]],"v":[[0.005,0.633],[-0.626,0.543],[-0.668,0.336],[-0.809,0.262],[-0.984,0.077],[-0.949,-0.024],[-1.035,-0.263],[-0.65,-0.513],[-0.509,-0.485],[-0.255,-0.619],[-0.059,-0.565],[0.001,-0.633],[0.09,-0.582],[0.247,-0.621],[0.392,-0.591],[0.531,-0.478],[0.657,-0.517],[1.036,-0.27],[0.987,-0.012],[1.044,0.061],[0.939,0.107],[0.782,0.287],[0.634,0.409],[0.66,0.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.835294177485,0.011764706817,0.117647066303,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.237,24.347],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 465","np":4,"cix":2,"bm":0,"ix":465,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.007,-0.032],[-0.041,0],[-0.021,0.046],[0.024,0.015]],"o":[[-0.11,0.21],[0.037,0.145],[0.044,0],[0.002,-0.131],[0,0]],"v":[[0.027,-0.218],[-0.109,0.049],[0.006,0.218],[0.107,0.146],[0.068,-0.025]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[-0.004,-0.035],[0.035,0],[0.012,0.033],[-0.03,0.011]],"o":[[0.03,0.189],[-0.02,0.079],[-0.035,0],[-0.002,-0.081],[0,0]],"v":[[0.027,-0.179],[0.084,0.07],[0.004,0.178],[-0.068,0.116],[-0.02,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.011764706817,0.011764706817,0.011764706817,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.237,23.555],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 466","np":6,"cix":2,"bm":0,"ix":466,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.039,0],[0.02,0.046],[-0.039,0.014],[-0.003,-0.039]],"o":[[-0.039,0],[-0.002,-0.097],[0.099,0.017],[-0.025,0.105]],"v":[[-0.001,0.108],[-0.094,0.035],[-0.03,-0.108],[0.096,-0.022]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.835294177485,0.011764706817,0.117647066303,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.244,23.644],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 467","np":4,"cix":2,"bm":0,"ix":467,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-3.824],[-1.577,-2.898],[0,0],[0,3.533],[1.826,3.059],[0,0]],"o":[[0,3.533],[0,0],[1.577,-2.898],[0,-3.822],[0,0],[-1.824,3.058]],"v":[[-20.436,0.346],[-17.962,10.1],[17.964,10.1],[20.436,0.346],[17.542,-10.1],[-17.542,-10.1]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.768627510819,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[107.659,27.969],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 468","np":4,"cix":2,"bm":0,"ix":468,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.462,6.364],[0,0],[-7.756,0]],"o":[[0,0],[3.462,6.364],[7.756,0]],"v":[[17.963,-5.342],[-17.963,-5.342],[0,5.342]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.807843197093,0.066666666667,0.149019607843,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[107.66,43.408],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 469","np":4,"cix":2,"bm":0,"ix":469,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[3.566,-5.975],[0,0],[7.463,0.002]],"o":[[0,0],[-3.566,-5.975],[-7.469,0.002]],"v":[[-17.542,4.995],[17.542,4.995],[0.003,-4.995]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.807843197093,0.066666666667,0.149019607843,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[107.66,12.872],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 470","np":4,"cix":2,"bm":0,"ix":470,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-1.764],[0.273,-0.471],[0,0],[0.923,-0.506],[0,0],[0,1.763],[-1.764,0]],"o":[[0,0.583],[0,0],[-0.894,0.555],[0,0],[-1.764,0],[0,-1.764],[1.763,0.001]],"v":[[3.194,0],[2.764,1.604],[2.76,1.604],[0.033,3.193],[0.001,3.193],[-3.193,0],[0.001,-3.193]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.960784373564,0.764705942191,0.431372578939,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[86.451,106.51],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 471","np":4,"cix":2,"bm":0,"ix":471,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.764,0],[0,1.764],[1.763,0],[0,-1.763]],"o":[[1.763,0],[0,-1.763],[-1.764,0],[0,1.764]],"v":[[0,3.193],[3.193,0],[0,-3.193],[-3.193,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.960784373564,0.764705942191,0.431372578939,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[69.194,106.51],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 472","np":4,"cix":2,"bm":0,"ix":472,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.763,0],[0,1.764],[1.763,0],[0,-1.763]],"o":[[1.763,0],[0,-1.763],[-1.763,0],[0,1.764]],"v":[[0,3.193],[3.193,0],[0,-3.193],[-3.193,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.960784373564,0.764705942191,0.431372578939,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[34.68,106.51],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 473","np":4,"cix":2,"bm":0,"ix":473,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.763,0],[0,1.764],[1.763,0],[0,-1.763]],"o":[[1.763,0],[0,-1.763],[-1.763,0],[0,1.764]],"v":[[0,3.193],[3.193,0],[0,-3.193],[-3.193,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.960784373564,0.764705942191,0.431372578939,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[51.937,106.51],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 474","np":4,"cix":2,"bm":0,"ix":474,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.087,-0.375],[1.36,0],[0,1.764],[-0.019,0.138]],"o":[[-0.459,1.202],[-1.764,0],[0,-0.144],[1.908,0.728]],"v":[[3.088,-0.251],[0.106,1.809],[-3.088,-1.385],[-3.059,-1.809]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.960784373564,0.764705942191,0.431372578939,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[77.931,92.505],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 475","np":4,"cix":2,"bm":0,"ix":475,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-0.34],[1.763,0],[0.503,1.096],[-1.613,0.888]],"o":[[0,1.764],[-1.29,0],[2.238,-0.712],[0.099,0.308]],"v":[[3.046,-1.109],[-0.147,2.084],[-3.046,0.225],[2.892,-2.084]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.960784373564,0.764705942191,0.431372578939,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[43.668,92.229],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 476","np":4,"cix":2,"bm":0,"ix":476,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-0.475],[1.764,0],[0,1.764],[-0.163,0.385],[-2.097,0.132]],"o":[[0,1.764],[-1.763,0],[0,-0.446],[1.78,0.061],[0.186,0.404]],"v":[[3.192,-0.931],[-0.002,2.262],[-3.192,-0.931],[-2.939,-2.185],[2.903,-2.262]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.960784373564,0.764705942191,0.431372578939,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[60.779,92.051],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 477","np":4,"cix":2,"bm":0,"ix":477,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.093,-2.928],[7.192,2.135],[0.795,2.472],[-0.879,0.273],[-5.384,1.697],[-0.522,-1.308]],"o":[[-3.511,0.43],[-14.111,-4.191],[0.808,-0.344],[11.925,12.284],[1.193,1.491],[0.965,2.418]],"v":[[17.703,10.796],[1.815,8.911],[-17.702,-10.058],[-15.169,-10.985],[13.583,-1.799],[16.183,2.469]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.960784373564,0.764705942191,0.431372578939,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[65.955,24.413],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 478","np":4,"cix":2,"bm":0,"ix":478,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.077,-0.158],[0.544,-1.64],[-0.174,0.283],[-0.696,1.555]],"o":[[-0.752,1.55],[-0.11,0.331],[0.898,-1.455],[0.07,-0.156]],"v":[[1.081,-2.513],[-1.275,2.156],[-0.726,2.388],[1.314,-2.375]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.909803981407,0.717647058824,0.380392186782,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[46.93,28.156],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 479","np":4,"cix":2,"bm":0,"ix":479,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.054,-0.175],[1.801,-2.961],[1.086,-1.373],[0.891,-1.325],[-0.245,0.172],[-0.977,1.269],[-0.886,1.545],[-0.936,3.418]],"o":[[-1.017,3.316],[-0.91,1.495],[-0.992,1.254],[-0.164,0.244],[1.32,-0.928],[1.085,-1.411],[1.767,-3.08],[0.049,-0.178]],"v":[[5.123,-8.947],[0.805,0.521],[-2.172,4.838],[-5.283,8.538],[-4.872,8.95],[-1.538,5.326],[1.441,0.894],[5.398,-8.87]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.909803981407,0.717647058824,0.380392186782,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[45.895,33.344],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 480","np":4,"cix":2,"bm":0,"ix":480,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.328,-0.022],[5.857,10.393],[-0.093,-0.185],[-5.07,-2.907],[-6.271,0.692]],"o":[[-11.881,0.806],[-0.103,-0.183],[2.618,5.204],[5.485,3.146],[0.315,-0.035]],"v":[[14.676,7.372],[-14.632,-8.386],[-14.911,-8.222],[-3.354,4.154],[14.676,7.877]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.909803981407,0.717647058824,0.380392186782,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[66.828,38.45],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 481","np":4,"cix":2,"bm":0,"ix":481,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.355,0.163],[-2.791,3.559],[-0.917,1.982],[-0.024,2.081],[0.116,-0.246],[0.91,-1.854],[1.372,-1.718],[3.828,-1.918]],"o":[[4.104,-1.874],[1.347,-1.718],[0.861,-1.86],[0.003,-0.252],[-0.877,1.852],[-0.968,1.974],[-2.668,3.337],[-0.358,0.179]],"v":[[-7.559,10.015],[2.944,1.859],[6.367,-3.684],[8.225,-9.799],[7.728,-9.933],[5.485,-4.2],[1.968,1.381],[-7.87,9.484]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.909803981407,0.717647058824,0.380392186782,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[44.469,39.864],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 482","np":4,"cix":2,"bm":0,"ix":482,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.35,-0.421],[0.484,-0.41],[0.632,0.138],[-0.248,-0.428],[-0.761,0.799],[0.833,0.905]],"o":[[0.409,0.491],[-0.605,0.512],[-0.456,-0.099],[0.638,1.101],[0.884,-0.929],[-0.382,-0.415]],"v":[[0.617,-1.328],[0.423,0.464],[-1.344,0.45],[-1.96,1.252],[1.324,1.282],[1.227,-1.939]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.941176530427,0.694117647059,0.498039245605,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[60.185,58.235],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 483","np":4,"cix":2,"bm":0,"ix":483,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.506,0.168],[0.063,1.439],[2.029,-1.277]],"o":[[2.506,-0.168],[-0.063,-1.439],[-2.029,1.278]],"v":[[-1.229,1.737],[3.671,-0.271],[-1.488,-0.629]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784313725,0.270588235294,0.207843152214,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[46.415,45.553],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 484","np":4,"cix":2,"bm":0,"ix":484,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.456,0],[0,1.766],[1.456,0],[0,-1.766]],"o":[[1.456,0],[0,-1.766],[-1.456,0],[0,1.766]],"v":[[0,3.197],[2.636,0],[0,-3.197],[-2.636,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784313725,0.270588235294,0.207843152214,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[68.547,52.07],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 485","np":4,"cix":2,"bm":0,"ix":485,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.456,0],[0,1.766],[1.456,0],[0,-1.766]],"o":[[1.456,0],[0,-1.766],[-1.456,0],[0,1.766]],"v":[[0,3.197],[2.636,0],[0,-3.197],[-2.636,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784313725,0.270588235294,0.207843152214,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[49.117,52.07],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 486","np":4,"cix":2,"bm":0,"ix":486,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.295,1.898],[2.364,0.368],[0.295,-1.898],[-2.365,-0.368]],"o":[[0.295,-1.898],[-2.364,-0.367],[-0.295,1.898],[2.363,0.367]],"v":[[4.281,0.665],[0.535,-3.436],[-4.281,-0.665],[-0.534,3.437]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.690196078431,0.521568627451,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[71.38,60.695],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 487","np":4,"cix":2,"bm":0,"ix":487,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.389,0.137],[0.11,1.917],[2.389,-0.137],[-0.11,-1.918]],"o":[[2.389,-0.137],[-0.11,-1.918],[-2.388,0.137],[0.11,1.918]],"v":[[0.199,3.472],[4.325,-0.248],[-0.2,-3.472],[-4.325,0.248]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.690196078431,0.521568627451,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[44.861,60.55],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 488","np":4,"cix":2,"bm":0,"ix":488,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.295,0.113],[-0.805,-0.24],[-0.633,0.007],[0.036,0.158],[0.71,0.1],[0.843,-0.368]],"o":[[0.781,-0.298],[0.6,0.179],[0.167,-0.002],[-0.181,-0.804],[-0.918,-0.128],[-0.286,0.124]],"v":[[-1.97,0.232],[0.418,0.142],[2.195,0.812],[2.434,0.499],[0.462,-0.691],[-2.184,-0.276]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.941176530427,0.694117647059,0.498039245605,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[33.569,52.564],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 489","np":4,"cix":2,"bm":0,"ix":489,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.368,-0.135],[-0.63,-1.01],[-0.54,-0.813],[-0.11,0.246],[0.675,0.895],[1.283,0.422]],"o":[[1.127,0.413],[0.531,0.851],[0.125,0.188],[0.498,-1.113],[-0.825,-1.092],[-0.381,-0.126]],"v":[[-2.238,-2.264],[0.402,0.021],[1.53,2.738],[2.107,2.738],[1.189,-0.683],[-2.074,-2.858]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.941176530427,0.694117647059,0.498039245605,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[34.329,52.207],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 490","np":4,"cix":2,"bm":0,"ix":490,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.32,-0.042],[0.895,-0.713],[-0.096,-1.018],[-0.149,0.128],[-0.682,0.606],[-1.018,0.175]],"o":[[-1.124,0.148],[-0.732,0.583],[0.018,0.192],[0.676,-0.58],[0.773,-0.687],[0.313,-0.054]],"v":[[2.197,-2.029],[-0.855,-0.809],[-2.49,1.788],[-2.118,1.942],[-0.441,-0.141],[2.273,-1.468]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.941176530427,0.694117647059,0.498039245605,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[84.163,54.278],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 491","np":4,"cix":2,"bm":0,"ix":491,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.229,-0.165],[-0.649,-2.7],[-0.13,0.495],[-0.472,1.131],[-1.008,0.811]],"o":[[-2.009,1.445],[0.122,0.507],[0.301,-1.152],[0.495,-1.186],[0.217,-0.175]],"v":[[1.895,-3.615],[-1.764,3.273],[-0.749,3.273],[-0.004,-0.165],[2.195,-3.225]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.941176530427,0.694117647059,0.498039245605,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[83.526,53.276],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 492","np":4,"cix":2,"bm":0,"ix":492,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-6.79,1.892],[1.001,-1.179],[1.996,0.76],[0.254,0.567]],"o":[[0,0],[-5.07,1.532],[-0.43,-0.559],[0,0]],"v":[[7.314,-1.8],[5.68,0.427],[-6.273,-0.255],[-7.314,-1.959]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.980392216701,0.925490255917,0.89019613827,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[59.204,67.458],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 493","np":4,"cix":2,"bm":0,"ix":493,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-5.07,1.532],[1.776,-0.218],[1.726,2.241]],"o":[[-1.179,1.385],[-2.626,0.321],[1.996,0.759]],"v":[[5.977,-1.402],[1.327,1.762],[-5.977,-2.083]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.788235353956,0.388235324037,0.231372563979,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[58.907,69.286],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 494","np":4,"cix":2,"bm":0,"ix":494,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.202,-1.683],[3.194,0.323],[5.227,3.655],[2.588,5.003],[13.044,-6.445],[-0.641,8.657],[-9.161,3.87],[-0.879,0.272],[-1.439,0.241],[-1.899,-0.173],[-2.363,-1.016],[-2.504,-3.142],[-0.523,-1.308],[-0.092,-2.927]],"o":[[0,0],[-3.941,-0.401],[-3.479,-2.434],[0,0],[0,0],[0.526,-7.102],[0.808,-0.344],[1.292,-0.407],[2.024,-0.336],[2.728,0.244],[4.72,2.027],[1.193,1.491],[0.965,2.418],[0.158,4.842]],"v":[[23.322,15.585],[18.008,15.502],[3.266,10.179],[-6.13,-0.749],[-21.622,18.775],[-24.727,2.458],[-10.195,-16.482],[-7.661,-17.409],[-3.564,-18.384],[2.327,-18.602],[9.995,-16.627],[21.09,-8.223],[23.691,-3.955],[25.21,4.372]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.960784373564,0.764705942191,0.431372578939,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[58.448,30.837],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 495","np":4,"cix":2,"bm":0,"ix":495,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[2.506,0.168],[-0.063,1.439],[-2.029,-1.277]],"o":[[-2.506,-0.168],[0.063,-1.439],[2.029,1.278]],"v":[[1.229,1.737],[-3.672,-0.271],[1.488,-0.629]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784313725,0.270588235294,0.207843152214,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[70.404,45.553],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 496","np":4,"cix":2,"bm":0,"ix":496,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.252,1.336],[0.064,2.096],[0.517,2.055],[2.577,3.288],[0.474,-0.158],[0.241,-0.382],[-0.315,-0.426],[-0.95,-3.708],[0.455,-3.663]],"o":[[0.386,-2.044],[-0.066,-2.118],[-1.02,-4.052],[-0.32,-0.408],[-0.432,0.143],[-0.271,0.43],[2.274,3.065],[0.914,3.566],[-0.168,1.345]],"v":[[3.863,11.381],[4.517,5.314],[3.648,-0.981],[-1.808,-12.157],[-3.331,-12.559],[-4.266,-11.84],[-4.266,-10.26],[0.668,-0.16],[1.487,11.059]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.988235353956,0.58431372549,0.58431372549,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[81.279,30.627],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 497","np":4,"cix":2,"bm":0,"ix":497,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.3,1.434],[0,1.989],[-0.566,1.808],[-0.995,1.278],[-0.648,0.536],[-0.236,0.935],[0.714,0.139],[1.076,-1.34],[0.653,-1.949],[-0.059,-2.194],[-0.198,-1.133],[-0.364,-1.2]],"o":[[-0.406,-1.945],[0.001,-1.89],[0.483,-1.542],[0.518,-0.664],[0.689,-0.569],[0.165,-0.652],[-1.875,-0.363],[-1.288,1.602],[-0.698,2.084],[0.031,1.15],[0.218,1.246],[0.429,1.415]],"v":[[-1.201,9.834],[-1.713,3.668],[-0.936,-1.902],[1.287,-6.209],[3.058,-8.032],[4.688,-9.866],[3.765,-11.493],[-0.946,-8.442],[-3.852,-3.087],[-4.794,3.45],[-4.456,6.889],[-3.404,10.441]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.988235353956,0.58431372549,0.58431372549,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[36.272,30.573],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 498","np":4,"cix":2,"bm":0,"ix":498,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-2.022,-8.087],[-9.098,0.337],[-2.022,8.424],[1.011,3.707],[0,0],[0,0]],"o":[[0,0],[2.022,8.087],[9.098,-0.337],[2.022,-8.424],[-1.011,-3.706],[0,0],[0,0]],"v":[[-22.577,-9.267],[-21.566,11.626],[1.01,29.822],[21.566,10.952],[22.24,-11.962],[-0.674,-27.462],[-10.446,-30.159]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.831372608858,0.701960784314,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[58.725,51.419],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 499","np":4,"cix":2,"bm":0,"ix":499,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-8.962,-3.216],[0.542,-0.494],[0.962,2.886],[0,0],[-3.662,1.751]],"o":[[-0.397,0.545],[-7.375,6.733],[-0.962,-2.886],[0,0],[1.196,3.739]],"v":[[10.126,6.678],[8.719,8.24],[-6.352,8.56],[-10.126,-6.612],[-4.46,-12.102]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.960784373564,0.854902020623,0.431372578939,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[86.245,29.865],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 500","np":4,"cix":2,"bm":0,"ix":500,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[4.309,10.979],[-4.184,8.369],[-0.212,1.959],[-0.849,-2.318]],"o":[[0,0],[2.424,-0.279],[2.03,-4.056],[2.25,0.504],[3.528,9.619]],"v":[[4.586,10.945],[-10.266,6.347],[1.399,-3.949],[4.458,-12.789],[9.395,-8.614]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.960784373564,0.854902020623,0.431372578939,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[29.776,29.083],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 501","np":4,"cix":2,"bm":0,"ix":501,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[3.29,-0.122],[0,0],[0,0],[0,0],[-0.764,-4.986]],"o":[[1.975,-4.078],[0,0],[0,0],[-0.035,0.327],[-8.212,5.463]],"v":[[-9.379,7.57],[-8.404,-4.505],[8.673,-7.545],[8.968,-7.57],[9.379,1.023]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.815686334348,0.701960784314,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[58.799,79.804],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 502","np":4,"cix":2,"bm":0,"ix":502,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-3.527,2.245],[2.566,3.206],[1.603,-1.283],[0,0]],"o":[[0,0],[3.527,-2.245],[-2.565,-3.206],[-1.603,1.282],[0,0]],"v":[[-4.97,6.573],[2.084,5.611],[4.328,-4.008],[-4.329,-6.573],[-6.894,3.687]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.831372608858,0.701960784314,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[84.712,53.626],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 503","np":4,"cix":2,"bm":0,"ix":503,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.309,-3.495],[2.675,-1.657],[0,0],[0.923,-0.507],[10.126,0],[9.872,7.685],[-3.104,1.726],[-3.29,1.042],[-1.613,0.888],[-0.51,0.51],[-5.627,-0.196],[-2.097,0.131],[-2.687,0.558],[-1.305,-0.497],[-2.088,-0.375],[-1.824,-0.692]],"o":[[-2.36,2.055],[0,0],[-0.894,0.555],[-8.295,4.54],[-13.48,0],[2.036,-3.027],[2.889,-1.603],[2.238,-0.712],[0.753,-0.414],[0,0],[1.78,0.06],[2.43,-0.151],[0.975,0.811],[1.908,0.728],[2.847,0.51],[2.847,1.081]],"v":[[37,-0.265],[29.439,5.317],[29.436,5.317],[26.708,6.908],[-1.236,14.029],[-37,1.769],[-28.939,-6.656],[-19.153,-10.342],[-13.215,-12.65],[-11.304,-14.029],[-1.935,-12.929],[3.907,-13.006],[11.628,-14.029],[15.097,-12.1],[21.244,-10.541],[28.641,-8.973]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.988235353956,0.58431372549,0.58431372549,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[59.775,102.795],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 504","np":4,"cix":2,"bm":0,"ix":504,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[1.923,6.092],[-3.384,-0.696],[0,0]],"o":[[0,0],[-1.924,-6.092],[3.384,0.696],[0,0]],"v":[[4.489,6.788],[-4.809,1.658],[3.35,-7.054],[6.413,-0.266]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.831372608858,0.701960784314,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[32.902,53.721],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 505","np":4,"cix":2,"bm":0,"ix":505,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.013,-0.241],[-0.955,-3.64],[-0.556,-3.623],[0.472,-1.973],[-0.316,-1.723],[-3.074,-0.655],[1.906,3.555],[0.418,-0.271],[1.45,-0.32],[0.976,1.14],[0.032,1.809],[-0.037,2.014],[1.239,3.501],[0.081,4.272]],"o":[[-0.205,3.745],[0.93,3.54],[0.316,2.055],[-0.406,1.699],[0.55,2.996],[2.678,0.571],[-0.233,-0.437],[-1.177,0.761],[-1.526,0.336],[-1.209,-1.411],[-0.037,-2.023],[0.071,-3.836],[-1.424,-4.025],[-0.005,-0.243]],"v":[[-8.717,-19.725],[-7.734,-8.64],[-4.236,1.834],[-5.022,7.769],[-5.221,12.905],[0.64,19.397],[7.016,14.204],[5.721,13.864],[2.388,16.326],[-1.609,14.724],[-3.215,9.611],[-2.557,3.638],[-5.986,-7.1],[-8.341,-19.725]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.988235353956,0.58431372549,0.58431372549,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[92.42,59.356],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 506","np":4,"cix":2,"bm":0,"ix":506,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.01,-0.28],[-1.54,-2.477],[-2.56,-1.351],[-2.062,-2.338],[-0.019,-1.296],[0.523,-0.991],[-0.97,0.251],[0.977,2.565],[2.84,0.807],[1.503,0.774],[1.071,1.426],[0.06,3.469]],"o":[[-0.106,2.954],[1.491,2.397],[2.633,1.39],[0.845,0.958],[0.017,1.146],[-0.453,0.859],[2.926,-0.758],[-1.095,-2.876],[-1.613,-0.458],[-1.605,-0.825],[-2.012,-2.678],[-0.005,-0.281]],"v":[[-10.576,-13.4],[-8.103,-5.309],[-2.36,0.915],[5.478,5.001],[6.947,8.425],[5.811,11.785],[7.076,13.429],[9.705,6.429],[2.993,1.105],[-1.809,-0.424],[-5.727,-4.007],[-10.14,-13.4]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.988235353956,0.58431372549,0.58431372549,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.743,51.384],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 507","np":4,"cix":2,"bm":0,"ix":507,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.042,-0.093],[-0.951,-7.876],[1.295,-4.145],[1.38,-0.953],[1.679,-0.422],[-0.399,-0.697],[-1.733,0.639],[-0.909,1.749],[0.48,4.234],[-3.454,8.824]],"o":[[-3.389,7.606],[0.515,4.263],[-0.485,1.556],[-1.539,1.062],[-0.803,0.202],[1.043,1.821],[1.868,-0.689],[2.031,-3.906],[-1.011,-8.913],[0.037,-0.094]],"v":[[3.607,-22.404],[3.208,1.005],[2.54,13.665],[-0.09,17.825],[-4.792,18.811],[-5.551,20.675],[-0.318,21.782],[3.919,17.855],[5.201,5.05],[3.771,-22.335]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.988235353956,0.58431372549,0.58431372549,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[31.76,58.66],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 508","np":4,"cix":2,"bm":0,"ix":508,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.095,-0.21],[2.415,-2.021],[2.951,-1.956],[0.218,-3.084],[-0.68,-1.335],[-1.38,0.574],[-0.048,0.431],[0.427,1.02],[-0.355,1.291],[-2.759,1.107],[-1.873,2.415],[-0.951,2.557]],"o":[[-1.277,2.822],[-2.751,2.302],[-2.537,1.681],[-0.105,1.498],[0.543,1.066],[0.401,-0.167],[0.131,-1.149],[-0.519,-1.239],[0.827,-3.002],[2.747,-1.102],[1.694,-2.185],[0.079,-0.214]],"v":[[9.532,-13.197],[4.272,-5.339],[-5.286,-1.132],[-9.877,6.24],[-8.969,10.592],[-5.615,12.833],[-4.97,11.985],[-6.617,8.686],[-6.87,4.747],[-0.758,-1.191],[6.416,-5.677],[9.903,-13.04]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.988235353956,0.58431372549,0.58431372549,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[24.862,51.949],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 509","np":4,"cix":2,"bm":0,"ix":509,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.309,-3.495],[14.631,0],[9.872,7.686],[-3.104,1.725],[-3.207,3.206],[-0.26,0.542],[0,0],[0,0],[0,0],[0.003,-0.016],[-0.764,-4.986],[-0.359,-1.481],[-1.161,-0.962],[-4.081,-1.552]],"o":[[-10.232,8.904],[-13.48,0],[2.036,-3.027],[5.771,-3.207],[0.375,-0.375],[1.975,-4.078],[0,0],[0,0],[0,0],[-0.035,0.327],[0.192,1.279],[0.388,1.597],[4.342,3.611],[2.847,1.08]],"v":[[37,8.014],[-1.236,22.309],[-37,10.048],[-28.939,1.625],[-11.304,-5.75],[-10.355,-7.142],[-9.38,-19.217],[7.697,-22.257],[7.995,-22.309],[7.992,-22.283],[8.403,-13.689],[9.223,-9.537],[11.628,-5.75],[28.641,-0.693]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.831372608858,0.701960784314,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[59.775,94.517],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 510","np":4,"cix":2,"bm":0,"ix":510,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[5.018,-6.865],[0.542,-0.494],[0.962,2.886],[0,0],[-3.662,1.751],[-2.51,-0.731]],"o":[[-0.397,0.545],[-7.375,6.733],[-0.962,-2.886],[0,0],[1.773,-0.849],[7.131,2.081]],"v":[[7.617,5.858],[6.21,7.42],[-8.861,7.74],[-12.635,-7.432],[-6.969,-12.922],[-0.524,-13.422]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.960784373564,0.764705942191,0.431372578939,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[88.754,30.685],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 511","np":4,"cix":2,"bm":0,"ix":511,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[4.309,10.979],[0.247,1.03],[-7.086,-1.596],[-0.849,-2.318]],"o":[[0,0],[-0.324,-0.824],[-2.678,-11.193],[2.25,0.504],[3.528,9.619]],"v":[[5.026,9.474],[-9.826,4.876],[-10.685,2.099],[4.898,-14.259],[9.835,-10.085]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.960784373564,0.764705942191,0.431372578939,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[29.337,30.554],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 512","np":4,"cix":2,"bm":0,"ix":512,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-32.189],[12.287,-10.687],[14.631,0],[9.872,7.686],[0,18.712],[-32.192,0]],"o":[[0,17.561],[-10.231,8.904],[-13.48,0],[-13.708,-10.665],[0,-32.189],[32.192,0]],"v":[[58.289,-0.002],[38.236,43.994],[0,58.287],[-35.764,46.027],[-58.289,-0.002],[0,-58.287]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.039215686275,0.145098039216,0.250980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[58.539,58.537],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 513","np":4,"cix":2,"bm":0,"ix":513,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":900.000036657751,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Layer 6 Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[481.428,1017.073,0],"to":[-383.667,-19,0],"ti":[-94.43,111.951,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":99.886,"s":[207.428,459.073,0],"to":[248.915,-295.101,0],"ti":[-40.818,-168.311,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":199.77,"s":[837.428,535.073,0],"to":[88.301,364.109,0],"ti":[137.333,38.667,0]},{"t":298.000012137789,"s":[481.428,1017.073,0]}],"ix":2},"a":{"a":0,"k":[62.661,55.754,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0,0,0.667],"y":[1,1,1]},"o":{"x":[0.826,0.826,0.333],"y":[0,0,0]},"t":1,"s":[0,0,100]},{"i":{"x":[0,0,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":29.153,"s":[100,100,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":113.604,"s":[100,100,100]},{"t":138.341255634755,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.016,0],[0,0],[-0.023,0.023],[0,0]],"o":[[-0.043,0.016],[0.035,0.119],[0,0],[-0.025,-0.108]],"v":[[0.653,-0.723],[-0.712,0.62],[-0.615,0.715],[0.709,-0.609]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.021,0],[0,0],[-0.034,-0.033],[0,0]],"o":[[-0.074,-0.161],[0.034,-0.033],[0.013,0.136],[-0.018,0.015]],"v":[[-0.656,0.758],[0.594,-0.726],[0.717,-0.726],[-0.594,0.736]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.38,29.575],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":6,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.028,-0.028],[0,0],[0.03,0.028],[-0.03,0.028],[0,0],[-0.03,-0.028]],"o":[[0,0],[-0.028,0.028],[-0.043,-0.043],[0,0],[0.027,-0.028],[0.041,0.042]],"v":[[0.721,-0.604],[-0.603,0.72],[-0.706,0.72],[-0.719,0.603],[0.605,-0.72],[0.708,-0.72]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.378,29.579],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":4,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.013,0],[0,0],[0,0]],"o":[[-0.038,0.016],[0.074,0.074],[-0.01,-0.083]],"v":[[0.593,-0.641],[-0.629,0.559],[0.629,-0.551]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.02,0],[0,0],[-0.029,-0.03],[0,0]],"o":[[-0.052,-0.128],[0.029,-0.03],[0,0.107],[-0.015,0.015]],"v":[[-0.593,0.671],[0.539,-0.641],[0.645,-0.641],[-0.539,0.65]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.828,29.022],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":6,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.025,-0.025],[0,0],[0.024,0.025],[-0.025,0.025],[0,0],[-0.025,-0.025]],"o":[[0,0],[-0.025,0.025],[-0.025,-0.024],[0,0],[0.024,-0.025],[0.025,0.024]],"v":[[0.637,-0.547],[-0.547,0.637],[-0.637,0.637],[-0.637,0.547],[0.547,-0.637],[0.637,-0.637]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.828,29.025],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":4,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.018,0],[0,0],[-0.028,-0.028],[-0.028,0.03],[0,0],[0.028,0.028]],"o":[[-0.051,0.021],[-0.028,0.028],[0.028,0.03],[0,0],[0.028,-0.028],[-0.013,-0.014]],"v":[[0.579,-0.645],[-0.628,0.534],[-0.628,0.631],[-0.528,0.631],[0.628,-0.525],[0.628,-0.624]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.026,0],[0,0],[-0.037,-0.036],[0,0]],"o":[[-0.067,-0.164],[0.038,-0.036],[0,0.137],[-0.02,0.018]],"v":[[-0.579,0.679],[0.51,-0.643],[0.646,-0.643],[-0.51,0.651]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.724,28.918],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":6,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.031,-0.031],[0,0],[0.033,0.033],[-0.033,0.033],[0,0],[-0.033,-0.033]],"o":[[0,0],[-0.033,0.033],[-0.033,-0.033],[0,0],[0.033,-0.033],[0.031,0.033]],"v":[[0.639,-0.52],[-0.519,0.638],[-0.637,0.638],[-0.637,0.52],[0.521,-0.638],[0.639,-0.638]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.723,28.923],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":4,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.798,0.269],[-0.389,0.792],[0.795,-0.387],[0.286,-0.799]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[-0.008,-0.011],[0.007,-0.007],[0,0],[-0.01,0.009]],"v":[[-0.39,0.828],[-0.829,0.266],[0.286,-0.828],[0.829,-0.39]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.114,29.308],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":6,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.388,0.812],[-0.813,0.267],[0.286,-0.812],[0.813,-0.387]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.112,29.308],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":4,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[-0.018,-0.018],[0.018,0.018]],"v":[[-0.129,0.148],[0.129,-0.148]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.184,28.378],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9","np":4,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[-0.018,-0.018],[0.018,0.02]],"v":[[-0.147,0.165],[0.147,-0.165]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.845,28.211],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 10","np":4,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0.06,-0.061]],"v":[[0.099,0.038],[0.038,0.1],[-0.099,-0.038]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.97,28.337],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 11","np":4,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0.031,-0.075],[-0.011,-0.009],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-0.138,0.155],[0.08,0.406],[0.408,0.076],[0.154,-0.137],[0.088,-0.308],[-0.015,-0.409],[-0.107,-0.317],[-0.005,-0.217],[-0.063,-0.16],[-0.164,-0.26],[-0.256,-0.168],[-0.154,-0.068],[-0.217,-0.006],[-0.318,-0.106],[-0.41,-0.014],[-0.207,0.189]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-0.075,0.029],[0,0],[0,0],[0.026,-0.026],[0,0],[0,0],[0.021,-0.021],[0,0],[0,0],[-0.029,0.072],[-0.01,0.008]],"v":[[0.078,0.444],[-0.145,0.188],[-0.448,-0.011],[-0.32,-0.14],[-0.218,-0.039],[-0.294,-0.165],[-0.166,-0.293],[-0.064,-0.193],[-0.143,-0.316],[-0.013,-0.444],[0.216,-0.214],[0.448,0.078]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.83,28.196],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 12","np":6,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[-0.039,0.039],[0,0],[0,0],[-0.044,0.044],[0,0],[0,0],[0.015,0.015],[0.069,-0.036],[0,0],[0,0],[0.029,-0.072]],"v":[[0.087,-0.326],[-0.015,-0.426],[-0.125,-0.316],[-0.023,-0.215],[-0.164,-0.277],[-0.275,-0.165],[-0.174,-0.064],[-0.318,-0.122],[-0.428,-0.01],[-0.328,0.089],[-0.21,0.208],[0.08,0.426],[0.428,0.076],[0.171,-0.141]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.831,28.194],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 13","np":4,"cix":2,"bm":0,"ix":13,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[-0.018,-0.018],[0.018,0.018]],"v":[[-0.147,0.165],[0.147,-0.165]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.009,29.047],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 14","np":4,"cix":2,"bm":0,"ix":14,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0.06,-0.061]],"v":[[0.099,0.038],[0.038,0.1],[-0.099,-0.038]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.134,29.173],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 15","np":4,"cix":2,"bm":0,"ix":15,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0.031,-0.074],[0,0],[0,0],[0,0],[-0.057,0.057],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-0.138,0.156],[0.08,0.408],[0.41,0.077],[0.156,-0.135],[0.088,-0.307],[-0.013,-0.408],[-0.105,-0.315],[-0.005,-0.215],[-0.163,-0.258],[-0.255,-0.167],[-0.154,-0.066],[-0.217,-0.005],[-0.317,-0.104],[-0.41,-0.012],[-0.205,0.191]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-0.075,0.029],[0,0],[0,0],[0.026,-0.026],[0,0],[0,0],[0.022,-0.021],[0,0],[0,0],[-0.031,0.072],[-0.013,0.009]],"v":[[0.079,0.445],[-0.145,0.189],[-0.449,-0.01],[-0.318,-0.139],[-0.218,-0.038],[-0.294,-0.165],[-0.164,-0.294],[-0.063,-0.195],[-0.141,-0.315],[-0.012,-0.445],[0.218,-0.215],[0.449,0.077]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.996,29.031],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 16","np":6,"cix":2,"bm":0,"ix":16,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[-0.039,0.039],[0,0],[0,0],[-0.044,0.044],[0,0],[0,0],[0.014,0.014],[0.069,-0.036],[0,0],[0,0],[0.028,-0.069]],"v":[[0.085,-0.324],[-0.017,-0.424],[-0.127,-0.314],[-0.025,-0.214],[-0.166,-0.275],[-0.276,-0.165],[-0.174,-0.065],[-0.318,-0.122],[-0.428,-0.012],[-0.328,0.088],[-0.21,0.206],[0.08,0.424],[0.428,0.075],[0.17,-0.142]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.997,29.029],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 17","np":4,"cix":2,"bm":0,"ix":17,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0.06,-0.061]],"v":[[0.099,0.038],[0.038,0.1],[-0.099,-0.038]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.348,28.545],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 18","np":4,"cix":2,"bm":0,"ix":18,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0.005,0.007],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.057,0.057],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-0.229,0.014],[0.217,0.528],[0.521,0.221],[0.029,-0.242],[0.05,-0.34],[-0.032,-0.423],[-0.135,-0.523],[-0.226,-0.43],[-0.124,-0.331],[-0.283,-0.374],[-0.376,-0.28],[-0.275,-0.18],[-0.337,-0.118],[-0.437,-0.217],[-0.529,-0.126],[-0.347,0.057]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-0.01,-0.009],[0,0],[-0.005,-0.005],[0,0],[0,0],[0.026,-0.026],[0,0],[0,0],[0.021,-0.021],[0,0],[0,0],[0,0],[0,0],[-0.013,0.008]],"v":[[0.217,0.562],[-0.236,0.044],[-0.352,0.085],[-0.564,-0.128],[-0.434,-0.256],[-0.334,-0.156],[-0.41,-0.282],[-0.281,-0.411],[-0.178,-0.312],[-0.257,-0.433],[-0.127,-0.562],[0.084,-0.351],[0.063,-0.253],[0.564,0.221]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.278,28.49],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 19","np":6,"cix":2,"bm":0,"ix":19,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[-0.039,0.039],[0,0],[0,0],[-0.044,0.044],[0,0],[0,0],[0.014,0.015],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-0.031,-0.444],[-0.134,-0.544],[-0.243,-0.434],[-0.142,-0.334],[-0.283,-0.395],[-0.393,-0.285],[-0.29,-0.182],[-0.436,-0.241],[-0.544,-0.131],[-0.445,-0.029],[-0.349,0.068],[-0.23,0.027],[0.219,0.544],[0.544,0.219],[0.047,-0.25],[0.068,-0.349]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.278,28.489],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 20","np":4,"cix":2,"bm":0,"ix":20,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,-0.033],[-0.033,0],[0,0],[0,0.033],[0.033,0]],"o":[[-0.033,0],[0,0.053],[0,0],[0.033,0],[0,-0.053],[0,0]],"v":[[-0.937,-0.069],[-0.997,-0.01],[-0.937,0.069],[0.936,0.069],[0.994,0.01],[0.936,-0.069]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.048,0],[0,0],[0,0.047],[-0.046,0],[0,0],[0,-0.048]],"o":[[0,0],[-0.048,0],[0,-0.068],[0,0],[0.048,0],[0.002,0.066]],"v":[[0.936,0.095],[-0.937,0.095],[-1.023,0.01],[-0.937,-0.095],[0.936,-0.095],[1.02,-0.01]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.662,24.952],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 21","np":6,"cix":2,"bm":0,"ix":21,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.039,0],[0,0],[0,0.039],[-0.039,0],[0,0],[0,-0.039]],"o":[[0,0],[-0.039,0],[0,-0.059],[0,0],[0.039,0],[0,0.059]],"v":[[0.937,0.082],[-0.937,0.082],[-1.008,0.01],[-0.937,-0.082],[0.937,-0.082],[1.008,-0.01]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.661,24.952],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 22","np":4,"cix":2,"bm":0,"ix":22,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,-0.027],[-0.03,0],[0,0],[0,0.03],[0.029,0]],"o":[[-0.03,0],[0,0.03],[0,0],[0.029,0],[0,-0.029],[0,0]],"v":[[-0.837,-0.055],[-0.889,-0.003],[-0.837,0.051],[0.837,0.051],[0.889,-0.003],[0.837,-0.055]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.041,0],[0,0],[0,0.043],[-0.041,0],[0,0],[0,-0.041]],"o":[[0,0],[-0.041,0],[0,-0.043],[0,0],[0.041,0],[0,0.041]],"v":[[0.837,0.076],[-0.837,0.076],[-0.913,-0.001],[-0.837,-0.076],[0.837,-0.076],[0.913,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.663,24.172],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 23","np":6,"cix":2,"bm":0,"ix":23,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.034,0],[0,0],[0,0.034],[-0.034,0],[0,0],[0,-0.034]],"o":[[0,0],[-0.036,0],[0,-0.036],[0,0],[0.034,0],[0,0.034]],"v":[[0.838,0.064],[-0.838,0.064],[-0.902,0],[-0.838,-0.064],[0.838,-0.064],[0.902,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.662,24.171],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 24","np":4,"cix":2,"bm":0,"ix":24,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,-0.04],[-0.039,0],[0,0],[0,0.039],[0.039,0]],"o":[[-0.039,0],[0,0.039],[0,0],[0.039,0],[0,-0.038],[0,0]],"v":[[-0.818,-0.07],[-0.889,0.001],[-0.818,0.071],[0.819,0.071],[0.888,0.001],[0.819,-0.07]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.052,0],[0,0],[0,0.054],[-0.054,0],[0,0],[0,-0.053]],"o":[[0,0],[-0.052,0],[0,-0.054],[0,0],[0.052,0],[0,0.052]],"v":[[0.819,0.096],[-0.818,0.096],[-0.915,-0.001],[-0.818,-0.096],[0.819,-0.096],[0.915,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.662,24.024],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 25","np":6,"cix":2,"bm":0,"ix":25,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.046,0],[0,0],[0,0.046],[-0.046,0],[0,0],[0,-0.046]],"o":[[0,0],[-0.046,0],[0,-0.046],[0,0],[0.046,0],[0,0.046]],"v":[[0.819,0.083],[-0.819,0.083],[-0.902,-0.001],[-0.819,-0.083],[0.819,-0.083],[0.902,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.661,24.024],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 26","np":4,"cix":2,"bm":0,"ix":26,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.835,0.331],[0.836,0.331],[0.767,-0.32],[-0.753,-0.333]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0.001,-0.013],[0.01,0],[0.003,0.01]],"v":[[0.861,0.354],[-0.861,0.354],[-0.774,-0.354],[0.786,-0.34]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.662,24.528],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 27","np":6,"cix":2,"bm":0,"ix":27,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.848,0.343],[-0.764,-0.343],[0.776,-0.329],[0.848,0.343]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.663,24.527],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 28","np":4,"cix":2,"bm":0,"ix":28,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,-0.026],[0,0]],"v":[[0.196,0.013],[-0.196,0.013],[0.196,-0.013]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.665,23.259],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 29","np":4,"cix":2,"bm":0,"ix":29,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,-0.025],[0,0]],"v":[[0.22,0.012],[-0.22,0.012],[0.22,-0.012]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.249,23.608],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 30","np":4,"cix":2,"bm":0,"ix":30,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0.085,0.001]],"v":[[0.043,0.098],[-0.043,0.098],[-0.043,-0.098]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.25,23.784],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 31","np":4,"cix":2,"bm":0,"ix":31,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0.074,-0.031],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.077,0.035]],"v":[[-0.229,0.321],[0.237,0.321],[0.207,-0.01],[0.281,-0.322],[0.15,-0.322],[0.15,-0.179],[0.068,-0.179],[0.068,-0.322],[-0.063,-0.322],[-0.063,-0.179],[-0.152,-0.179],[-0.152,-0.322],[-0.283,-0.322],[-0.283,-0.035]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[-0.074,-0.023],[0,0],[0,0],[0.036,0],[0,0],[0,0],[0.03,0],[0,0],[0,0],[-0.071,0.03]],"v":[[0.265,0.347],[-0.257,0.347],[-0.232,0.009],[-0.306,-0.347],[-0.124,-0.347],[-0.124,-0.204],[-0.088,-0.347],[0.094,-0.347],[0.094,-0.204],[0.124,-0.347],[0.306,-0.347],[0.306,-0.022]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.249,23.608],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 32","np":6,"cix":2,"bm":0,"ix":32,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[-0.056,0],[0,0],[0,0],[-0.062,0],[0,0],[0,0],[0,0],[0.074,0.023],[0,0],[0,0],[0.072,-0.033]],"v":[[0.294,-0.192],[0.291,-0.335],[0.136,-0.335],[0.136,-0.192],[0.08,-0.335],[-0.076,-0.335],[-0.076,-0.192],[-0.138,-0.335],[-0.294,-0.335],[-0.294,-0.192],[-0.294,-0.025],[-0.243,0.335],[0.25,0.335],[0.221,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.25,23.609],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 33","np":4,"cix":2,"bm":0,"ix":33,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,-0.025],[0,0]],"v":[[0.22,0.012],[-0.22,0.012],[0.22,-0.012]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.067,23.608],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 34","np":4,"cix":2,"bm":0,"ix":34,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0.085,0.001]],"v":[[0.043,0.098],[-0.043,0.098],[-0.043,-0.098]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.068,23.784],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 35","np":4,"cix":2,"bm":0,"ix":35,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0.074,-0.031],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.075,0.035]],"v":[[-0.229,0.321],[0.236,0.321],[0.209,-0.01],[0.283,-0.322],[0.152,-0.322],[0.152,-0.179],[0.07,-0.179],[0.07,-0.322],[-0.062,-0.322],[-0.062,-0.179],[-0.15,-0.179],[-0.15,-0.322],[-0.281,-0.322],[-0.281,-0.035]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[-0.074,-0.023],[0,0],[0,0],[0.036,0],[0,0],[0,0],[0.031,0],[0,0],[0,0],[-0.072,0.03]],"v":[[0.265,0.347],[-0.255,0.347],[-0.232,0.009],[-0.307,-0.347],[-0.124,-0.347],[-0.124,-0.204],[-0.088,-0.347],[0.094,-0.347],[0.094,-0.204],[0.124,-0.347],[0.307,-0.347],[0.307,-0.022]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.068,23.608],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 36","np":6,"cix":2,"bm":0,"ix":36,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[-0.056,0],[0,0],[0,0],[-0.063,0],[0,0],[0,0],[0,0],[0.074,0.023],[0,0],[0,0],[0.071,-0.033]],"v":[[0.293,-0.192],[0.293,-0.335],[0.137,-0.335],[0.137,-0.192],[0.081,-0.335],[-0.074,-0.335],[-0.074,-0.192],[-0.137,-0.335],[-0.293,-0.335],[-0.293,-0.192],[-0.293,-0.025],[-0.242,0.335],[0.252,0.335],[0.222,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.068,23.609],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 37","np":4,"cix":2,"bm":0,"ix":37,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0.085,0.001]],"v":[[0.043,0.098],[-0.043,0.098],[-0.043,-0.098]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.662,23.492],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 38","np":4,"cix":2,"bm":0,"ix":38,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.002,0.008]],"v":[[-0.215,0.497],[0.218,0.497],[0.198,-0.18],[0.284,-0.235],[0.284,-0.494],[0.152,-0.494],[0.152,-0.351],[0.07,-0.351],[0.07,-0.494],[-0.061,-0.494],[-0.061,-0.351],[-0.149,-0.351],[-0.149,-0.494],[-0.281,-0.494],[-0.281,-0.236],[-0.167,-0.182]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,-0.014],[0,0],[0,0],[0,0],[0,0],[0.036,0],[0,0],[0,0],[0.032,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.243,0.522],[-0.243,0.522],[-0.195,-0.167],[-0.307,-0.221],[-0.307,-0.522],[-0.125,-0.522],[-0.125,-0.379],[-0.089,-0.522],[0.093,-0.522],[0.093,-0.379],[0.125,-0.522],[0.307,-0.522],[0.307,-0.223],[0.223,-0.169]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.651,23.432],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 39","np":6,"cix":2,"bm":0,"ix":39,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[-0.056,0],[0,0],[0,0],[-0.063,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.292,-0.365],[0.292,-0.508],[0.136,-0.508],[0.136,-0.365],[0.08,-0.508],[-0.075,-0.508],[-0.075,-0.365],[-0.138,-0.508],[-0.294,-0.508],[-0.294,-0.365],[-0.294,-0.229],[-0.182,-0.175],[-0.23,0.508],[0.23,0.508],[0.21,-0.175],[0.294,-0.229]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.652,23.431],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 40","np":4,"cix":2,"bm":0,"ix":40,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.016,0],[0,0],[-0.023,0.023],[0,0]],"o":[[-0.056,0.115],[0.022,0.023],[0.013,-0.096],[-0.012,-0.011]],"v":[[-0.656,-0.725],[0.614,0.714],[0.697,0.714],[-0.613,-0.706]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.022,0],[0,0],[-0.032,-0.032],[0,0]],"o":[[-0.061,-0.025],[0.046,-0.167],[0,0],[-0.031,0.151]],"v":[[0.655,0.758],[-0.73,-0.592],[-0.594,-0.727],[0.73,0.598]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.287,29.595],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 41","np":6,"cix":2,"bm":0,"ix":41,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.028,0.028],[0,0],[-0.028,0.03],[-0.028,-0.03],[0,0],[0.028,-0.03]],"o":[[0,0],[-0.028,-0.028],[0.041,-0.043],[0,0],[0.028,0.027],[-0.042,0.041]],"v":[[0.604,0.721],[-0.72,-0.603],[-0.72,-0.706],[-0.603,-0.719],[0.72,0.605],[0.72,0.708]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.286,29.598],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 42","np":4,"cix":2,"bm":0,"ix":42,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.013,0],[-0.019,-0.021],[0,0],[-0.019,0.02],[0.022,0.021],[0,0]],"o":[[-0.057,0.036],[0,0],[0.021,0.02],[0.022,-0.021],[0,0],[-0.01,-0.01]],"v":[[-0.591,-0.641],[-0.629,-0.551],[0.556,0.633],[0.629,0.633],[0.629,0.558],[-0.555,-0.626]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.02,0],[0,0],[-0.03,0.03],[-0.029,-0.03],[0,0],[0.029,-0.03]],"o":[[-0.052,-0.021],[-0.03,-0.03],[0.029,-0.03],[0,0],[0.029,0.03],[-0.015,0.013]],"v":[[0.593,0.671],[-0.645,-0.534],[-0.645,-0.641],[-0.539,-0.641],[0.646,0.543],[0.646,0.65]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.836,29.044],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 43","np":6,"cix":2,"bm":0,"ix":43,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.025,0.025],[0,0],[-0.025,0.024],[-0.025,-0.025],[0,0],[0.025,-0.025]],"o":[[0,0],[-0.025,-0.025],[0.024,-0.025],[0,0],[0.025,0.024],[-0.024,0.025]],"v":[[0.547,0.637],[-0.637,-0.547],[-0.637,-0.637],[-0.547,-0.637],[0.637,0.547],[0.637,0.637]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.835,29.048],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 44","np":4,"cix":2,"bm":0,"ix":44,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.026,0.028],[0,0],[0.028,-0.028]],"o":[[0.028,0.028],[0,-0.098],[-0.028,-0.028],[0,0.098]],"v":[[0.529,0.633],[0.627,0.633],[-0.529,-0.623],[-0.629,-0.623]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.025,0],[0,0],[-0.038,-0.036],[0,0]],"o":[[-0.067,-0.028],[0.038,-0.172],[0,0],[-0.02,0.154]],"v":[[0.578,0.679],[-0.647,-0.507],[-0.511,-0.643],[0.647,0.515]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.941,28.939],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 45","np":6,"cix":2,"bm":0,"ix":45,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.033,0.033],[0,0],[-0.033,0.033],[-0.033,-0.033],[0,0],[0.033,-0.033]],"o":[[0,0],[-0.033,-0.033],[0.033,-0.033],[0,0],[0.033,0.033],[-0.033,0.033]],"v":[[0.52,0.638],[-0.638,-0.52],[-0.638,-0.638],[-0.52,-0.638],[0.638,0.52],[0.638,0.638]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.94,28.942],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 46","np":4,"cix":2,"bm":0,"ix":46,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.793,-0.39],[0.388,0.794],[0.798,0.285],[-0.268,-0.799]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0.009,-0.008],[0.007,0.007],[-0.005,0.005]],"v":[[0.39,0.827],[-0.827,-0.39],[-0.268,-0.827],[0.827,0.286]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.554,29.333],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 47","np":6,"cix":2,"bm":0,"ix":47,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.812,-0.387],[-0.269,-0.812],[0.812,0.287],[0.387,0.812]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.556,29.33],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 48","np":4,"cix":2,"bm":0,"ix":48,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0.018,-0.018],[0,0]],"v":[[0.13,0.148],[-0.147,-0.13],[0.147,0.13]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[106.486,28.404],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 49","np":4,"cix":2,"bm":0,"ix":49,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0.018,-0.018],[0,0]],"v":[[0.147,0.165],[-0.165,-0.147],[0.165,0.147]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[106.652,29.065],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 50","np":4,"cix":2,"bm":0,"ix":50,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0.061,0.062]],"v":[[-0.038,0.099],[-0.099,0.038],[0.039,-0.099]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[106.525,29.188],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 51","np":4,"cix":2,"bm":0,"ix":51,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0.074,0.032],[0,0],[0,0],[0,0],[-0.057,-0.058],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.025,0.077]],"v":[[-0.405,0.081],[-0.076,0.411],[0.138,0.156],[0.309,0.09],[0.411,-0.012],[0.319,-0.107],[0.22,-0.005],[0.263,-0.163],[0.171,-0.256],[0.069,-0.156],[0.007,-0.219],[0.107,-0.318],[0.017,-0.41],[-0.188,-0.206]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[-0.036,-0.069],[0,0],[0,0],[0.027,0.026],[0,0],[0,0],[0.021,0.021],[0,0],[0,0],[-0.073,-0.028]],"v":[[-0.076,0.448],[-0.444,0.079],[-0.19,-0.145],[0.012,-0.448],[0.141,-0.32],[0.038,-0.219],[0.165,-0.296],[0.293,-0.165],[0.191,-0.066],[0.314,-0.145],[0.444,-0.014],[0.216,0.215]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[106.667,29.048],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 52","np":6,"cix":2,"bm":0,"ix":52,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[-0.039,-0.039],[0,0],[0,0],[-0.044,-0.045],[0,0],[0,0],[-0.015,0.015],[0.036,0.07],[0,0],[0,0],[0.069,0.031]],"v":[[0.325,0.089],[0.425,-0.014],[0.315,-0.124],[0.215,-0.023],[0.276,-0.165],[0.166,-0.273],[0.066,-0.173],[0.123,-0.318],[0.013,-0.428],[-0.088,-0.329],[-0.206,-0.21],[-0.425,0.081],[-0.075,0.428],[0.141,0.171]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[106.67,29.048],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 53","np":4,"cix":2,"bm":0,"ix":53,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0.018,-0.018],[0,0]],"v":[[0.147,0.165],[-0.165,-0.147],[0.165,0.145]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.815,28.23],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 54","np":4,"cix":2,"bm":0,"ix":54,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0.061,0.06]],"v":[[-0.038,0.099],[-0.099,0.038],[0.039,-0.099]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.691,28.354],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 55","np":4,"cix":2,"bm":0,"ix":55,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0.074,0.031],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.03,0.077]],"v":[[-0.406,0.081],[-0.079,0.409],[0.135,0.155],[0.308,0.088],[0.408,-0.014],[0.316,-0.107],[0.214,-0.007],[0.157,-0.064],[0.257,-0.163],[0.165,-0.256],[0.063,-0.156],[0.001,-0.219],[0.102,-0.32],[0.011,-0.411],[-0.193,-0.208]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[-0.036,-0.069],[0,0],[0,0],[0.026,0.027],[0,0],[0,0],[0.022,0.021],[0,0],[0,0],[-0.074,-0.03]],"v":[[-0.075,0.448],[-0.445,0.079],[-0.188,-0.145],[0.011,-0.448],[0.14,-0.32],[0.04,-0.219],[0.166,-0.294],[0.296,-0.163],[0.193,-0.064],[0.317,-0.143],[0.445,-0.014],[0.217,0.215]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.832,28.213],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 56","np":6,"cix":2,"bm":0,"ix":56,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[-0.039,-0.04],[0,0],[0,0],[-0.045,-0.044],[0,0],[0,0],[-0.014,0.014],[0.036,0.069],[0,0],[0,0],[0.076,0.033]],"v":[[0.327,0.089],[0.426,-0.013],[0.317,-0.124],[0.214,-0.024],[0.275,-0.165],[0.166,-0.275],[0.064,-0.175],[0.122,-0.319],[0.012,-0.429],[-0.09,-0.329],[-0.208,-0.211],[-0.426,0.079],[-0.079,0.429],[0.137,0.171]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.832,28.211],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 57","np":4,"cix":2,"bm":0,"ix":57,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0.061,0.06]],"v":[[-0.038,0.099],[-0.099,0.038],[0.039,-0.099]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[106.317,28.567],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 58","np":4,"cix":2,"bm":0,"ix":58,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.058,-0.057],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.005,0.008]],"v":[[-0.524,0.219],[-0.219,0.525],[0.245,0.033],[0.344,0.054],[0.427,-0.029],[0.527,-0.13],[0.436,-0.223],[0.333,-0.124],[0.376,-0.283],[0.285,-0.374],[0.182,-0.275],[0.121,-0.337],[0.221,-0.439],[0.129,-0.531],[-0.053,-0.348],[-0.012,-0.23]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-0.01,-0.01],[0.01,-0.008],[0,0],[0,0],[0,0],[0,0],[0.026,0.026],[0,0],[0,0],[0.021,0.022],[0,0],[0,0],[0,0],[0,0]],"v":[[-0.217,0.562],[-0.562,0.217],[-0.042,-0.234],[-0.083,-0.352],[0.129,-0.562],[0.257,-0.435],[0.157,-0.333],[0.283,-0.409],[0.413,-0.279],[0.311,-0.18],[0.434,-0.258],[0.562,-0.129],[0.354,0.084],[0.255,0.062]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[106.373,28.495],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 59","np":6,"cix":2,"bm":0,"ix":59,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[-0.039,-0.04],[0,0],[0,0],[-0.045,-0.044],[0,0],[0,0],[-0.014,0.015],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.445,-0.025],[0.544,-0.126],[0.435,-0.238],[0.332,-0.137],[0.393,-0.279],[0.284,-0.391],[0.182,-0.29],[0.24,-0.434],[0.13,-0.544],[0.027,-0.445],[-0.068,-0.348],[-0.027,-0.229],[-0.544,0.219],[-0.219,0.544],[0.25,0.048],[0.348,0.068]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[106.373,28.491],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 60","np":4,"cix":2,"bm":0,"ix":60,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,-0.033],[-0.033,0],[0,0],[0,0.033],[0.033,0]],"o":[[-0.033,0],[0,0.053],[0,0],[0.033,0],[0,-0.053],[0,0]],"v":[[-0.935,-0.069],[-0.995,-0.01],[-0.935,0.069],[0.938,0.069],[0.996,0.01],[0.938,-0.069]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.048,0],[0,0],[0,0.047],[-0.046,0],[0,0],[0,-0.048]],"o":[[0,0],[-0.047,0],[0,-0.068],[0,0],[0.048,0],[0,0.066]],"v":[[0.935,0.095],[-0.938,0.095],[-1.022,0.01],[-0.938,-0.095],[0.935,-0.095],[1.022,-0.01]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[107.008,24.952],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 61","np":6,"cix":2,"bm":0,"ix":61,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.041,0],[0,0],[0,0.039],[-0.039,0],[0,0],[0,-0.039]],"o":[[0,0],[-0.039,0],[0,-0.059],[0,0],[0.039,0],[0.002,0.059]],"v":[[0.936,0.082],[-0.938,0.082],[-1.009,0.01],[-0.938,-0.082],[0.936,-0.082],[1.008,-0.01]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[107.008,24.952],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 62","np":4,"cix":2,"bm":0,"ix":62,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,-0.027],[-0.03,0],[0,0],[0,0.03],[0.029,0]],"o":[[-0.03,0],[0,0.03],[0,0],[0.029,0],[0,-0.029],[0,0]],"v":[[-0.837,-0.055],[-0.889,-0.003],[-0.837,0.051],[0.837,0.051],[0.889,-0.003],[0.837,-0.055]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.042,0],[0,0],[0,0.043],[-0.041,0],[0,0],[0,-0.041]],"o":[[0,0],[-0.041,0],[0,-0.043],[0,0],[0.041,0],[0,0.041]],"v":[[0.837,0.076],[-0.837,0.076],[-0.913,-0.001],[-0.837,-0.076],[0.837,-0.076],[0.913,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[107.009,24.172],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 63","np":6,"cix":2,"bm":0,"ix":63,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.036,0],[0,0],[0,0.034],[-0.034,0],[0,0],[0,-0.034]],"o":[[0,0],[-0.034,0],[0,-0.036],[0,0],[0.034,0],[0,0.034]],"v":[[0.838,0.064],[-0.838,0.064],[-0.902,0],[-0.838,-0.064],[0.838,-0.064],[0.902,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[107.008,24.171],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 64","np":4,"cix":2,"bm":0,"ix":64,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,-0.04],[-0.039,0],[0,0],[0,0.039],[0.039,0]],"o":[[-0.039,0],[0,0.039],[0,0],[0.039,0],[0,-0.038],[0,0]],"v":[[-0.817,-0.07],[-0.888,0.001],[-0.817,0.071],[0.82,0.071],[0.89,0.001],[0.82,-0.07]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.054,0],[0,0],[0,0.054],[-0.054,0],[0,0],[0,-0.053]],"o":[[0,0],[-0.052,0],[0,-0.054],[0,0],[0.053,0],[0,0.052]],"v":[[0.818,0.096],[-0.819,0.096],[-0.915,-0.001],[-0.819,-0.096],[0.818,-0.096],[0.915,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[107.008,24.024],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 65","np":6,"cix":2,"bm":0,"ix":65,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.046,0],[0,0],[0,0.046],[-0.046,0],[0,0],[0,-0.046]],"o":[[0,0],[-0.046,0],[0,-0.046],[0,0],[0.046,0],[0,0.046]],"v":[[0.819,0.083],[-0.819,0.083],[-0.902,-0.001],[-0.819,-0.083],[0.819,-0.083],[0.902,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[107.008,24.024],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 66","np":4,"cix":2,"bm":0,"ix":66,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.835,0.331],[0.836,0.331],[0.767,-0.32],[-0.753,-0.333]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0.001,-0.013],[0.01,0],[0,0.01]],"v":[[0.861,0.354],[-0.861,0.354],[-0.774,-0.354],[0.787,-0.34]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[107.01,24.528],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 67","np":6,"cix":2,"bm":0,"ix":67,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.848,0.343],[-0.764,-0.343],[0.777,-0.329],[0.848,0.343]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[107.01,24.527],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 68","np":4,"cix":2,"bm":0,"ix":68,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,-0.026],[0,0]],"v":[[0.196,0.013],[-0.196,0.013],[0.196,-0.013]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[107.011,23.259],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 69","np":4,"cix":2,"bm":0,"ix":69,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,-0.025],[0,0]],"v":[[0.22,0.012],[-0.22,0.012],[0.22,-0.012]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[107.597,23.608],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 70","np":4,"cix":2,"bm":0,"ix":70,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0.085,0.001]],"v":[[0.043,0.098],[-0.043,0.098],[-0.043,-0.098]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[107.597,23.784],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 71","np":4,"cix":2,"bm":0,"ix":71,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0.073,-0.031],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.079,0.035]],"v":[[-0.229,0.321],[0.235,0.321],[0.206,-0.01],[0.279,-0.322],[0.148,-0.322],[0.148,-0.179],[0.066,-0.179],[0.066,-0.322],[-0.066,-0.322],[-0.066,-0.179],[-0.154,-0.179],[-0.154,-0.322],[-0.286,-0.322],[-0.286,-0.035]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[-0.074,-0.023],[0,0],[0,0],[0.036,0],[0,0],[0,0],[0.031,0],[0,0],[0,0],[-0.072,0.03]],"v":[[0.265,0.347],[-0.257,0.347],[-0.232,0.009],[-0.307,-0.347],[-0.124,-0.347],[-0.124,-0.204],[-0.088,-0.347],[0.094,-0.347],[0.094,-0.204],[0.124,-0.347],[0.307,-0.347],[0.307,-0.022]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[107.596,23.608],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 72","np":6,"cix":2,"bm":0,"ix":72,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[-0.056,0],[0,0],[0,0],[-0.063,0],[0,0],[0,0],[0,0],[0.074,0.023],[0,0],[0,0],[0.071,-0.033]],"v":[[0.293,-0.192],[0.293,-0.335],[0.137,-0.335],[0.137,-0.192],[0.081,-0.335],[-0.074,-0.335],[-0.074,-0.192],[-0.137,-0.335],[-0.293,-0.335],[-0.293,-0.192],[-0.293,-0.025],[-0.242,0.335],[0.252,0.335],[0.222,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[107.598,23.609],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 73","np":4,"cix":2,"bm":0,"ix":73,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,-0.025],[0,0]],"v":[[0.22,0.012],[-0.22,0.012],[0.22,-0.012]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[106.415,23.608],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 74","np":4,"cix":2,"bm":0,"ix":74,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0.085,0.001]],"v":[[0.043,0.098],[-0.043,0.098],[-0.043,-0.098]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[106.416,23.784],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 75","np":4,"cix":2,"bm":0,"ix":75,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0.074,-0.031],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.075,0.035]],"v":[[-0.227,0.321],[0.239,0.321],[0.209,-0.01],[0.283,-0.322],[0.152,-0.322],[0.152,-0.179],[0.07,-0.179],[0.07,-0.322],[-0.061,-0.322],[-0.061,-0.179],[-0.15,-0.179],[-0.15,-0.322],[-0.281,-0.322],[-0.281,-0.035]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[-0.074,-0.023],[0,0],[0,0],[0.036,0],[0,0],[0,0],[0.029,0],[0,0],[0,0],[-0.07,0.03]],"v":[[0.265,0.347],[-0.255,0.347],[-0.232,0.009],[-0.306,-0.347],[-0.124,-0.347],[-0.124,-0.204],[-0.088,-0.347],[0.095,-0.347],[0.095,-0.204],[0.124,-0.347],[0.306,-0.347],[0.306,-0.022]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[106.413,23.608],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 76","np":6,"cix":2,"bm":0,"ix":76,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[-0.056,0],[0,0],[0,0],[-0.062,0],[0,0],[0,0],[0,0],[0.074,0.023],[0,0],[0,0],[0.074,-0.033]],"v":[[0.294,-0.192],[0.291,-0.335],[0.136,-0.335],[0.136,-0.192],[0.08,-0.335],[-0.076,-0.335],[-0.076,-0.192],[-0.138,-0.335],[-0.294,-0.335],[-0.294,-0.192],[-0.294,-0.025],[-0.243,0.335],[0.249,0.335],[0.219,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[106.415,23.609],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 77","np":4,"cix":2,"bm":0,"ix":77,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0.085,0.001]],"v":[[0.043,0.098],[-0.043,0.098],[-0.043,-0.098]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[107.009,23.492],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 78","np":4,"cix":2,"bm":0,"ix":78,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.002,0.008]],"v":[[-0.215,0.497],[0.218,0.497],[0.198,-0.18],[0.284,-0.235],[0.284,-0.494],[0.152,-0.494],[0.152,-0.351],[0.07,-0.351],[0.07,-0.494],[-0.061,-0.494],[-0.061,-0.351],[-0.149,-0.351],[-0.149,-0.494],[-0.281,-0.494],[-0.281,-0.236],[-0.167,-0.182]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,-0.014],[0,0],[0,0],[0,0],[0,0],[0.036,0],[0,0],[0,0],[0.032,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.244,0.522],[-0.243,0.522],[-0.195,-0.167],[-0.307,-0.221],[-0.307,-0.522],[-0.125,-0.522],[-0.125,-0.379],[-0.089,-0.522],[0.093,-0.522],[0.093,-0.379],[0.125,-0.522],[0.307,-0.522],[0.307,-0.223],[0.223,-0.169]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[106.997,23.432],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 79","np":6,"cix":2,"bm":0,"ix":79,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[-0.056,0],[0,0],[0,0],[-0.062,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.295,-0.365],[0.295,-0.508],[0.137,-0.508],[0.137,-0.365],[0.081,-0.508],[-0.076,-0.508],[-0.076,-0.365],[-0.139,-0.508],[-0.295,-0.508],[-0.295,-0.365],[-0.295,-0.229],[-0.183,-0.175],[-0.231,0.508],[0.229,0.508],[0.209,-0.175],[0.295,-0.229]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[106.997,23.431],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 80","np":4,"cix":2,"bm":0,"ix":80,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,-0.033],[-0.033,0],[0,0],[0,0.032],[0.033,0]],"o":[[-0.033,0],[0,0.051],[0,0],[0.033,0],[0,-0.051],[0,0]],"v":[[-0.937,-0.069],[-0.997,-0.01],[-0.937,0.069],[0.936,0.069],[0.994,0.01],[0.936,-0.069]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.048,0],[0,0],[0,0.047],[-0.046,0],[0,0],[0,-0.048]],"o":[[0,0],[-0.048,0],[0,-0.068],[0,0],[0.048,0],[0.002,0.064]],"v":[[0.936,0.095],[-0.937,0.095],[-1.023,0.01],[-0.937,-0.095],[0.936,-0.095],[1.02,-0.008]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.662,20.14],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 81","np":6,"cix":2,"bm":0,"ix":81,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.039,0],[0,0],[0,0.039],[-0.039,0],[0,0],[0,-0.039]],"o":[[0,0],[-0.039,0],[0,-0.059],[0,0],[0.039,0],[0,0.059]],"v":[[0.937,0.082],[-0.937,0.082],[-1.008,0.01],[-0.937,-0.082],[0.937,-0.082],[1.008,-0.01]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.661,20.14],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 82","np":4,"cix":2,"bm":0,"ix":82,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,-0.027],[-0.03,0],[0,0],[0,0.028],[0.029,0]],"o":[[-0.03,0],[0,0.028],[0,0],[0.029,0],[0,-0.027],[0,0]],"v":[[-0.837,-0.053],[-0.889,-0.001],[-0.837,0.053],[0.837,0.053],[0.889,-0.001],[0.837,-0.053]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.041,0],[0,0],[0,0.041],[-0.041,0],[0,0],[0,-0.041]],"o":[[0,0],[-0.041,0],[0,-0.041],[0,0],[0.041,0],[0,0.041]],"v":[[0.837,0.076],[-0.837,0.076],[-0.913,-0.001],[-0.837,-0.076],[0.837,-0.076],[0.913,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.663,19.36],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 83","np":6,"cix":2,"bm":0,"ix":83,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.034,0],[0,0],[0,0.034],[-0.034,0],[0,0],[0,-0.034]],"o":[[0,0],[-0.036,0],[0,-0.036],[0,0],[0.034,0],[0,0.034]],"v":[[0.838,0.064],[-0.838,0.064],[-0.902,0],[-0.838,-0.064],[0.838,-0.064],[0.902,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.662,19.359],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 84","np":4,"cix":2,"bm":0,"ix":84,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,-0.04],[-0.039,0],[0,0],[0,0.039],[0.039,0]],"o":[[-0.039,0],[0,0.039],[0,0],[0.039,0],[0,-0.038],[0,0]],"v":[[-0.818,-0.07],[-0.889,0.001],[-0.818,0.071],[0.819,0.071],[0.888,0.001],[0.819,-0.07]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.052,0],[0,0],[0,0.054],[-0.054,0],[0,0],[0,-0.053]],"o":[[0,0],[-0.052,0],[0,-0.053],[0,0],[0.052,0],[0,0.054]],"v":[[0.819,0.096],[-0.818,0.096],[-0.915,-0.001],[-0.818,-0.096],[0.819,-0.096],[0.915,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.662,19.212],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 85","np":6,"cix":2,"bm":0,"ix":85,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.046,0],[0,0],[0,0.046],[-0.046,0],[0,0],[0,-0.046]],"o":[[0,0],[-0.046,0],[0,-0.046],[0,0],[0.046,0],[0,0.046]],"v":[[0.819,0.083],[-0.819,0.083],[-0.902,-0.001],[-0.819,-0.083],[0.819,-0.083],[0.902,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.661,19.213],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 86","np":4,"cix":2,"bm":0,"ix":86,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.835,0.331],[0.836,0.334],[0.767,-0.316],[-0.753,-0.329]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0.001,-0.013],[0.01,0],[0.003,0.011]],"v":[[0.861,0.355],[-0.861,0.353],[-0.774,-0.355],[0.786,-0.34]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.662,19.715],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 87","np":6,"cix":2,"bm":0,"ix":87,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.848,0.342],[-0.764,-0.342],[0.776,-0.329],[0.848,0.342]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.663,19.716],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 88","np":4,"cix":2,"bm":0,"ix":88,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,-0.026],[0,0]],"v":[[0.196,0.013],[-0.196,0.013],[0.196,-0.013]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.665,18.447],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 89","np":4,"cix":2,"bm":0,"ix":89,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,-0.026],[0,0]],"v":[[0.22,0.013],[-0.22,0.013],[0.22,-0.013]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.249,18.796],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 90","np":4,"cix":2,"bm":0,"ix":90,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0.085,0]],"v":[[0.043,0.098],[-0.043,0.098],[-0.043,-0.098]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.25,18.973],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 91","np":4,"cix":2,"bm":0,"ix":91,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0.074,-0.031],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.077,0.036]],"v":[[-0.229,0.321],[0.237,0.321],[0.207,-0.009],[0.281,-0.322],[0.15,-0.322],[0.15,-0.179],[0.068,-0.179],[0.068,-0.322],[-0.063,-0.322],[-0.063,-0.179],[-0.152,-0.179],[-0.152,-0.322],[-0.283,-0.322],[-0.283,-0.035]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[-0.074,-0.024],[0,0],[0,0],[0.036,0],[0,0],[0,0],[0.03,0],[0,0],[0,0],[-0.071,0.03]],"v":[[0.265,0.347],[-0.257,0.347],[-0.232,0.009],[-0.306,-0.347],[-0.124,-0.347],[-0.124,-0.204],[-0.088,-0.347],[0.094,-0.347],[0.094,-0.204],[0.124,-0.347],[0.306,-0.347],[0.306,-0.022]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.249,18.796],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 92","np":6,"cix":2,"bm":0,"ix":92,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[-0.056,0],[0,0],[0,0],[-0.062,0],[0,0],[0,0],[0,0],[0.074,0.025],[0,0],[0,0],[0.072,-0.031]],"v":[[0.294,-0.192],[0.291,-0.335],[0.136,-0.335],[0.136,-0.192],[0.08,-0.335],[-0.076,-0.335],[-0.076,-0.192],[-0.138,-0.335],[-0.294,-0.335],[-0.294,-0.192],[-0.294,-0.025],[-0.243,0.335],[0.25,0.335],[0.221,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.25,18.797],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 93","np":4,"cix":2,"bm":0,"ix":93,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,-0.026],[0,0]],"v":[[0.22,0.013],[-0.22,0.013],[0.22,-0.013]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.067,18.796],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 94","np":4,"cix":2,"bm":0,"ix":94,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0.085,0]],"v":[[0.043,0.098],[-0.043,0.098],[-0.043,-0.098]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.068,18.973],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 95","np":4,"cix":2,"bm":0,"ix":95,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0.074,-0.031],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.075,0.036]],"v":[[-0.229,0.321],[0.236,0.321],[0.209,-0.009],[0.283,-0.322],[0.152,-0.322],[0.152,-0.179],[0.07,-0.179],[0.07,-0.322],[-0.062,-0.322],[-0.062,-0.179],[-0.15,-0.179],[-0.15,-0.322],[-0.281,-0.322],[-0.281,-0.035]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[-0.074,-0.024],[0,0],[0,0],[0.036,0],[0,0],[0,0],[0.031,0],[0,0],[0,0],[-0.072,0.03]],"v":[[0.265,0.347],[-0.255,0.347],[-0.232,0.009],[-0.307,-0.347],[-0.124,-0.347],[-0.124,-0.204],[-0.088,-0.347],[0.094,-0.347],[0.094,-0.204],[0.124,-0.347],[0.307,-0.347],[0.307,-0.022]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.068,18.796],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 96","np":6,"cix":2,"bm":0,"ix":96,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[-0.056,0],[0,0],[0,0],[-0.063,0],[0,0],[0,0],[0,0],[0.074,0.025],[0,0],[0,0],[0.071,-0.031]],"v":[[0.293,-0.192],[0.293,-0.335],[0.137,-0.335],[0.137,-0.192],[0.081,-0.335],[-0.074,-0.335],[-0.074,-0.192],[-0.137,-0.335],[-0.293,-0.335],[-0.293,-0.192],[-0.293,-0.025],[-0.242,0.335],[0.252,0.335],[0.222,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.068,18.797],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 97","np":4,"cix":2,"bm":0,"ix":97,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0.085,0.001]],"v":[[0.043,0.098],[-0.043,0.098],[-0.043,-0.098]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.662,18.68],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 98","np":4,"cix":2,"bm":0,"ix":98,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.002,0.008]],"v":[[-0.215,0.497],[0.218,0.497],[0.198,-0.18],[0.284,-0.235],[0.284,-0.494],[0.152,-0.494],[0.152,-0.351],[0.07,-0.351],[0.07,-0.494],[-0.061,-0.494],[-0.061,-0.351],[-0.149,-0.351],[-0.149,-0.494],[-0.281,-0.494],[-0.281,-0.236],[-0.167,-0.182]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,-0.014],[0,0],[0,0],[0,0],[0,0],[0.036,0],[0,0],[0,0],[0.032,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.243,0.522],[-0.243,0.522],[-0.195,-0.167],[-0.307,-0.221],[-0.307,-0.522],[-0.125,-0.522],[-0.125,-0.379],[-0.089,-0.522],[0.093,-0.522],[0.093,-0.379],[0.125,-0.522],[0.307,-0.522],[0.307,-0.223],[0.223,-0.169]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.651,18.621],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 99","np":6,"cix":2,"bm":0,"ix":99,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[-0.056,0],[0,0],[0,0],[-0.063,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.292,-0.365],[0.292,-0.508],[0.136,-0.508],[0.136,-0.365],[0.08,-0.508],[-0.075,-0.508],[-0.075,-0.365],[-0.138,-0.508],[-0.294,-0.508],[-0.294,-0.365],[-0.294,-0.229],[-0.182,-0.175],[-0.23,0.508],[0.23,0.508],[0.21,-0.175],[0.294,-0.229]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[97.652,18.621],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 100","np":4,"cix":2,"bm":0,"ix":100,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,-0.033],[-0.033,0],[0,0],[0,0.032],[0.033,0]],"o":[[-0.033,0],[0,0.051],[0,0],[0.033,0],[0,-0.051],[0,0]],"v":[[-0.935,-0.069],[-0.995,-0.01],[-0.935,0.069],[0.938,0.069],[0.996,0.01],[0.938,-0.069]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.048,0],[0,0],[0,0.047],[-0.046,0],[0,0],[0,-0.048]],"o":[[0,0],[-0.047,0],[0,-0.068],[0,0],[0.048,0],[0,0.064]],"v":[[0.935,0.095],[-0.938,0.095],[-1.022,0.01],[-0.938,-0.095],[0.935,-0.095],[1.022,-0.008]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[107.008,20.14],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 101","np":6,"cix":2,"bm":0,"ix":101,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.041,0],[0,0],[0,0.039],[-0.039,0],[0,0],[0,-0.039]],"o":[[0,0],[-0.039,0],[0,-0.059],[0,0],[0.039,0],[0.002,0.059]],"v":[[0.936,0.082],[-0.938,0.082],[-1.009,0.01],[-0.938,-0.082],[0.936,-0.082],[1.008,-0.01]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[107.008,20.14],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 102","np":4,"cix":2,"bm":0,"ix":102,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,-0.027],[-0.03,0],[0,0],[0,0.028],[0.029,0]],"o":[[-0.03,0],[0,0.028],[0,0],[0.029,0],[0,-0.027],[0,0]],"v":[[-0.837,-0.053],[-0.889,-0.001],[-0.837,0.053],[0.837,0.053],[0.889,-0.001],[0.837,-0.053]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.042,0],[0,0],[0,0.041],[-0.041,0],[0,0],[0,-0.041]],"o":[[0,0],[-0.041,0],[0,-0.041],[0,0],[0.041,0],[0,0.041]],"v":[[0.837,0.076],[-0.837,0.076],[-0.913,-0.001],[-0.837,-0.076],[0.837,-0.076],[0.913,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[107.009,19.36],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 103","np":6,"cix":2,"bm":0,"ix":103,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.036,0],[0,0],[0,0.034],[-0.034,0],[0,0],[0,-0.034]],"o":[[0,0],[-0.034,0],[0,-0.036],[0,0],[0.034,0],[0,0.034]],"v":[[0.838,0.064],[-0.838,0.064],[-0.902,0],[-0.838,-0.064],[0.838,-0.064],[0.902,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[107.008,19.359],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 104","np":4,"cix":2,"bm":0,"ix":104,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,-0.04],[-0.039,0],[0,0],[0,0.039],[0.039,0]],"o":[[-0.039,0],[0,0.039],[0,0],[0.039,0],[0,-0.038],[0,0]],"v":[[-0.817,-0.07],[-0.888,0.001],[-0.817,0.071],[0.82,0.071],[0.89,0.001],[0.82,-0.07]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.054,0],[0,0],[0,0.054],[-0.054,0],[0,0],[0,-0.053]],"o":[[0,0],[-0.052,0],[0,-0.053],[0,0],[0.053,0],[0,0.054]],"v":[[0.818,0.096],[-0.819,0.096],[-0.915,-0.001],[-0.819,-0.096],[0.818,-0.096],[0.915,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[107.008,19.212],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 105","np":6,"cix":2,"bm":0,"ix":105,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.046,0],[0,0],[0,0.046],[-0.046,0],[0,0],[0,-0.046]],"o":[[0,0],[-0.046,0],[0,-0.046],[0,0],[0.046,0],[0,0.046]],"v":[[0.819,0.083],[-0.819,0.083],[-0.902,-0.001],[-0.819,-0.083],[0.819,-0.083],[0.902,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[107.008,19.213],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 106","np":4,"cix":2,"bm":0,"ix":106,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.835,0.331],[0.836,0.334],[0.767,-0.316],[-0.753,-0.329]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0.001,-0.013],[0.01,0],[0,0.011]],"v":[[0.861,0.355],[-0.861,0.353],[-0.774,-0.355],[0.787,-0.34]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[107.01,19.715],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 107","np":6,"cix":2,"bm":0,"ix":107,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.848,0.342],[-0.764,-0.342],[0.777,-0.329],[0.848,0.342]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[107.01,19.716],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 108","np":4,"cix":2,"bm":0,"ix":108,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,-0.026],[0,0]],"v":[[0.196,0.013],[-0.196,0.013],[0.196,-0.013]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[107.011,18.447],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 109","np":4,"cix":2,"bm":0,"ix":109,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,-0.026],[0,0]],"v":[[0.22,0.013],[-0.22,0.013],[0.22,-0.013]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[107.597,18.796],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 110","np":4,"cix":2,"bm":0,"ix":110,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0.085,0]],"v":[[0.043,0.098],[-0.043,0.098],[-0.043,-0.098]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[107.597,18.973],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 111","np":4,"cix":2,"bm":0,"ix":111,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0.073,-0.031],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.079,0.036]],"v":[[-0.229,0.321],[0.235,0.321],[0.206,-0.009],[0.279,-0.322],[0.148,-0.322],[0.148,-0.179],[0.066,-0.179],[0.066,-0.322],[-0.066,-0.322],[-0.066,-0.179],[-0.154,-0.179],[-0.154,-0.322],[-0.286,-0.322],[-0.286,-0.035]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[-0.074,-0.024],[0,0],[0,0],[0.036,0],[0,0],[0,0],[0.031,0],[0,0],[0,0],[-0.072,0.03]],"v":[[0.265,0.347],[-0.257,0.347],[-0.232,0.009],[-0.307,-0.347],[-0.124,-0.347],[-0.124,-0.204],[-0.088,-0.347],[0.094,-0.347],[0.094,-0.204],[0.124,-0.347],[0.307,-0.347],[0.307,-0.022]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[107.596,18.796],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 112","np":6,"cix":2,"bm":0,"ix":112,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[-0.056,0],[0,0],[0,0],[-0.063,0],[0,0],[0,0],[0,0],[0.074,0.025],[0,0],[0,0],[0.071,-0.031]],"v":[[0.293,-0.192],[0.293,-0.335],[0.137,-0.335],[0.137,-0.192],[0.081,-0.335],[-0.074,-0.335],[-0.074,-0.192],[-0.137,-0.335],[-0.293,-0.335],[-0.293,-0.192],[-0.293,-0.025],[-0.242,0.335],[0.252,0.335],[0.222,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[107.598,18.797],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 113","np":4,"cix":2,"bm":0,"ix":113,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,-0.026],[0,0]],"v":[[0.22,0.013],[-0.22,0.013],[0.22,-0.013]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[106.415,18.796],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 114","np":4,"cix":2,"bm":0,"ix":114,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0.085,0]],"v":[[0.043,0.098],[-0.043,0.098],[-0.043,-0.098]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[106.416,18.973],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 115","np":4,"cix":2,"bm":0,"ix":115,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0.074,-0.031],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.075,0.036]],"v":[[-0.227,0.321],[0.239,0.321],[0.209,-0.009],[0.283,-0.322],[0.152,-0.322],[0.152,-0.179],[0.07,-0.179],[0.07,-0.322],[-0.061,-0.322],[-0.061,-0.179],[-0.15,-0.179],[-0.15,-0.322],[-0.281,-0.322],[-0.281,-0.035]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[-0.074,-0.024],[0,0],[0,0],[0.036,0],[0,0],[0,0],[0.029,0],[0,0],[0,0],[-0.07,0.03]],"v":[[0.265,0.347],[-0.255,0.347],[-0.232,0.009],[-0.306,-0.347],[-0.124,-0.347],[-0.124,-0.204],[-0.088,-0.347],[0.095,-0.347],[0.095,-0.204],[0.124,-0.347],[0.306,-0.347],[0.306,-0.022]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[106.413,18.796],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 116","np":6,"cix":2,"bm":0,"ix":116,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[-0.056,0],[0,0],[0,0],[-0.062,0],[0,0],[0,0],[0,0],[0.074,0.025],[0,0],[0,0],[0.074,-0.031]],"v":[[0.294,-0.192],[0.291,-0.335],[0.136,-0.335],[0.136,-0.192],[0.08,-0.335],[-0.076,-0.335],[-0.076,-0.192],[-0.138,-0.335],[-0.294,-0.335],[-0.294,-0.192],[-0.294,-0.025],[-0.243,0.335],[0.249,0.335],[0.219,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[106.415,18.797],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 117","np":4,"cix":2,"bm":0,"ix":117,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0.085,0.001]],"v":[[0.043,0.098],[-0.043,0.098],[-0.043,-0.098]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[107.009,18.68],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 118","np":4,"cix":2,"bm":0,"ix":118,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.002,0.008]],"v":[[-0.215,0.497],[0.218,0.497],[0.198,-0.18],[0.284,-0.235],[0.284,-0.494],[0.152,-0.494],[0.152,-0.351],[0.07,-0.351],[0.07,-0.494],[-0.061,-0.494],[-0.061,-0.351],[-0.149,-0.351],[-0.149,-0.494],[-0.281,-0.494],[-0.281,-0.236],[-0.167,-0.182]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,-0.014],[0,0],[0,0],[0,0],[0,0],[0.036,0],[0,0],[0,0],[0.032,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.244,0.522],[-0.243,0.522],[-0.195,-0.167],[-0.307,-0.221],[-0.307,-0.522],[-0.125,-0.522],[-0.125,-0.379],[-0.089,-0.522],[0.093,-0.522],[0.093,-0.379],[0.125,-0.522],[0.307,-0.522],[0.307,-0.223],[0.223,-0.169]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[106.997,18.621],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 119","np":6,"cix":2,"bm":0,"ix":119,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[-0.056,0],[0,0],[0,0],[-0.062,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.295,-0.365],[0.295,-0.508],[0.137,-0.508],[0.137,-0.365],[0.081,-0.508],[-0.076,-0.508],[-0.076,-0.365],[-0.139,-0.508],[-0.295,-0.508],[-0.295,-0.365],[-0.295,-0.229],[-0.183,-0.175],[-0.231,0.508],[0.229,0.508],[0.209,-0.175],[0.295,-0.229]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[106.997,18.621],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 120","np":4,"cix":2,"bm":0,"ix":120,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,-0.033],[-0.033,0],[0,0],[0,0.032],[0.033,0]],"o":[[-0.033,0],[0,0.051],[0,0],[0.033,0],[0,-0.051],[0,0]],"v":[[-0.937,-0.069],[-0.997,-0.01],[-0.937,0.069],[0.936,0.069],[0.994,0.01],[0.936,-0.069]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.048,0],[0,0],[0,0.047],[-0.046,0],[0,0],[0,-0.048]],"o":[[0,0],[-0.048,0],[0,-0.068],[0,0],[0.048,0],[-0.002,0.064]],"v":[[0.936,0.095],[-0.937,0.095],[-1.023,0.01],[-0.937,-0.095],[0.936,-0.095],[1.023,-0.008]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.33,20.14],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 121","np":6,"cix":2,"bm":0,"ix":121,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.039,0],[0,0],[0,0.039],[-0.039,0],[0,0],[0,-0.039]],"o":[[0,0],[-0.039,0],[0,-0.059],[0,0],[0.039,0],[0,0.059]],"v":[[0.937,0.082],[-0.937,0.082],[-1.008,0.01],[-0.937,-0.082],[0.937,-0.082],[1.008,-0.01]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.328,20.14],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 122","np":4,"cix":2,"bm":0,"ix":122,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,-0.027],[-0.03,0],[0,0],[0,0.028],[0.029,0]],"o":[[-0.03,0],[0,0.028],[0,0],[0.029,0],[0,-0.027],[0,0]],"v":[[-0.839,-0.053],[-0.892,-0.001],[-0.839,0.053],[0.836,0.053],[0.888,-0.001],[0.836,-0.053]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.041,0],[0,0],[0,0.041],[-0.041,0],[0,0],[0,-0.041]],"o":[[0,0],[-0.041,0],[0,-0.041],[0,0],[0.041,0],[0,0.041]],"v":[[0.837,0.076],[-0.837,0.076],[-0.913,-0.001],[-0.837,-0.076],[0.837,-0.076],[0.913,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.33,19.36],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 123","np":6,"cix":2,"bm":0,"ix":123,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.034,0],[0,0],[0,0.034],[-0.034,0],[0,0],[0,-0.034]],"o":[[0,0],[-0.034,0],[0,-0.036],[0,0],[0.034,0],[0,0.034]],"v":[[0.838,0.064],[-0.838,0.064],[-0.902,0],[-0.838,-0.064],[0.838,-0.064],[0.902,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.33,19.359],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 124","np":4,"cix":2,"bm":0,"ix":124,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,-0.04],[-0.039,0],[0,0],[0,0.039],[0.039,0]],"o":[[-0.039,0],[0,0.039],[0,0],[0.039,0],[0,-0.038],[0,0]],"v":[[-0.818,-0.07],[-0.889,0.001],[-0.818,0.071],[0.819,0.071],[0.888,0.001],[0.819,-0.07]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.052,0],[0,0],[0,0.054],[-0.054,0],[0,0],[0,-0.053]],"o":[[0,0],[-0.052,0],[0,-0.053],[0,0],[0.052,0],[-0.002,0.054]],"v":[[0.819,0.096],[-0.818,0.096],[-0.915,-0.001],[-0.818,-0.096],[0.819,-0.096],[0.915,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.329,19.212],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 125","np":6,"cix":2,"bm":0,"ix":125,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.046,0],[0,0],[0,0.046],[-0.046,0],[0,0],[0,-0.046]],"o":[[0,0],[-0.046,0],[0,-0.046],[0,0],[0.046,0],[0,0.046]],"v":[[0.819,0.083],[-0.819,0.083],[-0.902,-0.001],[-0.819,-0.083],[0.819,-0.083],[0.902,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.329,19.213],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 126","np":4,"cix":2,"bm":0,"ix":126,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.835,0.331],[0.836,0.334],[0.768,-0.316],[-0.753,-0.329]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0.001,-0.013],[0.01,0],[0.002,0.011]],"v":[[0.861,0.355],[-0.861,0.353],[-0.774,-0.355],[0.787,-0.34]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.33,19.715],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 127","np":6,"cix":2,"bm":0,"ix":127,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.848,0.342],[-0.763,-0.342],[0.777,-0.329],[0.848,0.342]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.329,19.716],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 128","np":4,"cix":2,"bm":0,"ix":128,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,-0.026],[0,0]],"v":[[0.196,0.013],[-0.196,0.013],[0.196,-0.013]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.333,18.447],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 129","np":4,"cix":2,"bm":0,"ix":129,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,-0.026],[0,0]],"v":[[0.22,0.013],[-0.22,0.013],[0.22,-0.013]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.917,18.796],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 130","np":4,"cix":2,"bm":0,"ix":130,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0.085,0]],"v":[[0.043,0.098],[-0.043,0.098],[-0.043,-0.098]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.918,18.973],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 131","np":4,"cix":2,"bm":0,"ix":131,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0.074,-0.031],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.077,0.036]],"v":[[-0.228,0.321],[0.238,0.321],[0.208,-0.009],[0.282,-0.322],[0.151,-0.322],[0.151,-0.179],[0.069,-0.179],[0.069,-0.322],[-0.062,-0.322],[-0.062,-0.179],[-0.151,-0.179],[-0.151,-0.322],[-0.282,-0.322],[-0.282,-0.035]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[-0.074,-0.024],[0,0],[0,0],[0.036,0],[0,0],[0,0],[0.032,0],[0,0],[0,0],[-0.072,0.03]],"v":[[0.264,0.347],[-0.258,0.347],[-0.233,0.009],[-0.307,-0.347],[-0.125,-0.347],[-0.125,-0.204],[-0.089,-0.347],[0.093,-0.347],[0.093,-0.204],[0.125,-0.347],[0.307,-0.347],[0.307,-0.022]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.916,18.796],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 132","np":6,"cix":2,"bm":0,"ix":132,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[-0.056,0],[0,0],[0,0],[-0.063,0],[0,0],[0,0],[0,0],[0.074,0.025],[0,0],[0,0],[0.071,-0.031]],"v":[[0.293,-0.192],[0.293,-0.335],[0.137,-0.335],[0.137,-0.192],[0.081,-0.335],[-0.074,-0.335],[-0.074,-0.192],[-0.137,-0.335],[-0.293,-0.335],[-0.293,-0.192],[-0.293,-0.025],[-0.242,0.335],[0.252,0.335],[0.222,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.918,18.797],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 133","np":4,"cix":2,"bm":0,"ix":133,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,-0.026],[0,0]],"v":[[0.22,0.013],[-0.22,0.013],[0.22,-0.013]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.735,18.796],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 134","np":4,"cix":2,"bm":0,"ix":134,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0.085,0]],"v":[[0.043,0.098],[-0.043,0.098],[-0.043,-0.098]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.736,18.973],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 135","np":4,"cix":2,"bm":0,"ix":135,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0.076,-0.031],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.075,0.036]],"v":[[-0.229,0.321],[0.235,0.321],[0.206,-0.009],[0.281,-0.322],[0.15,-0.322],[0.15,-0.179],[0.068,-0.179],[0.068,-0.322],[-0.062,-0.322],[-0.062,-0.179],[-0.15,-0.179],[-0.15,-0.322],[-0.281,-0.322],[-0.281,-0.035]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[-0.074,-0.024],[0,0],[0,0],[0.036,0],[0,0],[0,0],[0.031,0],[0,0],[0,0],[-0.072,0.03]],"v":[[0.265,0.347],[-0.257,0.347],[-0.232,0.009],[-0.307,-0.347],[-0.124,-0.347],[-0.124,-0.204],[-0.088,-0.347],[0.094,-0.347],[0.094,-0.204],[0.124,-0.347],[0.307,-0.347],[0.307,-0.022]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.735,18.796],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 136","np":6,"cix":2,"bm":0,"ix":136,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[-0.056,0],[0,0],[0,0],[-0.063,0],[0,0],[0,0],[0,0],[0.074,0.025],[0,0],[0,0],[0.072,-0.031]],"v":[[0.293,-0.192],[0.293,-0.335],[0.137,-0.335],[0.137,-0.192],[0.081,-0.335],[-0.074,-0.335],[-0.074,-0.192],[-0.137,-0.335],[-0.293,-0.335],[-0.293,-0.192],[-0.293,-0.025],[-0.242,0.335],[0.25,0.335],[0.221,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.736,18.797],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 137","np":4,"cix":2,"bm":0,"ix":137,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0.085,0.001]],"v":[[0.043,0.098],[-0.043,0.098],[-0.043,-0.098]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.328,18.68],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 138","np":4,"cix":2,"bm":0,"ix":138,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.002,0.008]],"v":[[-0.215,0.497],[0.218,0.497],[0.198,-0.18],[0.284,-0.235],[0.282,-0.494],[0.151,-0.494],[0.151,-0.351],[0.069,-0.351],[0.069,-0.494],[-0.062,-0.494],[-0.062,-0.351],[-0.151,-0.351],[-0.151,-0.494],[-0.282,-0.494],[-0.282,-0.236],[-0.169,-0.182]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,-0.014],[0,0],[0,0],[0,0],[0,0],[0.036,0],[0,0],[0,0],[0.032,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.244,0.522],[-0.243,0.522],[-0.195,-0.167],[-0.307,-0.221],[-0.307,-0.522],[-0.125,-0.522],[-0.125,-0.379],[-0.089,-0.522],[0.093,-0.522],[0.093,-0.379],[0.125,-0.522],[0.307,-0.522],[0.307,-0.223],[0.223,-0.169]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.317,18.621],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 139","np":6,"cix":2,"bm":0,"ix":139,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[-0.056,0],[0,0],[0,0],[-0.063,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.292,-0.365],[0.292,-0.508],[0.136,-0.508],[0.136,-0.365],[0.08,-0.508],[-0.075,-0.508],[-0.075,-0.365],[-0.138,-0.508],[-0.294,-0.508],[-0.294,-0.365],[-0.294,-0.229],[-0.182,-0.175],[-0.23,0.508],[0.23,0.508],[0.21,-0.175],[0.294,-0.229]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.32,18.621],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 140","np":4,"cix":2,"bm":0,"ix":140,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.08],[-0.078,0],[0,-0.08],[0.081,0]],"o":[[0,-0.08],[0.081,0],[0,0.08],[-0.08,0]],"v":[[-0.144,0],[-0.001,-0.144],[0.144,0],[-0.001,0.144]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.768,25.19],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 141","np":4,"cix":2,"bm":0,"ix":141,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.08],[-0.08,0],[0,-0.08],[0.081,0]],"o":[[0,-0.08],[0.081,0],[0,0.08],[-0.08,0]],"v":[[-0.144,0],[-0.001,-0.144],[0.144,0],[-0.001,0.144]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.623,25.19],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 142","np":4,"cix":2,"bm":0,"ix":142,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.08],[-0.08,0],[0,-0.08],[0.081,0]],"o":[[0,-0.08],[0.081,0],[0,0.08],[-0.08,0]],"v":[[-0.144,0],[-0.001,-0.144],[0.144,0],[-0.001,0.144]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.623,24.349],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 143","np":4,"cix":2,"bm":0,"ix":143,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.08],[-0.078,0],[0,-0.08],[0.081,0]],"o":[[0,-0.08],[0.081,0],[0,0.08],[-0.08,0]],"v":[[-0.144,0],[-0.001,-0.144],[0.144,0],[-0.001,0.144]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[99.768,24.349],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 144","np":4,"cix":2,"bm":0,"ix":144,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.08],[-0.08,0],[0,-0.08],[0.081,0]],"o":[[0,-0.08],[0.081,0],[0,0.08],[-0.08,0]],"v":[[-0.144,0],[-0.001,-0.144],[0.144,0],[-0.001,0.144]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.196,24.761],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 145","np":4,"cix":2,"bm":0,"ix":145,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.458,0],[0,0.459],[0,0],[0,0],[0,0]],"o":[[-0.458,0],[0,0],[0,0],[0,0],[0,0.457]],"v":[[0.001,0.986],[-0.829,0.157],[-0.829,-0.986],[0.829,-0.986],[0.829,0.159]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.20000001496,0.6,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[100.194,24.913],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 146","np":4,"cix":2,"bm":0,"ix":146,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.08],[-0.08,0],[0,-0.08],[0.081,0]],"o":[[0,-0.08],[0.081,0],[0,0.08],[-0.078,0]],"v":[[-0.144,0],[-0.001,-0.144],[0.144,0],[-0.001,0.144]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[104.128,25.19],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 147","np":4,"cix":2,"bm":0,"ix":147,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.08],[-0.08,0],[0,-0.08],[0.079,0]],"o":[[0,-0.08],[0.081,0],[0,0.08],[-0.078,0]],"v":[[-0.144,0],[-0.001,-0.144],[0.144,0],[-0.001,0.144]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[104.983,25.19],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 148","np":4,"cix":2,"bm":0,"ix":148,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.08],[-0.08,0],[0,-0.08],[0.079,0]],"o":[[0,-0.08],[0.081,0],[0,0.08],[-0.078,0]],"v":[[-0.144,0],[-0.001,-0.144],[0.144,0],[-0.001,0.144]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[104.983,24.349],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 149","np":4,"cix":2,"bm":0,"ix":149,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.08],[-0.08,0],[0,-0.08],[0.081,0]],"o":[[0,-0.08],[0.081,0],[0,0.08],[-0.078,0]],"v":[[-0.144,0],[-0.001,-0.144],[0.144,0],[-0.001,0.144]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[104.128,24.349],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 150","np":4,"cix":2,"bm":0,"ix":150,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.08],[-0.08,0],[0,-0.08],[0.079,0]],"o":[[0,-0.08],[0.081,0],[0,0.08],[-0.08,0]],"v":[[-0.144,0],[-0.001,-0.144],[0.144,0],[-0.001,0.144]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[104.556,24.761],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 151","np":4,"cix":2,"bm":0,"ix":151,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.458,0],[0,0.459],[0,0],[0,0],[0,0]],"o":[[-0.458,0],[0,0],[0,0],[0,0],[0.002,0.457]],"v":[[0,0.986],[-0.83,0.157],[-0.83,-0.986],[0.828,-0.986],[0.828,0.159]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.20000001496,0.6,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[104.555,24.913],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 152","np":4,"cix":2,"bm":0,"ix":152,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.08],[-0.08,0],[0,-0.08],[0.079,0]],"o":[[0,-0.08],[0.081,0],[0,0.08],[-0.08,0]],"v":[[-0.144,0],[-0.001,-0.144],[0.144,0],[-0.001,0.144]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.921,25.19],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 153","np":4,"cix":2,"bm":0,"ix":153,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.08],[-0.078,0],[0,-0.08],[0.081,0]],"o":[[0,-0.08],[0.081,0],[0,0.08],[-0.078,0]],"v":[[-0.144,0],[-0.001,-0.144],[0.144,0],[-0.001,0.144]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.776,25.19],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 154","np":4,"cix":2,"bm":0,"ix":154,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.08],[-0.078,0],[0,-0.08],[0.081,0]],"o":[[0,-0.08],[0.081,0],[0,0.08],[-0.078,0]],"v":[[-0.144,0],[-0.001,-0.144],[0.144,0],[-0.001,0.144]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.776,24.349],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 155","np":4,"cix":2,"bm":0,"ix":155,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.08],[-0.08,0],[0,-0.08],[0.079,0]],"o":[[0,-0.08],[0.081,0],[0,0.08],[-0.08,0]],"v":[[-0.144,0],[-0.001,-0.144],[0.144,0],[-0.001,0.144]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.921,24.349],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 156","np":4,"cix":2,"bm":0,"ix":156,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.08],[-0.08,0],[0,-0.08],[0.079,0]],"o":[[0,-0.08],[0.081,0],[0,0.08],[-0.08,0]],"v":[[-0.144,0],[-0.001,-0.144],[0.144,0],[-0.001,0.144]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.348,24.761],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 157","np":4,"cix":2,"bm":0,"ix":157,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.458,0],[0,0.459],[0,0],[0,0],[0,0]],"o":[[-0.458,0],[0,0],[0,0],[0,0],[0.002,0.457]],"v":[[0,0.986],[-0.83,0.157],[-0.83,-0.986],[0.828,-0.986],[0.828,0.159]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.20000001496,0.6,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.348,24.913],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 158","np":4,"cix":2,"bm":0,"ix":158,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.08],[-0.08,0],[0,-0.08],[0.079,0]],"o":[[0,-0.08],[0.081,0],[0,0.08],[-0.08,0.002]],"v":[[-0.144,-0.001],[-0.001,-0.145],[0.144,-0.001],[-0.001,0.143]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.921,27.858],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 159","np":4,"cix":2,"bm":0,"ix":159,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.08],[-0.078,0],[0,-0.08],[0.081,0]],"o":[[0,-0.08],[0.081,0],[0,0.08],[-0.078,0.002]],"v":[[-0.144,-0.001],[-0.001,-0.145],[0.144,-0.001],[-0.001,0.143]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.776,27.858],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 160","np":4,"cix":2,"bm":0,"ix":160,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.08],[-0.078,0],[0,-0.079],[0.081,0]],"o":[[0,-0.08],[0.081,0],[0,0.079],[-0.078,0]],"v":[[-0.144,0],[-0.001,-0.144],[0.144,0],[-0.001,0.144]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.776,27.016],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 161","np":4,"cix":2,"bm":0,"ix":161,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.08],[-0.08,0],[0,-0.079],[0.079,0]],"o":[[0,-0.08],[0.081,0],[0,0.079],[-0.08,0]],"v":[[-0.144,0],[-0.001,-0.144],[0.144,0],[-0.001,0.144]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.921,27.016],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 162","np":4,"cix":2,"bm":0,"ix":162,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.08],[-0.08,0],[0,-0.079],[0.079,0]],"o":[[0,-0.08],[0.081,0],[0,0.08],[-0.08,0]],"v":[[-0.144,0],[-0.001,-0.144],[0.144,0],[-0.001,0.144]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.348,27.428],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 163","np":4,"cix":2,"bm":0,"ix":163,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.458,0],[0,0.459],[0,0],[0,0],[0,0]],"o":[[-0.458,0],[0,0],[0,0],[0,0],[0.002,0.458]],"v":[[0,0.988],[-0.83,0.158],[-0.83,-0.988],[0.828,-0.988],[0.828,0.158]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.20000001496,0.6,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.348,27.58],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 164","np":4,"cix":2,"bm":0,"ix":164,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.08],[-0.08,0],[0,-0.08],[0.079,0]],"o":[[0,-0.08],[0.081,0],[0,0.08],[-0.08,0]],"v":[[-0.144,0.001],[-0.001,-0.145],[0.144,0.001],[-0.001,0.145]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.921,22.516],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 165","np":4,"cix":2,"bm":0,"ix":165,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.08],[-0.078,0],[0,-0.08],[0.081,0]],"o":[[0,-0.08],[0.081,0],[0,0.08],[-0.078,0]],"v":[[-0.144,0.001],[-0.001,-0.145],[0.144,0.001],[-0.001,0.145]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.776,22.516],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 166","np":4,"cix":2,"bm":0,"ix":166,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.08],[-0.078,0],[0,-0.08],[0.081,0]],"o":[[0,-0.08],[0.081,0],[0,0.08],[-0.078,0]],"v":[[-0.144,0],[-0.001,-0.144],[0.144,0],[-0.001,0.144]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.776,21.676],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 167","np":4,"cix":2,"bm":0,"ix":167,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.08],[-0.08,0],[0,-0.08],[0.079,0]],"o":[[0,-0.08],[0.081,0],[0,0.08],[-0.08,0]],"v":[[-0.144,0],[-0.001,-0.144],[0.144,0],[-0.001,0.144]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.921,21.676],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 168","np":4,"cix":2,"bm":0,"ix":168,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0.08],[-0.08,0],[0,-0.079],[0.079,0]],"o":[[0,-0.08],[0.081,0],[0,0.08],[-0.08,0]],"v":[[-0.144,0],[-0.001,-0.144],[0.144,0],[-0.001,0.144]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.348,22.088],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 169","np":4,"cix":2,"bm":0,"ix":169,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.458,0],[0,0.459],[0,0],[0,0],[0,0]],"o":[[-0.458,0],[0,0],[0,0],[0,0],[0.002,0.458]],"v":[[0,0.988],[-0.83,0.158],[-0.83,-0.988],[0.828,-0.988],[0.828,0.158]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.20000001496,0.6,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.348,22.24],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 170","np":4,"cix":2,"bm":0,"ix":170,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-1.852,0],[0,1.85],[0,0]],"o":[[0,0],[0,1.85],[1.85,0],[0,0],[0,0]],"v":[[-3.356,-4.436],[-3.356,1.078],[0.001,4.434],[3.359,1.078],[3.359,-4.436]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[1.889,0],[0,1.89],[0,0],[0,0],[0,0]],"o":[[-1.89,0],[0,0],[0,0],[0,0],[0,1.89]],"v":[[0.001,4.505],[-3.425,1.078],[-3.425,-4.505],[3.425,-4.505],[3.425,1.078]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.309,24.925],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 171","np":6,"cix":2,"bm":0,"ix":171,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.873,0],[0,1.873],[0,0],[0,0],[0,0]],"o":[[-1.873,0],[0,0],[0,0],[0,0],[0,1.873]],"v":[[0.001,4.471],[-3.391,1.079],[-3.391,-4.471],[3.391,-4.471],[3.391,1.079]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.31,24.925],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 172","np":4,"cix":2,"bm":0,"ix":172,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-3.289,0],[0,3.289],[0,0]],"o":[[0,0],[0,3.289],[3.297,0],[0,0],[0,0]],"v":[[-5.968,-7.096],[-5.968,1.133],[-0.004,7.097],[5.968,1.133],[5.968,-7.096]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[3.318,0],[0,3.316],[0,0],[0,0],[0,0]],"o":[[-3.325,0],[0,0],[0,0],[0,0],[0,3.316]],"v":[[0.004,7.149],[-6.02,1.133],[-6.02,-7.149],[6.02,-7.149],[6.02,1.133]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.309,24.924],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 173","np":6,"cix":2,"bm":0,"ix":173,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[3.308,0],[0,3.308],[0,0],[0,0],[0,0]],"o":[[-3.316,0],[0,0],[0,0],[0,0],[0,3.308]],"v":[[0.004,7.122],[-5.994,1.133],[-5.994,-7.122],[5.994,-7.122],[5.994,1.133]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.308,24.924],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 174","np":4,"cix":2,"bm":0,"ix":174,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.613,-0.604],[-0.054,-0.14],[0,0],[0.623,0.594],[0.162,0.124]],"o":[[0.192,0.134],[0.54,0.531],[0,0],[-0.024,-0.071],[-0.647,-0.617],[0,0]],"v":[[-1.429,-1.221],[0.511,0.327],[1.292,1.385],[1.433,1.174],[0.633,0.134],[-1.245,-1.419]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.01,0],[0.658,0.649],[0.013,0.008],[0,0],[-0.7,-0.668],[-0.003,-0.016],[0,0]],"o":[[-0.03,-0.026],[-0.664,-0.655],[-0.005,-0.044],[0.051,0.005],[0.706,0.672],[-0.004,0.025],[-0.005,0.008]],"v":[[1.284,1.48],[0.47,0.368],[-1.49,-1.193],[-1.27,-1.48],[0.675,0.09],[1.495,1.171],[1.309,1.467]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[109.01,29.74],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 175","np":6,"cix":2,"bm":0,"ix":175,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.707,0.674],[0,0],[0,0],[-0.674,-0.662],[0,0]],"o":[[0,0],[-0.707,-0.674],[0,0],[0,0],[0.674,0.665],[0,0]],"v":[[1.47,1.183],[0.658,0.117],[-1.246,-1.454],[-1.47,-1.212],[0.495,0.351],[1.288,1.454]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[109.007,29.736],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 176","np":4,"cix":2,"bm":0,"ix":176,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.634,-0.625],[-0.054,-0.139],[0,0],[0.623,0.594],[0.279,0.163]],"o":[[0.164,0.098],[0.54,0.532],[0,0],[-0.025,-0.07],[-0.635,-0.605],[0,0]],"v":[[-1.61,-1.246],[0.686,0.381],[1.467,1.439],[1.607,1.229],[0.808,0.189],[-1.613,-1.471]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.01,0],[0.658,0.648],[0.016,0.009],[0,0],[-0.702,-0.671],[-0.003,-0.016],[0,0]],"o":[[-0.03,-0.026],[-0.662,-0.652],[-0.015,-0.027],[0.062,-0.014],[0.706,0.673],[-0.004,0.025],[-0.006,0.007]],"v":[[1.458,1.536],[0.644,0.425],[-1.654,-1.203],[-1.67,-1.522],[0.85,0.148],[1.67,1.229],[1.482,1.524]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[109.813,28.329],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 177","np":6,"cix":2,"bm":0,"ix":177,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.707,0.674],[0,0],[0,0],[-0.674,-0.663],[0,0]],"o":[[0,0],[-0.707,-0.674],[0,0],[0,0],[0.674,0.664],[0,0]],"v":[[1.64,1.244],[0.828,0.178],[-1.64,-1.513],[-1.64,-1.221],[0.666,0.411],[1.458,1.513]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[109.812,28.321],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 178","np":4,"cix":2,"bm":0,"ix":178,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-1.724,-0.551],[-0.261,0.708],[0.896,1.926],[1.73,0.762],[1.141,-0.21],[-1.296,-1.932],[-1.498,-1.12]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-0.022,-0.009],[0,0],[-0.008,-0.033],[0,0],[0.045,-0.017],[0.008,0.008],[-0.001,0.032],[-0.023,0.012]],"v":[[0.899,2.003],[-0.304,0.753],[-1.781,-0.52],[-1.555,-1.137],[-1.343,-1.986],[1.179,-0.253],[1.788,0.749],[0.923,1.991]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[109.517,28.947],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 179","np":6,"cix":2,"bm":0,"ix":179,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[1.763,0.767],[0.896,1.977],[-0.283,0.734],[-1.763,-0.54],[-1.53,-1.124],[-1.316,-1.977],[1.16,-0.227]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[109.518,28.943],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 180","np":4,"cix":2,"bm":0,"ix":180,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.054,0],[-0.57,-0.197],[-0.176,-0.107],[0,0],[0.83,0.3],[0.074,-0.01],[0,0]],"o":[[0.21,0],[0.801,0.275],[0,0],[-0.148,-0.082],[-0.809,-0.292],[0,0],[0.028,-0.003]],"v":[[-1.495,-0.435],[-0.326,-0.202],[1.543,0.712],[1.638,0.459],[-0.207,-0.397],[-1.495,-0.65],[-1.62,-0.43]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.003,0],[0.879,0.301],[0.004,0],[0,0],[-0.917,-0.331],[-0.01,-0.005],[0,0]],"o":[[-0.026,-0.012],[-0.874,-0.3],[-0.031,-0.045],[0.038,-0.019],[0.911,0.33],[0.013,0.036],[-0.023,0.016]],"v":[[1.556,0.784],[-0.345,-0.146],[-1.671,-0.364],[-1.541,-0.692],[-0.188,-0.453],[1.689,0.42],[1.585,0.766]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[94.779,21.076],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 181","np":6,"cix":2,"bm":0,"ix":181,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.92,-0.333],[0,0],[0,0],[0.894,0.306],[0,0]],"o":[[0,0],[0.919,0.333],[0,0],[0,0],[-0.894,-0.307],[0,0]],"v":[[-1.515,-0.676],[-0.198,-0.423],[1.674,0.448],[1.557,0.756],[-0.334,-0.172],[-1.674,-0.391]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[94.777,21.074],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 182","np":4,"cix":2,"bm":0,"ix":182,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.052,0],[-0.569,-0.197],[-0.115,-0.08],[0,0],[0.789,0.285],[0.074,-0.009],[0,0]],"o":[[0.21,0],[0.753,0.259],[0,0],[-0.089,-0.054],[-0.81,-0.294],[0,0],[0.031,-0.003]],"v":[[-1.205,-0.288],[-0.037,-0.055],[1.253,0.56],[1.348,0.311],[0.08,-0.25],[-1.208,-0.504],[-1.331,-0.283]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.004,0],[0.879,0.301],[0.005,0],[0,0],[-0.917,-0.331],[-0.003,-0.003],[0,0]],"o":[[-0.023,-0.01],[-0.874,-0.3],[-0.031,-0.045],[0.036,-0.017],[0.912,0.33],[0.012,0.036],[-0.023,0.018]],"v":[[1.268,0.637],[-0.055,0.001],[-1.382,-0.217],[-1.252,-0.545],[0.101,-0.306],[1.4,0.273],[1.295,0.617]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[95.266,19.451],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 183","np":6,"cix":2,"bm":0,"ix":183,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.92,-0.333],[0,0],[0,0],[0.894,0.308],[0,0]],"o":[[0,0],[0.919,0.333],[0,0],[0,0],[-0.894,-0.308],[0,0]],"v":[[-1.226,-0.529],[0.091,-0.275],[1.385,0.299],[1.269,0.609],[-0.045,-0.027],[-1.385,-0.247]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[95.266,19.45],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 184","np":4,"cix":2,"bm":0,"ix":184,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-1.536,0.082],[0.068,0.576],[1.464,1.179],[1.544,0.382],[1.495,-0.602],[-0.199,-1.191],[-0.864,-1.184]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.005,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-0.011,-0.003],[0,0],[-0.018,-0.043],[0.026,-0.016],[0.01,0.001],[0.02,0.026],[0,0],[-0.021,0.026]],"v":[[1.49,1.251],[0.048,0.63],[-1.587,0.128],[-0.906,-1.229],[-0.193,-1.251],[1.536,-0.653],[1.605,0.382],[1.521,1.224]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[94.868,20.355],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 185","np":6,"cix":2,"bm":0,"ix":185,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-0.879,-1.214],[-1.576,0.1],[0.062,0.603],[1.493,1.222],[1.576,0.384],[1.527,-0.625],[-0.192,-1.222]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[94.864,20.354],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 186","np":4,"cix":2,"bm":0,"ix":186,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.172,0],[-0.65,-0.113],[-0.262,-0.1],[0,0],[1.089,0.188],[0.207,-0.005],[0,0]],"o":[[0.469,0],[0.726,0.127],[0,0],[-0.09,-0.04],[-0.982,-0.171],[0,0],[0.054,-0.003]],"v":[[-1.769,-0.227],[0.17,-0.096],[2.138,0.495],[2.005,0.198],[0.135,-0.33],[-2.163,-0.488],[-2.12,-0.222]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.009,0],[0.836,0.146],[0.013,0],[0,0],[-1.087,-0.189],[-0.007,-0.004],[0,0]],"o":[[-0.023,-0.006],[-0.958,-0.165],[-0.03,-0.025],[0.041,-0.036],[1.173,0.203],[0.015,0.014],[-0.013,0.038]],"v":[[2.195,0.578],[0.162,-0.037],[-2.141,-0.163],[-2.223,-0.514],[0.148,-0.389],[2.043,0.149],[2.223,0.537]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[109.244,19.772],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 187","np":6,"cix":2,"bm":0,"ix":187,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-1.097,-0.19],[0,0],[0,0],[0.85,0.148],[0,0]],"o":[[0,0],[1.183,0.205],[0,0],[0,0],[-0.973,-0.169],[0,0]],"v":[[-2.195,-0.519],[0.141,-0.36],[2.029,0.176],[2.195,0.55],[0.167,-0.065],[-2.144,-0.191]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[109.243,19.772],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 188","np":4,"cix":2,"bm":0,"ix":188,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.299,0],[-0.482,-0.071],[-0.243,-0.082],[0,0],[0.988,0.144],[0.195,-0.005],[0,0]],"o":[[0.436,0],[0.659,0.097],[0,0],[-0.086,-0.037],[-0.899,-0.133],[0,0],[0.074,0]],"v":[[-1.332,-0.164],[0.172,-0.077],[1.949,0.395],[1.842,0.153],[0.148,-0.272],[-1.967,-0.377],[-1.932,-0.156]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.008,0],[0.763,0.111],[0.013,0],[0,0],[-0.999,-0.146],[-0.007,-0.003],[0,0]],"o":[[-0.021,-0.007],[-0.878,-0.13],[-0.031,-0.025],[0.04,-0.034],[1.071,0.158],[0.015,0.015],[-0.011,0.039]],"v":[[2.004,0.476],[0.163,-0.018],[-1.956,-0.093],[-2.031,-0.399],[0.156,-0.33],[1.878,0.103],[2.031,0.433]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[108.922,18.861],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 189","np":6,"cix":2,"bm":0,"ix":189,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-1.008,-0.147],[0,0],[0,0],[0.774,0.113],[0,0]],"o":[[0,0],[1.079,0.159],[0,0],[0,0],[-0.891,-0.131],[0,0]],"v":[[-2.002,-0.403],[0.153,-0.3],[1.865,0.132],[2.002,0.447],[0.167,-0.047],[-1.956,-0.123]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[108.922,18.861],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 190","np":4,"cix":2,"bm":0,"ix":190,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-1.942,0.003],[-0.549,0.088],[2.076,0.691],[1.655,-0.156],[-0.11,-0.669],[-2.095,-0.706]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.009,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-0.007,-0.002],[0,0],[-0.028,-0.023],[0.03,-0.036],[0.008,0.002],[0.019,0.015],[-0.01,0.039]],"v":[[2.131,0.764],[-0.558,0.146],[-1.968,0.061],[-2.159,-0.729],[-0.103,-0.729],[1.684,-0.208],[2.159,0.721]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[109.102,19.325],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 191","np":6,"cix":2,"bm":0,"ix":191,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[1.675,-0.18],[2.131,0.734],[-0.553,0.115],[-1.967,0.03],[-2.131,-0.734],[-0.106,-0.698]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[109.101,19.327],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 192","np":4,"cix":2,"bm":0,"ix":192,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.213,-0.066],[0,0],[-0.926,0.118],[-0.216,-0.018],[0,0],[1.053,-0.126]],"o":[[0,0],[0.195,-0.063],[0.725,-0.093],[0,0],[-0.107,-0.017],[-1.057,0.126]],"v":[[-2.19,0.219],[-2.07,0.477],[0.337,-0.114],[2.185,-0.122],[2.092,-0.363],[0.305,-0.342]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.003,0],[0,0],[-1.161,0.14],[-0.006,-0.002],[0,0],[0.819,-0.105],[0.015,-0.003]],"o":[[-0.026,-0.016],[0.031,-0.044],[1.163,-0.139],[0.022,0.018],[-0.041,0.039],[-0.992,0.128],[0,0]],"v":[[-2.086,0.542],[-2.258,0.212],[0.297,-0.403],[2.12,-0.419],[2.258,-0.099],[0.344,-0.055],[-2.078,0.54]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[96.719,19.597],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 193","np":6,"cix":2,"bm":0,"ix":193,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-1.171,0.141],[0,0],[0,0],[0.83,-0.107],[0,0]],"o":[[0,0],[1.173,-0.141],[0,0],[0,0],[-1.007,0.13],[0,0]],"v":[[-2.23,0.202],[0.301,-0.372],[2.114,-0.389],[2.23,-0.09],[0.341,-0.085],[-2.085,0.512]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[96.717,19.595],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 194","np":4,"cix":2,"bm":0,"ix":194,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.213,-0.066],[0,0],[-0.925,0.118],[-0.215,-0.016],[0,0],[1.053,-0.126]],"o":[[0,0],[0.196,-0.062],[0.725,-0.093],[0,0],[-0.106,-0.016],[-1.058,0.127]],"v":[[-2.19,0.219],[-2.07,0.476],[0.339,-0.114],[2.188,-0.124],[2.094,-0.365],[0.305,-0.344]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.003,0],[0,0],[-1.161,0.14],[-0.006,-0.002],[0,0],[0.819,-0.105],[0.013,-0.004]],"o":[[-0.026,-0.016],[0.031,-0.044],[1.163,-0.139],[0.022,0.018],[-0.041,0.04],[-0.992,0.128],[0,0]],"v":[[-2.086,0.542],[-2.258,0.212],[0.297,-0.403],[2.12,-0.419],[2.258,-0.101],[0.344,-0.057],[-2.078,0.54]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[96.323,18.756],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 195","np":6,"cix":2,"bm":0,"ix":195,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-1.171,0.141],[0,0],[0,0],[0.83,-0.107],[0,0]],"o":[[0,0],[1.173,-0.141],[0,0],[0,0],[-1.007,0.13],[0,0]],"v":[[-2.23,0.202],[0.301,-0.372],[2.114,-0.389],[2.23,-0.09],[0.341,-0.085],[-2.085,0.512]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[96.321,18.755],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 196","np":4,"cix":2,"bm":0,"ix":196,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-2.249,-0.065],[-1.865,0.663],[-0.34,0.304],[2.25,0.119],[1.909,-0.616],[0.057,-0.667]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.003,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-0.026,-0.017],[0.019,-0.042],[0.008,0],[0.026,0.017],[-0.025,0.041],[0,0],[0,0]],"v":[[-1.88,0.726],[-2.32,-0.072],[0.046,-0.726],[1.927,-0.677],[2.32,0.13],[-0.333,0.36],[-1.875,0.724]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[96.493,19.181],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 197","np":6,"cix":2,"bm":0,"ix":197,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[1.926,-0.646],[2.294,0.145],[-0.335,0.333],[-1.882,0.697],[-2.294,-0.085],[0.052,-0.697]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[96.493,19.18],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 198","np":4,"cix":2,"bm":0,"ix":198,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.888,-0.284],[-0.187,-0.108],[0,0],[1.007,0.332],[0.219,0.031],[0,0]],"o":[[0.203,0.026],[0.695,0.223],[0,0],[-0.089,-0.061],[-1.011,-0.333],[0,0],[0,0]],"v":[[-2.062,-0.496],[0.369,-0.01],[2.046,0.765],[2.064,0.508],[0.438,-0.232],[-2.061,-0.781],[-2.061,-0.496]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.005,0],[0.785,0.251],[0.015,0.002],[0,0],[-1.11,-0.366],[-0.005,-0.005],[0,0]],"o":[[-0.025,-0.01],[-0.953,-0.305],[-0.026,-0.029],[0.048,-0.028],[1.112,0.365],[0.011,0.026],[-0.02,0.026]],"v":[[2.072,0.844],[0.351,0.045],[-2.096,-0.442],[-2.122,-0.816],[0.454,-0.289],[2.11,0.469],[2.101,0.816]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[110.295,24.418],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 199","np":6,"cix":2,"bm":0,"ix":199,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-1.122,-0.369],[0,0],[0,0],[0.799,0.255],[0,0]],"o":[[0,0],[1.121,0.369],[0,0],[0,0],[-0.966,-0.31],[0,0]],"v":[[-2.093,-0.814],[0.443,-0.26],[2.093,0.493],[2.072,0.814],[0.359,0.018],[-2.092,-0.471]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[110.296,24.419],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 200","np":4,"cix":2,"bm":0,"ix":200,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.888,-0.283],[-0.187,-0.108],[0,0],[1.007,0.331],[0.219,0.032],[0,0]],"o":[[0.203,0.026],[0.695,0.223],[0,0],[-0.089,-0.061],[-1.011,-0.333],[0,0],[0,0]],"v":[[-2.062,-0.498],[0.369,-0.013],[2.046,0.763],[2.064,0.506],[0.438,-0.234],[-2.061,-0.784],[-2.061,-0.498]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.005,0],[0.785,0.251],[0.015,0.001],[0,0],[-1.11,-0.366],[-0.005,-0.005],[0,0]],"o":[[-0.025,-0.01],[-0.953,-0.305],[-0.026,-0.03],[0.048,-0.028],[1.112,0.366],[0.011,0.026],[-0.02,0.026]],"v":[[2.072,0.844],[0.351,0.045],[-2.096,-0.442],[-2.122,-0.816],[0.454,-0.29],[2.11,0.468],[2.101,0.816]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[110.295,23.488],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 201","np":6,"cix":2,"bm":0,"ix":201,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-1.122,-0.369],[0,0],[0,0],[0.799,0.256],[0,0]],"o":[[0,0],[1.121,0.369],[0,0],[0,0],[-0.966,-0.31],[0,0]],"v":[[-2.093,-0.814],[0.443,-0.26],[2.093,0.493],[2.072,0.814],[0.359,0.016],[-2.092,-0.471]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[110.296,23.487],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 202","np":4,"cix":2,"bm":0,"ix":202,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-1.959,-0.219],[-0.428,0.103],[1.997,1.035],[1.998,0.225],[0.342,-0.605],[-2.001,-1.039]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.006,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-0.01,-0.002],[0,0],[-0.023,-0.027],[0.034,-0.029],[0.008,0.001],[0.017,0.026],[-0.02,0.028]],"v":[[2.027,1.105],[-0.443,0.158],[-1.994,-0.167],[-2.059,-1.077],[0.359,-0.665],[2.042,0.178],[2.058,1.076]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[110.272,23.921],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 203","np":6,"cix":2,"bm":0,"ix":203,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[2.03,0.206],[2.028,1.077],[-0.43,0.132],[-1.985,-0.194],[-2.03,-1.077],[0.355,-0.635]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[110.269,23.92],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 204","np":4,"cix":2,"bm":0,"ix":204,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.087,-0.069],[0,0],[-0.6,0.214],[-0.199,0.036],[0,0],[0.943,-0.358]],"o":[[0,0],[0.119,-0.077],[0.805,-0.289],[0,0],[-0.228,0.046],[-0.814,0.306]],"v":[[-1.869,0.575],[-1.749,0.732],[-0.46,0.085],[1.874,-0.49],[1.871,-0.737],[-0.606,-0.066]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.007,0],[0,0],[-0.955,0.361],[-0.013,0.001],[0,0],[0.862,-0.31],[0.006,-0.003]],"o":[[-0.023,-0.011],[0.018,-0.052],[1.038,-0.392],[0.036,0.028],[-0.039,0.031],[-0.666,0.238],[-0.003,0.002]],"v":[[-1.756,0.801],[-1.933,0.588],[-0.627,-0.122],[1.894,-0.801],[1.933,-0.463],[-0.44,0.142],[-1.741,0.798]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[95.803,29.509],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 205","np":6,"cix":2,"bm":0,"ix":205,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[1.048,-0.397],[0,0],[0,0],[-0.677,0.241],[0,0]],"o":[[0,0],[-0.961,0.364],[0,0],[0,0],[0.874,-0.314],[0,0]],"v":[[1.903,-0.773],[-0.615,-0.094],[-1.908,0.572],[-1.753,0.773],[-0.447,0.115],[1.908,-0.464]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[95.8,29.508],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 206","np":4,"cix":2,"bm":0,"ix":206,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.084,-0.077],[0,0],[-0.664,0.263],[-0.21,0.041],[0,0],[1.062,-0.446]],"o":[[0,0],[0.126,-0.092],[0.903,-0.355],[0,0],[-0.246,0.053],[-0.913,0.386]],"v":[[-2.09,0.704],[-1.936,0.911],[-0.53,0.118],[2.094,-0.579],[2.091,-0.917],[-0.707,-0.09]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.007,0],[0,0],[-1.054,0.443],[-0.017,0.003],[0,0],[0.961,-0.379],[0.006,-0.005]],"o":[[-0.023,-0.011],[0.016,-0.054],[1.16,-0.487],[0.036,0.028],[-0.041,0.032],[-0.735,0.29],[-0.004,0.005]],"v":[[-1.941,0.982],[-2.152,0.72],[-0.729,-0.144],[2.113,-0.982],[2.152,-0.557],[-0.508,0.174],[-1.924,0.976]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[95.573,28.696],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 207","np":6,"cix":2,"bm":0,"ix":207,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[1.17,-0.492],[0,0],[0,0],[-0.748,0.296],[0,0]],"o":[[0,0],[-1.061,0.446],[0,0],[0,0],[0.974,-0.385],[0,0]],"v":[[2.122,-0.953],[-0.715,-0.117],[-2.126,0.702],[-1.939,0.953],[-0.514,0.147],[2.126,-0.555]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[95.57,28.696],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 208","np":4,"cix":2,"bm":0,"ix":208,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-1.983,0.477],[-1.611,1.051],[0.417,0.191],[1.957,-0.208],[1.985,-1.051],[-0.615,-0.383]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.004,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-0.024,-0.013],[0.01,-0.041],[0.009,-0.003],[0.036,0.029],[-0.023,0.028],[0,0],[-0.005,0]],"v":[[-1.621,1.118],[-2.047,0.484],[-0.64,-0.436],[2.011,-1.118],[2.017,-0.183],[0.438,0.249],[-1.607,1.117]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[95.633,29.04],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 209","np":6,"cix":2,"bm":0,"ix":209,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-2.02,0.469],[-1.618,1.089],[0.43,0.22],[1.989,-0.184],[2.02,-1.089],[-0.623,-0.41]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[95.63,29.039],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 210","np":4,"cix":2,"bm":0,"ix":210,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.089,-0.061],[0,0],[-0.695,0.223],[-0.204,0.025],[0,0],[1.01,-0.333]],"o":[[0,0],[0.189,-0.109],[0.887,-0.284],[0,0],[-0.222,0.032],[-1.009,0.33]],"v":[[-2.061,0.508],[-2.044,0.766],[-0.366,-0.01],[2.065,-0.496],[2.065,-0.78],[-0.432,-0.23]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.005,0],[0,0],[-1.112,0.365],[-0.014,0.002],[0,0],[0.953,-0.305],[0.01,-0.005]],"o":[[-0.029,-0.027],[0.018,-0.03],[1.11,-0.366],[0.033,0.03],[-0.041,0.032],[-0.785,0.251],[-0.003,0.004]],"v":[[-2.072,0.844],[-2.122,0.495],[-0.453,-0.287],[2.089,-0.844],[2.122,-0.47],[-0.35,0.046],[-2.057,0.839]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[94.336,24.419],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 211","np":6,"cix":2,"bm":0,"ix":211,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[1.122,-0.369],[0,0],[0,0],[-0.799,0.255],[0,0]],"o":[[0,0],[-1.121,0.369],[0,0],[0,0],[0.966,-0.31],[0,0]],"v":[[2.094,-0.814],[-0.444,-0.26],[-2.094,0.493],[-2.073,0.814],[-0.359,0.018],[2.091,-0.471]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[94.335,24.419],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 212","np":4,"cix":2,"bm":0,"ix":212,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.089,-0.059],[0,0],[-0.695,0.223],[-0.204,0.025],[0,0],[1.01,-0.333]],"o":[[0,0],[0.189,-0.108],[0.887,-0.284],[0,0],[-0.222,0.031],[-1.009,0.331]],"v":[[-2.061,0.506],[-2.044,0.763],[-0.366,-0.012],[2.065,-0.498],[2.065,-0.782],[-0.432,-0.232]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.005,0],[0,0],[-1.112,0.366],[-0.014,0.002],[0,0],[0.953,-0.303],[0.01,-0.005]],"o":[[-0.029,-0.028],[0.018,-0.03],[1.11,-0.366],[0.033,0.03],[-0.041,0.031],[-0.785,0.251],[-0.003,0.003]],"v":[[-2.072,0.844],[-2.122,0.495],[-0.453,-0.288],[2.089,-0.844],[2.122,-0.47],[-0.35,0.045],[-2.057,0.839]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[94.336,23.489],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 213","np":6,"cix":2,"bm":0,"ix":213,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[1.122,-0.369],[0,0],[0,0],[-0.799,0.256],[0,0]],"o":[[0,0],[-1.121,0.369],[0,0],[0,0],[0.966,-0.31],[0,0]],"v":[[2.094,-0.814],[-0.444,-0.26],[-2.094,0.493],[-2.073,0.814],[-0.359,0.016],[2.091,-0.471]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[94.335,23.487],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 214","np":4,"cix":2,"bm":0,"ix":214,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-1.999,0.223],[-1.997,1.034],[0.422,0.104],[1.958,-0.217],[2,-1.04],[-0.342,-0.607]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.003,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[-0.029,-0.029],[0.016,-0.026],[0.008,-0.002],[0.035,0.031],[-0.023,0.028],[0,0],[-0.003,0.003]],"v":[[-2.027,1.105],[-2.059,0.206],[-0.367,-0.661],[2.023,-1.105],[2.016,-0.194],[0.438,0.16],[-2.017,1.103]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[94.362,23.921],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 215","np":6,"cix":2,"bm":0,"ix":215,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-2.03,0.206],[-2.028,1.077],[0.43,0.132],[1.985,-0.194],[2.03,-1.077],[-0.355,-0.635]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[94.362,23.92],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 216","np":4,"cix":2,"bm":0,"ix":216,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.117,10.28],[0.118,10.28],[0.118,-10.28],[-0.117,-10.28]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.016,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-0.03,-0.029],[0.03,-0.03],[0.03,0.03],[0,0.016]],"v":[[0.147,10.339],[-0.147,10.339],[-0.177,-10.309],[0.147,-10.339],[0.177,10.31]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.63,24.607],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 217","np":6,"cix":2,"bm":0,"ix":217,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.147,-10.309],[-0.147,-10.309],[-0.147,10.309],[0.147,10.309]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[101.629,24.606],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 218","np":4,"cix":2,"bm":0,"ix":218,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.119,10.28],[0.116,10.28],[0.116,-10.28],[-0.119,-10.28]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.016,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-0.03,-0.029],[0.03,-0.03],[0.029,0.03],[0,0.016]],"v":[[0.148,10.339],[-0.146,10.339],[-0.176,-10.309],[0.148,-10.339],[0.176,10.31]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[103.064,24.607],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 219","np":6,"cix":2,"bm":0,"ix":219,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.147,-10.309],[-0.147,-10.309],[-0.147,10.309],[0.147,10.309]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[103.061,24.606],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 220","np":4,"cix":2,"bm":0,"ix":220,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-0.54,10.136],[0.54,10.136],[0.54,-10.134],[-0.54,-10.134]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.017,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-0.029,-0.03],[0.029,-0.03],[0.03,0.03],[0,0.016]],"v":[[0.568,10.195],[-0.57,10.195],[-0.598,-10.165],[0.568,-10.195],[0.598,10.165]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.348,24.606],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 221","np":6,"cix":2,"bm":0,"ix":221,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.569,-10.165],[-0.569,-10.165],[-0.569,10.165],[0.569,10.165]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.347,24.605],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 222","np":4,"cix":2,"bm":0,"ix":222,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[4.916,0],[0,-4.915],[-4.916,0],[0,4.916]],"o":[[-4.916,0],[0,4.916],[4.916,0],[0,-4.915]],"v":[[0,-8.913],[-8.915,0.001],[0,8.917],[8.914,0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[4.948,0],[0,4.948],[-4.949,0],[0,-4.949]],"o":[[-4.949,0],[0,-4.949],[4.948,0],[0,4.948]],"v":[[0,8.973],[-8.974,0.001],[0,-8.973],[8.974,0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.347,24.615],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 223","np":6,"cix":2,"bm":0,"ix":223,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-4.94,0],[0,4.94],[4.94,0],[0,-4.94]],"o":[[4.94,0],[0,-4.94],[-4.94,0],[0,4.94]],"v":[[0,8.944],[8.944,0],[0,-8.944],[-8.944,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.346,24.616],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 224","np":4,"cix":2,"bm":0,"ix":224,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[5.024,0],[0,-5.024],[-5.022,0],[0,5.024]],"o":[[-5.024,0],[0,5.024],[5.024,0],[0,-5.023]],"v":[[0,-9.111],[-9.11,-0.001],[0,9.109],[9.11,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[5.057,0],[0,5.056],[-5.055,0],[0,-5.056]],"o":[[-5.055,0],[0,-5.056],[5.055,0],[0,5.056]],"v":[[0,9.17],[-9.169,0.001],[0,-9.17],[9.169,0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.347,24.616],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 225","np":6,"cix":2,"bm":0,"ix":225,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,5.047],[-5.047,0],[0,-5.047],[5.047,0]],"o":[[0,-5.049],[5.047,0],[0,5.047],[-5.047,0]],"v":[[-9.139,0],[-0.001,-9.139],[9.139,0],[-0.001,9.139]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.346,24.616],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 226","np":4,"cix":2,"bm":0,"ix":226,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[5.472,0],[0,-5.471],[-5.472,0],[0,5.472]],"o":[[-5.472,0],[0,5.472],[5.472,0],[0,-5.473]],"v":[[0,-9.924],[-9.923,-0.001],[0,9.923],[9.923,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[5.505,0],[0,5.505],[-5.505,0],[0,-5.504]],"o":[[-5.505,0],[0,-5.504],[5.505,0],[0,5.505]],"v":[[0,9.982],[-9.982,-0.001],[0,-9.982],[9.982,-0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.346,24.617],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 227","np":6,"cix":2,"bm":0,"ix":227,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-5.497,0],[0,5.497],[5.497,0],[0,-5.496]],"o":[[5.497,0],[0,-5.496],[-5.497,0],[0,5.497]],"v":[[0,9.953],[9.953,0],[0,-9.953],[-9.953,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[102.346,24.616],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 228","np":4,"cix":2,"bm":0,"ix":228,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-8.787],[-8.106,-2.16],[0,0]],"o":[[0,8.787],[0,0],[-8.106,2.162]],"v":[[-7.043,0],[7.043,18.318],[7.043,-18.318]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.400000029919,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[95.273,24.634],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 229","np":4,"cix":2,"bm":0,"ix":229,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,10.481],[10.48,0],[1.563,-0.416],[0,0],[-1.694,0]],"o":[[0,-10.481],[-1.697,0],[0,0],[1.563,0.416],[10.483,0.002]],"v":[[11.935,-0.001],[-7.041,-18.978],[-11.935,-18.319],[-11.935,18.317],[-7.044,18.976]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[114.251,24.635],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 230","np":4,"cix":2,"bm":0,"ix":230,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.438,-1.43],[13.504,0],[7.495,3.723],[-3.39,3.769]],"o":[[-9.673,7.957],[-8.934,0],[32.533,2.074],[4.936,1.572]],"v":[[30.219,-4.014],[-5.346,8.719],[-30.219,2.907],[17.824,-8.72]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.298039215686,0.760784373564,0.729411764706,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[61.618,103.569],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 231","np":4,"cix":2,"bm":0,"ix":231,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.192,-0.259],[0.564,-0.458],[0.413,-0.507],[-0.573,0.221],[-0.47,0.583],[-0.416,0.648]],"o":[[-0.433,0.585],[-0.508,0.413],[-0.306,0.377],[0.714,-0.275],[0.483,-0.599],[0.182,-0.282]],"v":[[1.401,-1.824],[-0.106,-0.296],[-1.72,0.938],[-1.182,1.861],[0.526,0.337],[1.844,-1.566]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.439215716194,0.250980392157,0.117647066303,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[37.968,33.752],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 232","np":4,"cix":2,"bm":0,"ix":232,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.118,-0.19],[1.477,-1.335],[0.722,-0.578],[0.531,-0.754],[-0.409,0.089],[-1.086,1.304],[-0.954,1.784]],"o":[[-1.05,1.697],[-0.687,0.62],[-0.712,0.57],[-0.282,0.4],[1.722,-0.374],[1.299,-1.559],[0.105,-0.197]],"v":[[3.972,-4.382],[0.053,0.146],[-2.054,1.952],[-4.094,3.714],[-3.503,4.482],[1.023,0.857],[4.271,-4.206]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.439215716194,0.250980392157,0.117647066303,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[38.1,35.542],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 233","np":4,"cix":2,"bm":0,"ix":233,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.059,-0.129],[-2.208,-0.887],[0.108,0.153],[0.748,0.82],[0.599,1.184]],"o":[[0.922,2.026],[0.178,0.072],[-0.638,-0.906],[-0.894,-0.98],[-0.065,-0.13]],"v":[[-2.441,-2.836],[2.14,3.007],[2.393,2.679],[0.028,0.297],[-2.248,-2.949]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.439215716194,0.250980392157,0.117647066303,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[75.647,36.539],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 234","np":4,"cix":2,"bm":0,"ix":234,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.733,-0.364],[0.447,-0.087],[0.355,0.256],[1.926,1.953],[-0.136,-0.129],[-2.21,-1.467]],"o":[[-0.459,0.092],[-0.413,-0.281],[-2.237,-1.615],[-0.13,-0.133],[1.923,1.818],[0.687,0.453]],"v":[[4.322,3.102],[2.957,3.357],[1.801,2.544],[-4.192,-3.025],[-3.986,-3.229],[2.196,1.866]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.439215716194,0.250980392157,0.117647066303,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[80.144,38.078],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 235","np":4,"cix":2,"bm":0,"ix":235,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.271,-0.487],[2.013,0.222],[2.2,-0.657],[0.844,-1.822],[-0.102,0.256],[-3.392,-0.061],[-2.274,0.12],[-1.26,0.49],[0,0]],"o":[[-2.028,0.733],[-2.203,-0.24],[-1.939,0.576],[-0.117,0.252],[1.276,-3.171],[2.256,0.043],[1.446,-0.077],[-0.61,0.389],[0,0]],"v":[[8.866,-1.49],[2.465,-0.904],[-4.249,-1.271],[-8.622,2.581],[-9.072,2.393],[-1.544,-2.454],[5.174,-1.945],[9.174,-2.833],[8.046,-2.251]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.439215716194,0.250980392157,0.117647066303,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[58.344,21.014],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 236","np":4,"cix":2,"bm":0,"ix":236,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.596,-0.043],[-9.259,6.251],[-2.046,-1.574],[11.015,-0.473],[0,0]],"o":[[0,0],[0,0],[0,0],[-11.015,0.472],[0,0]],"v":[[-10.778,-4.327],[10.411,-4.327],[16.365,-2.081],[0.63,3.899],[-16.365,-2.396]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.800000059838,1,0.952941236309,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[56.457,94.899],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 237","np":4,"cix":2,"bm":0,"ix":237,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.438,-1.43],[13.504,0],[7.495,3.723],[3.273,2.693],[-6.265,2.018],[0,0],[0,0],[0,0],[-2.971,-0.95]],"o":[[-9.673,7.957],[-8.934,0],[-3.83,-1.901],[3.698,-2.173],[0,0],[0,0],[0,0],[2.32,0.765],[4.936,1.571]],"v":[[35.562,-2.707],[-0.003,10.026],[-24.875,4.214],[-35.562,-2.707],[-15.935,-9.699],[-2.49,-6.454],[9.781,-8.972],[14.934,-10.026],[23.168,-7.412]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.298039215686,0.760784373564,0.729411764706,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[56.274,102.262],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 238","np":4,"cix":2,"bm":0,"ix":238,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.322,-0.399],[-1.094,-0.779],[-0.722,0.161],[0.072,0.812],[0.254,0.015],[0.916,0.288],[-0.478,0.651]],"o":[[-0.829,1.028],[0.61,0.434],[0.67,-0.149],[-0.022,-0.246],[-0.844,-0.049],[-0.78,-0.245],[0.301,-0.409]],"v":[[-1.682,-1.769],[-1.234,1.621],[0.882,2.007],[2.439,0.557],[2.003,0.12],[-0.342,0.639],[-0.973,-1.222]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.909803981407,0.607843137255,0.407843167174,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[55.693,53.998],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 239","np":4,"cix":2,"bm":0,"ix":239,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.035,-1.106],[3.115,-0.105],[-2.012,0]],"o":[[-2.542,-0.117],[1.038,-0.931],[1.784,0]],"v":[[4.684,1.221],[-4.684,1.089],[0.24,-1.221]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.768627510819,0.611764705882,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[57.422,22.702],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 240","np":4,"cix":2,"bm":0,"ix":240,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-2.28],[0.863,-0.551],[0,0],[-0.271,-0.487],[0.706,-0.705],[0,0],[-0.253,-0.635],[1.8,0.083],[3.115,-0.104],[0.995,-0.157],[-2.854,1.71],[0,0],[-1.714,1.902]],"o":[[0,1.341],[-0.61,0.389],[0,0],[0.234,0.422],[-1.519,1.523],[0,0],[0,0],[-2.542,-0.117],[-1.39,0.05],[0,0],[2.853,-1.711],[0,0],[1.71,-1.901]],"v":[[10.174,-2.569],[8.26,0.272],[7.132,0.855],[7.952,1.616],[7.511,3.326],[5.231,4.467],[5.863,6.18],[2.849,6.014],[-6.519,5.881],[-10.174,6.18],[-6.75,-1.237],[-1.046,-2.569],[4.661,-4.279]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.529411764706,0.329411764706,0.196078446332,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[59.257,17.909],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 241","np":4,"cix":2,"bm":0,"ix":241,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.221,-0.209],[-1.319,-0.227],[-1.352,0.262],[-1.643,0.183],[-1.019,0.841],[0.349,-0.263],[1.431,-0.025],[1.179,-0.047],[1.124,-0.037],[1.2,1.054]],"o":[[0.961,0.911],[1.408,0.242],[1.593,-0.31],[1.316,-0.147],[0.333,-0.274],[-1.122,0.843],[-1.19,0.022],[-1.113,0.044],[-1.615,0.053],[-0.225,-0.197]],"v":[[-7.849,-0.723],[-4.45,1.057],[-0.576,0.631],[4.217,1.042],[7.737,-0.433],[7.272,-1.036],[3.501,0.448],[0.045,-0.055],[-3.202,0.572],[-7.518,-1.053]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.901960844152,0.501960784314,0.305882352941,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[55.471,63.663],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 242","np":4,"cix":2,"bm":0,"ix":242,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-1.023,0.472],[-0.629,-0.393],[-1.101,-0.236],[-1.495,0.078],[0,0],[1.653,-0.315],[0.945,-0.079],[1.416,0]],"o":[[1.023,0.393],[1.023,-0.472],[0,0],[1.102,0.236],[1.495,-0.079],[0,0],[-1.652,0.315],[-0.944,0.079],[-1.416,0]],"v":[[-7.75,-0.446],[-2.894,-0.892],[-0.118,-0.525],[1.827,-1.049],[5.547,-0.131],[7.75,-0.682],[3.973,1.049],[-0.219,0.472],[-3.816,1.206]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.929411824544,0.580392156863,0.407843167174,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[55.626,63.444],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 243","np":4,"cix":2,"bm":0,"ix":243,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-1.678,-0.315],[-1.101,0.262],[0,0],[0,0]],"o":[[0,0],[1.679,0.315],[1.102,-0.263],[0,0],[0,0]],"v":[[-5.114,-0.577],[-1.862,1.049],[2.544,0.892],[5.114,-0.892],[-0.341,-1.364]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.968627510819,0.639215686275,0.466666696586,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[55.591,64.807],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 244","np":4,"cix":2,"bm":0,"ix":244,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.399,0],[0,1.697],[1.399,0],[0,-1.697]],"o":[[1.399,0],[0,-1.697],[-1.399,0],[0,1.697]],"v":[[0,3.072],[2.533,-0.001],[0,-3.072],[-2.533,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784313725,0.270588235294,0.207843152214,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[64.963,47.419],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 245","np":4,"cix":2,"bm":0,"ix":245,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.399,0],[0,1.697],[1.399,0],[0,-1.697]],"o":[[1.399,0],[0,-1.697],[-1.399,0],[0,1.697]],"v":[[0,3.072],[2.533,-0.001],[0,-3.072],[-2.533,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784313725,0.270588235294,0.207843152214,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[46.29,47.419],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 246","np":4,"cix":2,"bm":0,"ix":246,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.426,2.216],[2.761,0.531],[0.426,-2.217],[-2.761,-0.531]],"o":[[0.426,-2.217],[-2.76,-0.53],[-0.427,2.216],[2.761,0.531]],"v":[[5,0.961],[0.771,-4.014],[-4.999,-0.961],[-0.772,4.013]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.690196078431,0.521568627451,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[68.778,55.709],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 247","np":4,"cix":2,"bm":0,"ix":247,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.807,0.161],[0.129,2.254],[2.807,-0.161],[-0.129,-2.253]],"o":[[2.807,-0.161],[-0.13,-2.254],[-2.807,0.161],[0.129,2.254]],"v":[[0.234,4.081],[5.083,-0.292],[-0.234,-4.081],[-5.083,0.292]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.690196078431,0.521568627451,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[42.522,55.725],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 248","np":4,"cix":2,"bm":0,"ix":248,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.098,-4.535],[-6.287,6.845],[-8.261,-5.804],[-0.271,-2.954],[0,0]],"o":[[0,0],[6.286,-6.845],[8.262,5.803],[0,0],[0,0]],"v":[[-22.594,12.742],[-17.095,-3.731],[13.031,-6.938],[23.382,9.13],[23.382,11.611]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.988235353956,0.396078461292,0.396078461292,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[56.723,19.049],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 249","np":4,"cix":2,"bm":0,"ix":249,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[6.4,-2.713],[-0.734,2.036],[0,0]],"o":[[0,0],[-6.399,2.713],[1.39,-3.856],[0,0]],"v":[[10.792,-10.169],[-2.505,7.456],[-10.058,0.061],[-3.685,-4.189]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.529411764706,0.329411764706,0.196078446332,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[37.797,35.872],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 250","np":4,"cix":2,"bm":0,"ix":250,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-8.183,0.157],[3.033,4.249],[0,0]],"o":[[0,0],[8.183,-0.157],[-3.033,-4.249],[0,0]],"v":[[-10.858,-6.924],[2.675,9.285],[5.079,-5.193],[-6.452,-8.811]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.529411764706,0.329411764706,0.196078446332,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[75.025,35.853],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 251","np":4,"cix":2,"bm":0,"ix":251,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.977,0.2],[0.075,1.709],[2.409,-1.517]],"o":[[2.976,-0.2],[-0.074,-1.709],[-2.41,1.518]],"v":[[-1.458,2.063],[4.36,-0.32],[-1.766,-0.747]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784313725,0.270588235294,0.207843152214,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[43.617,39.079],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 252","np":4,"cix":2,"bm":0,"ix":252,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[2.976,0.2],[-0.076,1.709],[-2.409,-1.517]],"o":[[-2.977,-0.2],[0.074,-1.709],[2.41,1.518]],"v":[[1.46,2.063],[-4.359,-0.32],[1.768,-0.747]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784313725,0.270588235294,0.207843152214,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[67.635,39.079],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 253","np":4,"cix":2,"bm":0,"ix":253,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[2.3,-7.922],[8.433,-0.511],[0,0],[2.3,7.922],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[-2.3,7.922],[0,0],[-8.433,-0.511],[-2.3,-7.922],[0,0],[0,0],[0,0]],"v":[[-1.818,-28.667],[9.169,-27.117],[22.202,-15.577],[19.902,12.057],[-0.03,28.667],[0.029,28.667],[-19.903,12.057],[-22.202,-15.577],[-9.17,-27.117],[1.818,-28.667]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.768627510819,0.611764705882,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[55.626,51.31],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 254","np":4,"cix":2,"bm":0,"ix":254,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.268,0.033],[-0.731,-0.683],[-0.125,0.046],[-0.054,0.103],[0.117,0.126],[1.186,-0.216]],"o":[[1.016,-0.127],[0.092,0.086],[0.107,-0.04],[0.079,-0.153],[-0.845,-0.909],[-0.261,0.047]],"v":[[-1.497,-0.224],[1.158,0.766],[1.52,0.862],[1.743,0.691],[1.684,0.24],[-1.561,-0.691]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.909803981407,0.607843137255,0.407843167174,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[29.771,48.092],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 255","np":4,"cix":2,"bm":0,"ix":255,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.18,-0.167],[-0.419,-0.908],[-0.56,-0.57],[-0.08,0.192],[0.398,0.68],[0.825,0.681]],"o":[[0.735,0.681],[0.336,0.726],[0.167,0.17],[0.327,-0.79],[-0.544,-0.93],[-0.184,-0.152]],"v":[[-1.641,-2.286],[0.088,0.162],[1.011,2.533],[1.494,2.405],[0.732,-0.213],[-1.375,-2.551]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.909803981407,0.607843137255,0.407843167174,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[30.548,48.064],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 256","np":4,"cix":2,"bm":0,"ix":256,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.239,-0.071],[0.726,-0.538],[0.011,-0.745],[-0.163,0.055],[-0.468,0.412],[-0.802,0.276]],"o":[[-0.855,0.253],[-0.548,0.405],[-0.003,0.164],[0.602,-0.202],[0.631,-0.556],[0.23,-0.079]],"v":[[1.733,-1.502],[-0.687,-0.456],[-2.062,1.264],[-1.728,1.518],[-0.299,0.229],[1.835,-1.133]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.909803981407,0.607843137255,0.407843167174,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[80.902,48.709],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 257","np":4,"cix":2,"bm":0,"ix":257,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.082,-0.075],[0.496,-0.974],[-0.324,-0.864],[-0.148,0.347],[-0.208,0.805],[-0.764,0.793]],"o":[[-0.799,0.731],[-0.402,0.787],[0.104,0.278],[0.324,-0.76],[0.273,-1.06],[0.078,-0.081]],"v":[[1.337,-2.825],[-0.697,-0.335],[-1.213,2.458],[-0.487,2.553],[-0.028,0.118],[1.459,-2.702]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.909803981407,0.607843137255,0.407843167174,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[80.145,48.463],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 258","np":4,"cix":2,"bm":0,"ix":258,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[3.042,1.259],[-0.248,1.674],[-3.043,-3.882]],"o":[[0,0],[-3.042,-1.259],[0.419,-2.832],[3.042,3.881]],"v":[[3.061,6.661],[-1.24,6.557],[-5.226,-1.312],[2.432,-3.934]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.768627510819,0.611764705882,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[31.497,48.245],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 259","np":4,"cix":2,"bm":0,"ix":259,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-3.042,1.259],[0.248,1.674],[3.043,-3.882]],"o":[[0,0],[3.042,-1.259],[-0.419,-2.832],[-3.042,3.881]],"v":[[-3.061,6.661],[1.24,6.557],[5.226,-1.312],[-2.432,-3.934]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.768627510819,0.611764705882,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[79.756,48.245],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 260","np":4,"cix":2,"bm":0,"ix":260,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.339,-2.545],[3.067,-0.831],[0.367,-0.074],[0.447,-0.086],[0.691,-2.82],[0,0],[0,0],[0,0],[-0.237,3.069],[0,0],[0,0],[0,0],[0,0],[0,0],[-3.46,-0.943]],"o":[[0,0],[-0.366,0.099],[-0.459,0.093],[-2.204,0.416],[-0.943,3.852],[0,0],[0,0],[0,0],[0.237,-3.066],[0,0],[0,0],[0,0],[0,0],[0,0],[3.464,0.947]],"v":[[30.095,4.721],[24.668,8.139],[23.565,8.395],[22.2,8.65],[17.349,12.435],[13.337,14.928],[11.685,6.135],[-24.798,14.928],[-29.858,5.665],[-21.276,-9.676],[4.838,-16.286],[18.058,-4.721],[18.363,-4.691],[19.202,-2.124],[24.246,1.913]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.529411764706,0.329411764706,0.196078446332,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[60.902,32.785],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 261","np":4,"cix":2,"bm":0,"ix":261,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.734,-0.351],[0.05,-2.918],[3.556,-0.496],[0.204,3.384],[0,0]],"o":[[-0.117,1.741],[-7.161,4.733],[0.339,-4.117],[0,0],[0,0]],"v":[[9.242,-6.996],[8.915,0.44],[-9.143,7.223],[-9.242,-5.856],[3.531,-7.184]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.815686334348,0.701960784314,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[56.31,78.206],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 262","np":4,"cix":2,"bm":0,"ix":262,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.901,-2.289],[13.504,0],[7.495,3.723],[3.273,2.693],[-6.265,2.018],[-0.78,0.465],[-0.216,2.619],[0.204,3.384],[0,0],[0,0],[0.077,-1.143],[0.05,-2.918],[-1.482,-0.885],[-2.08,-0.684]],"o":[[-9.673,7.957],[-8.934,0],[-3.83,-1.901],[3.698,-2.173],[2.567,-0.829],[0.829,-0.496],[0.339,-4.117],[-0.114,-1.802],[0,0],[0,0],[-0.12,1.741],[-0.098,5.288],[0.675,0.404],[6.184,2.034]],"v":[[35.562,8.726],[-0.003,21.459],[-24.875,15.647],[-35.562,8.726],[-15.935,1.734],[-10.594,-0.257],[-9.106,-5.4],[-9.205,-18.479],[-9.414,-21.459],[9.415,-21.459],[9.279,-19.619],[8.952,-12.183],[10.595,-0.257],[14.934,1.407]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.768627510819,0.611764705882,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[56.274,90.829],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 263","np":4,"cix":2,"bm":0,"ix":263,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-30.936],[12.49,-10.275],[13.504,0],[7.495,3.723],[3.273,2.693],[0,17.439],[-30.939,0]],"o":[[0,17.436],[-9.673,7.956],[-8.933,0],[-3.83,-1.901],[-12.492,-10.271],[0,-30.936],[30.94,0]],"v":[[56.021,-0.002],[35.565,43.286],[0,56.02],[-24.872,50.208],[-35.559,43.286],[-56.021,-0.002],[0,-56.02]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.039215686275,0.145098039216,0.250980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[56.271,56.27],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 264","np":4,"cix":2,"bm":0,"ix":264,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":900.000036657751,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Layer 7 Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[207.504,464.822,0],"to":[93,-191.333,0],"ti":[-117.475,-328.118,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":99.886,"s":[837.504,540.822,0],"to":[109.079,304.668,0],"ti":[163.89,7.575,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":199.77,"s":[489.504,1024.822,0],"to":[-217.074,-10.033,0],"ti":[-181,283.333,0]},{"t":298.000012137789,"s":[207.504,464.822,0]}],"ix":2},"a":{"a":0,"k":[62.397,57.94,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0,0,0.667],"y":[1,1,1]},"o":{"x":[0.826,0.826,0.333],"y":[0,0,0]},"t":49.85,"s":[0,0,100]},{"i":{"x":[0,0,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":78,"s":[100,100,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":162.451,"s":[100,100,100]},{"t":188.723757686876,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,9.211],[8.092,3.163],[0,0]],"o":[[0,-9.211],[0,0],[8.092,-3.163]],"v":[[6.916,0],[-6.916,-20.229],[-6.916,20.229]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.89019613827,0.023529413635,0.074509803922,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[118.548,28.143],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[2.791,0],[2.453,-0.958],[0,0],[-2.791,0],[-2.451,0.96]],"o":[[-2.451,-0.958],[-2.791,0],[0,0],[2.451,0.958],[2.791,0],[0,0]],"v":[[7.902,-20.231],[0,-21.734],[-7.902,-20.231],[-7.902,20.229],[0,21.734],[7.902,20.229]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[103.732,28.145],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":4,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-9.211],[-8.092,-3.163],[0,0]],"o":[[0,9.211],[0,0],[-8.092,3.163]],"v":[[-6.916,0],[6.916,20.229],[6.916,-20.229]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.529411764706,0.149019607843,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[88.915,28.143],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":4,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.64,-2.617],[10.492,0],[8.42,4.989],[-0.469,0.615],[-11.015,4.027],[-2.4,2.341],[-1.432,-0.543]],"o":[[-8.417,4.989],[-10.494,0],[0.403,-0.643],[4.133,0.817],[4.654,-1.699],[1.671,0.755],[2.453,0.931]],"v":[[28.736,0.09],[0.001,7.942],[-28.736,0.09],[-27.423,-1.807],[7.229,-1.493],[17.655,-7.942],[22.418,-6.011]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.878431432387,0.521568627451,0.439215716194,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[56.69,105.192],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":4,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.422,-0.289],[0.186,-0.975],[0.851,-2.664],[1.13,-2.201],[0.348,-0.04],[-0.668,2.189],[-0.422,2.468],[-0.124,1.32]],"o":[[-0.171,1.034],[-0.528,2.748],[-0.686,2.142],[-0.345,0.046],[1.394,-2.502],[0.73,-2.4],[0.223,-1.298],[0.382,0.317]],"v":[[3.127,-8.603],[2.562,-5.573],[0.468,2.543],[-2.089,9.383],[-3.127,9.513],[-0.252,1.745],[1.456,-5.576],[1.919,-9.513]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.839215746113,0.349019607843,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[66.44,103.235],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":4,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.4,-4.496],[-1.264,-1.99],[0.407,0.05],[0.608,2.499],[0.431,4.008],[-0.162,0.158]],"o":[[0.534,1.714],[-0.407,-0.034],[-1.325,-2.273],[-0.957,-3.918],[0.17,-0.153],[0.58,4.678]],"v":[[0.32,3.933],[3.006,9.951],[1.785,9.823],[-0.965,2.44],[-3.006,-9.484],[-2.506,-9.951]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.839215746113,0.349019607843,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[48.349,102.932],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":4,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.109,-0.196],[5.753,2.235],[-0.155,0.754],[-2.934,0.031],[-2.577,0.758],[-0.251,-0.584]],"o":[[-5.859,2.139],[0.242,-0.568],[2.81,0.903],[2.776,-0.031],[0.162,0.782],[0.087,0.202]],"v":[[9.083,0.264],[-9.083,-0.354],[-8.493,-2.356],[0.296,-1.08],[8.179,-2.403],[8.791,-0.332]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.909803981407,0.745098039216,0.235294132607,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[56.841,90.636],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":4,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.099,-0.758],[3.431,3.899],[-0.928,0.277],[-6.238,0.354],[-0.466,-1.726]],"o":[[-21.218,1.611],[0.86,-0.367],[13.043,10.398],[0.841,1.544],[0.199,0.742]],"v":[[19.442,8.795],[-19.442,-7.958],[-16.763,-8.92],[17.067,1.63],[18.995,6.547]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.152941176471,0.337254901961,0.580392156863,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[63.711,25.095],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":4,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.205,0.303],[-1.349,1.37],[-1.364,-0.34],[-2.572,-1.653],[1.272,-6.423],[-0.101,0.304],[5.832,3.246],[1.792,0.58],[1.815,-0.011],[0.386,-1.497],[-1.04,-1.424]],"o":[[-0.851,-1.256],[1.143,-1.161],[2.967,0.741],[4.984,3.205],[-0.062,0.312],[2.452,-7.378],[-1.646,-0.916],[-1.71,-0.553],[-1.483,0.01],[-0.488,1.895],[0.209,0.286]],"v":[[-10.842,-3.848],[-11.597,-8.876],[-6.613,-8.856],[1.746,-5.221],[10.659,10.123],[11.136,10.255],[0.69,-7.175],[-4.487,-9.428],[-9.94,-10.547],[-13.101,-8.3],[-11.327,-3.564]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.125490196078,0.278431372549,0.478431402468,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[67.025,42.825],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9","np":4,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.226,0.12],[3.132,2.52],[1.106,1.322],[0.489,0.775],[0.62,0.593],[-0.051,-0.528],[-1.067,-1.246],[-1.408,-1.083],[-3.925,-1.845]],"o":[[-3.546,-1.878],[-1.342,-1.079],[-0.588,-0.703],[-0.454,-0.718],[-0.335,-0.32],[0.164,1.685],[1.157,1.351],[3.466,2.664],[0.225,0.106]],"v":[[8.927,7.139],[-1.372,0.656],[-5.073,-2.939],[-6.695,-5.155],[-8.107,-7.264],[-9.101,-6.852],[-6.466,-2.324],[-2.573,1.308],[8.728,7.479]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.125490196078,0.278431372549,0.478431402468,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[47.219,31.881],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 10","np":4,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.222,-0.978],[2.262,0.755],[0.841,0.083],[-0.673,0.358],[-1.789,-1.239]],"o":[[0,0],[-2.262,-0.755],[-0.842,-0.083],[0.672,-0.358],[1.789,1.24]],"v":[[6.128,2.789],[1.655,-0.308],[-4.665,0.234],[-5.455,-1.438],[1.99,-1.55]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784313725,0.270588235294,0.207843152214,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[67.593,43.712],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 11","np":4,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.222,-0.978],[-2.262,0.755],[-0.841,0.083],[0.673,0.358],[1.789,-1.239]],"o":[[0,0],[2.262,-0.755],[0.842,-0.083],[-0.672,-0.359],[-1.789,1.239]],"v":[[-6.128,2.789],[-1.655,-0.308],[4.665,0.234],[5.455,-1.438],[-1.99,-1.55]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784313725,0.270588235294,0.207843152214,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[45.785,43.712],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 12","np":4,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.054,-0.541],[-0.726,-1.704],[-0.915,0.973],[0.412,-0.016],[0.022,1.259],[-0.069,1.183]],"o":[[-0.176,1.771],[0.426,1.002],[0.26,-0.277],[-1.629,0.062],[-0.021,-1.185],[0.032,-0.558]],"v":[[-1.153,-3.655],[-1.158,2.267],[1.624,3.24],[1.299,2.458],[-0.356,-0.105],[-0.295,-3.655]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.941176530427,0.694117647059,0.498039245605,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[57.158,55.579],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 13","np":4,"cix":2,"bm":0,"ix":13,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.817,0],[0,0.818],[0.817,0],[0,-0.817]],"o":[[0.817,0],[0,-0.817],[-0.817,0],[0,0.818]],"v":[[0,1.479],[1.48,0],[0,-1.479],[-1.48,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.909803981407,0.745098039216,0.235294132607,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[80.883,60.814],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 14","np":4,"cix":2,"bm":0,"ix":14,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.817,0],[0,0.818],[0.817,0],[0,-0.817]],"o":[[0.817,0],[0,-0.817],[-0.817,0],[0,0.818]],"v":[[0,1.479],[1.48,0],[0,-1.479],[-1.48,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.909803981407,0.745098039216,0.235294132607,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[32.052,60.814],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 15","np":4,"cix":2,"bm":0,"ix":15,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.525,0.104],[-0.489,-0.191],[-0.435,0.045],[0.022,0.19],[0.542,0.154],[0.665,-0.144]],"o":[[0.511,-0.101],[0.394,0.155],[0.16,-0.017],[-0.071,-0.616],[-0.657,-0.187],[-0.528,0.115]],"v":[[-1.167,0.148],[0.366,0.255],[1.568,0.758],[1.896,0.431],[0.602,-0.603],[-1.39,-0.659]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.941176530427,0.694117647059,0.498039245605,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[30.958,56.184],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 16","np":4,"cix":2,"bm":0,"ix":16,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.346,-0.207],[-0.411,-0.872],[-0.222,-0.854],[-0.11,0.329],[1.559,0.88]],"o":[[0.825,0.494],[0.389,0.825],[0.095,0.363],[0.65,-1.94],[-0.351,-0.199]],"v":[[-1.715,-2.094],[0.157,-0.053],[0.71,2.47],[1.412,2.47],[-1.4,-2.634]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.941176530427,0.694117647059,0.498039245605,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[31.697,56.142],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 17","np":4,"cix":2,"bm":0,"ix":17,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.479,-0.051],[0.714,-0.571],[-0.482,-0.705],[-0.122,0.032],[-0.369,0.398],[-0.813,0.103]],"o":[[-0.903,0.097],[-0.5,0.401],[0.069,0.101],[0.56,-0.145],[0.554,-0.595],[0.464,-0.06]],"v":[[1.779,-1.61],[-0.727,-0.621],[-1.776,1.504],[-1.472,1.629],[-0.27,0.23],[1.779,-0.866]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.941176530427,0.694117647059,0.498039245605,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[81.404,56.198],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 18","np":4,"cix":2,"bm":0,"ix":18,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.276,-0.318],[0.38,-1.061],[-0.54,-0.859],[-0.109,0.241],[-0.162,0.827],[-0.716,0.878]],"o":[[-0.735,0.849],[-0.321,0.895],[0.122,0.194],[0.348,-0.768],[0.219,-1.115],[0.259,-0.318]],"v":[[0.846,-2.927],[-0.875,-0.066],[-1.023,3.004],[-0.445,3.004],[-0.094,0.515],[1.304,-2.469]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.941176530427,0.694117647059,0.498039245605,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[80.369,55.679],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 19","np":4,"cix":2,"bm":0,"ix":19,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.41,0],[0,1.71],[1.409,0],[0,-1.709]],"o":[[1.409,0],[0,-1.709],[-1.41,0],[0,1.71]],"v":[[0,3.095],[2.552,0],[0,-3.095],[-2.552,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784313725,0.270588235294,0.207843152214,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[65.996,51.143],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 20","np":4,"cix":2,"bm":0,"ix":20,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.41,0],[0,1.71],[1.409,0],[0,-1.709]],"o":[[1.409,0],[0,-1.709],[-1.41,0],[0,1.71]],"v":[[0,3.095],[2.552,0],[0,-3.095],[-2.552,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784313725,0.270588235294,0.207843152214,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[47.182,51.143],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 21","np":4,"cix":2,"bm":0,"ix":21,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.619,0.524],[-0.195,0.009],[-0.745,0.653],[-0.382,-0.782],[-0.05,0.078],[-0.869,-0.178],[-1.56,-0.232],[0.171,-0.061],[1.446,-0.044]],"o":[[-0.185,-0.06],[0.875,-0.042],[1.182,-1.036],[0.04,0.083],[0.241,-0.371],[0.996,0.205],[0.18,0.026],[-1.229,0.439],[-1.432,0.043]],"v":[[-5.563,0.416],[-5.519,0.074],[-2.709,-0.808],[0.262,-0.329],[0.463,-0.315],[2.164,-1.229],[5.543,0.192],[5.577,0.529],[0.51,1.801]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.929411824544,0.305882352941,0.305882352941,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[57.162,63.974],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 22","np":4,"cix":2,"bm":0,"ix":22,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-2.442,0.163],[0,0]],"o":[[0,0],[3.521,-0.234],[0,0]],"v":[[-5.663,-2.049],[0.17,1.886],[5.663,-1.898]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.988235353956,0.396078461292,0.396078461292,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[57.131,66.311],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 23","np":4,"cix":2,"bm":0,"ix":23,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.206,2.265],[2.821,0.256],[0.206,-2.265],[-2.821,-0.257]],"o":[[0.206,-2.265],[-2.822,-0.256],[-0.206,2.264],[2.821,0.256]],"v":[[5.108,0.464],[0.373,-4.101],[-5.108,-0.464],[-0.373,4.101]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.760784373564,0.650980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[70.848,60.369],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 24","np":4,"cix":2,"bm":0,"ix":24,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.828,0.162],[0.13,2.271],[2.828,-0.162],[-0.13,-2.27]],"o":[[2.828,-0.162],[-0.13,-2.27],[-2.828,0.162],[0.13,2.27]],"v":[[0.236,4.111],[5.121,-0.294],[-0.236,-4.111],[-5.121,0.294]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.760784373564,0.650980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[42.783,60.391],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 25","np":4,"cix":2,"bm":0,"ix":25,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.64,-2.617],[10.492,0],[8.42,4.989],[-0.469,0.615],[-1.847,0.702],[-2.515,1.403],[-13.745,4.436],[-0.972,-0.435],[-1.432,-0.543]],"o":[[-8.417,4.989],[-10.494,0],[0.403,-0.643],[1.438,-1.878],[2.248,-0.853],[4.673,1.633],[0.932,0.521],[1.671,0.755],[2.453,0.931]],"v":[[28.736,0.807],[0.001,8.659],[-28.736,0.807],[-27.423,-1.09],[-22.418,-5.294],[-14.833,-8.631],[14.78,-8.659],[17.655,-7.225],[22.418,-5.294]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.988235353956,0.396078461292,0.396078461292,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[56.69,104.475],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 26","np":4,"cix":2,"bm":0,"ix":26,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.476,1.268],[0.475,-1.426],[-1.427,-2.695],[0.159,4.756]],"o":[[-0.581,-1.55],[-0.476,1.427],[1.427,2.696],[-0.158,-4.756]],"v":[[1.348,-8.245],[-0.872,-8.72],[-1.665,7.45],[2.933,4.28]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.839215746113,0.349019607843,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[80.612,70.01],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 27","np":4,"cix":2,"bm":0,"ix":27,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.476,1.268],[-0.475,-1.426],[1.427,-2.695],[-0.159,4.756]],"o":[[0.581,-1.55],[0.476,1.427],[-1.427,2.696],[0.158,-4.756]],"v":[[-1.348,-8.245],[0.872,-8.72],[1.665,7.45],[-2.933,4.28]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.839215746113,0.349019607843,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[32.131,70.01],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 28","np":4,"cix":2,"bm":0,"ix":28,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[2.391,-3.043],[1.543,3.226],[4.282,-1.664],[0,0],[1.428,2.614],[0.633,-7.452],[-1.164,10.022],[-7.476,3.176],[-0.928,0.276],[-4.421,-0.469],[-3.169,-5.843],[-0.466,-1.727],[-0.1,-0.757]],"o":[[0,0],[-3.859,-8.06],[-4.278,1.664],[0,0],[-1.426,-2.618],[0,0],[0.923,-7.92],[0.86,-0.366],[3.533,-1.044],[12.416,1.316],[0.842,1.543],[0.198,0.742],[1.099,7.992]],"v":[[20.855,19.378],[20.143,11.055],[-1.025,-0.597],[-1.05,5.32],[-14.34,-2.975],[-23.615,17.951],[-25.993,0.591],[-12.826,-17.006],[-10.146,-17.969],[1.832,-18.909],[23.682,-7.419],[25.612,-2.5],[26.059,-0.253]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.152941176471,0.337254901961,0.580392156863,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[57.094,34.144],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 29","np":4,"cix":2,"bm":0,"ix":29,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-2.061,-3.647],[2.378,-1.427],[0,0],[0,0]],"o":[[0,0],[2.061,3.646],[-2.378,1.427],[0,0],[0,0]],"v":[[-1.902,-5.946],[3.488,-3.408],[1.269,5.629],[-4.281,6.262],[-5.549,0.714]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.831372608858,0.701960784314,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[81.504,56.137],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 30","np":4,"cix":2,"bm":0,"ix":30,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.944,2.648],[-7.501,7.296],[-0.962,-1.593]],"o":[[0,0],[0,0],[2.683,0.304],[1.661,1.083],[3.17,5.231]],"v":[[11.078,7.117],[-13.971,4.106],[-13.304,-0.719],[7.079,-7.117],[11.078,-3.029]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.137254901961,0.301960784314,0.521568627451,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[57.597,14.854],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 31","np":4,"cix":2,"bm":0,"ix":31,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-2.061,-4.914],[-5.391,0.158],[0,0],[-2.061,4.915],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[2.061,4.915],[0,0],[5.391,0.158],[2.061,-4.914],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-23.21,-1.031],[-20.357,14.03],[0.412,26.397],[-0.413,26.397],[20.356,14.03],[23.21,-1.031],[23.21,-6.579],[20.864,-15.617],[4.851,-24.337],[-13.102,-26.556],[-21.868,-18.831],[-23.21,-7.848]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.831372608858,0.701960784314,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[56.69,53.125],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 32","np":4,"cix":2,"bm":0,"ix":32,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.052,-2.692],[2.664,-0.714],[0,0]],"o":[[0,0],[-6.85,4.859],[0.699,-5.184],[0,0]],"v":[[8.041,-6.183],[7.821,-1.451],[-8.042,6.183],[-7.939,-6.183]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.815686334348,0.701960784314,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[56.638,80.631],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 33","np":4,"cix":2,"bm":0,"ix":33,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[2.061,-3.647],[-2.378,-1.427],[0,0],[0,0]],"o":[[0,0],[-2.061,3.646],[2.378,1.427],[0,0],[0,0]],"v":[[1.903,-5.946],[-3.488,-3.408],[-1.269,5.629],[4.281,6.262],[5.549,0.714]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.831372608858,0.701960784314,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[31.259,56.137],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 34","np":4,"cix":2,"bm":0,"ix":34,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.64,-2.617],[17.718,10.499],[-2.453,0.931],[-1.914,4.452],[-0.003,0.006],[0.316,3.811],[0,0],[-0.768,-3.749],[-0.457,-0.822],[-4.356,-1.653]],"o":[[-17.631,10.451],[1.639,-2.617],[4.561,-1.732],[0.003,-0.006],[1.517,-3.559],[0,0],[-0.31,3.773],[0.191,0.928],[2.242,4.092],[2.453,0.931]],"v":[[28.736,10.167],[-28.736,10.167],[-22.418,4.067],[-8.94,-4.81],[-8.931,-4.831],[-7.99,-20.667],[7.99,-20.667],[8.332,-6.88],[9.235,-4.214],[22.418,4.067]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.831372608858,0.701960784314,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[56.69,95.114],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 35","np":4,"cix":2,"bm":0,"ix":35,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.944,2.648],[-3.499,1.897],[-3.8,-2.478],[-0.962,-1.593]],"o":[[0,0],[0,0],[0.804,-2.254],[5.297,-2.866],[1.661,1.083],[3.17,5.231]],"v":[[11.078,8.726],[-13.971,5.714],[-13.304,0.89],[-7.312,-5.86],[7.079,-5.509],[11.078,-1.42]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.152941176471,0.337254901961,0.580392156863,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[57.597,13.246],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 36","np":4,"cix":2,"bm":0,"ix":36,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-31.172],[16.586,-9.83],[7.613,-1.034],[0.348,-0.041],[2.239,0],[1.758,0.168],[0.407,0.049],[6.641,3.933],[0,20.678],[-31.171,0]],"o":[[0,20.678],[-6.333,3.753],[-0.345,0.047],[-2.173,0.254],[-1.801,0],[-0.406,-0.034],[-8.025,-0.925],[-16.586,-9.83],[0,-31.172],[31.169,-0.001]],"v":[[56.44,0],[28.736,48.59],[7.661,55.926],[6.624,56.057],[0.001,56.441],[-5.336,56.19],[-6.556,56.064],[-28.736,48.59],[-56.44,0],[0.001,-56.441]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.039215686275,0.145098039216,0.250980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[56.69,56.692],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 37","np":4,"cix":2,"bm":0,"ix":37,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":900.000036657751,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Layer 8 Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":-35,"s":[839.575,543.709,0],"to":[34.667,127.333,0],"ti":[364.667,-20,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":64.886,"s":[495.575,1019.709,0],"to":[-108.797,5.967,0],"ti":[-160.483,386.251,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":164.77,"s":[187.575,495.709,0],"to":[77.159,-185.708,0],"ti":[-152.667,-368,0]},{"t":263.00001071221,"s":[839.575,543.709,0]}],"ix":2},"a":{"a":0,"k":[62.892,58.179,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0,0,0.667],"y":[1,1,1]},"o":{"x":[0.826,0.826,0.333],"y":[0,0,0]},"t":124.125,"s":[0,0,100]},{"i":{"x":[0,0,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":152.276,"s":[100,100,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":236.726,"s":[100,100,100]},{"t":263.00001071221,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.004,-0.144],[-0.019,8.406],[-7.81,2.848],[0,-0.144],[0.001,-12.263]],"o":[[-7.863,-2.898],[0.019,-8.387],[0.004,0.144],[0.001,12.263],[0,0.144]],"v":[[6.548,18.825],[-6.542,-0.04],[6.548,-18.825],[6.56,-18.394],[6.56,18.394]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.321568627451,0.701960784314,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[93.012,22.394],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.142,0.118],[0,0.131],[0,12.289],[-0.004,0.131],[-0.137,-0.055],[-1.854,-1.735],[-1.083,-2.155],[-0.276,-2.212],[-0.074,-0.383],[0,0],[0.002,-0.055],[-0.048,-0.044],[0,0],[-0.063,-0.157],[0,0],[0.004,-0.062],[0,0],[-0.066,-0.067],[0,0],[0.223,-0.943],[2.039,-2.439],[2.514,-1.26],[0.581,-0.205]],"o":[[-0.004,-0.131],[0,-12.289],[0,-0.131],[0.158,-0.124],[2.349,0.946],[1.763,1.65],[0.999,1.986],[0.048,0.384],[0,0],[-0.048,0.044],[0.002,0.055],[0,0],[-0.063,0.157],[0,0],[-0.053,0.05],[0,0],[0.01,0.077],[0,0],[-0.098,0.958],[-0.735,3.096],[-1.8,2.152],[-0.549,0.275],[-0.129,0.046]],"v":[[-6.54,18.828],[-6.551,18.436],[-6.551,-18.431],[-6.54,-18.823],[-6.101,-18.783],[0.212,-14.784],[4.504,-9.094],[6.458,-2.803],[6.551,-1.645],[6.551,-1.41],[6.511,-1.253],[6.551,-1.095],[6.551,-0.704],[6.551,-0.233],[6.551,0.866],[6.511,1.044],[6.511,1.187],[6.551,1.415],[6.551,1.729],[6.141,4.587],[2.001,12.902],[-4.454,18.051],[-6.137,18.803]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.84313731474,0,0.152941176471,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[120.095,22.391],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":4,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.235,-0.085],[0,0],[0.237,0.022],[1.667,0.592],[0.074,0.193],[0,0.209],[-0.001,12.095],[-0.068,0.203],[-0.196,0.067],[-1.758,0.038],[-1.541,-0.199],[-1.133,-0.408],[-0.082,-0.187],[0,-0.209],[0.001,-12.109],[0.062,-0.19],[0.174,-0.061],[1.787,0.032]],"o":[[0,0],[-0.234,-0.085],[-1.783,0.025],[-0.173,-0.061],[-0.067,-0.204],[-0.001,-12.095],[0,-0.209],[0.09,-0.221],[1.65,-0.565],[1.551,-0.033],[1.193,0.154],[0.172,0.062],[0.074,0.202],[0.001,12.109],[0,0.196],[-0.069,0.194],[-1.67,0.59],[-0.239,0.022]],"v":[[0.784,20.129],[-0.785,20.129],[-1.499,20.089],[-6.653,19.126],[-7.072,18.804],[-7.129,18.181],[-7.129,-18.105],[-7.072,-18.727],[-6.579,-19.073],[-1.491,-20.057],[3.152,-19.93],[6.637,-19.052],[7.066,-18.738],[7.128,-18.116],[7.128,18.211],[7.076,18.794],[6.663,19.122],[1.501,20.089]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.937254961799,0.937254961799,0.937254961799,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[106.559,22.353],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":4,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.294,-3.486],[7.088,5.882],[0.939,3.896],[-0.364,0.06],[-0.93,-0.084],[-6.555,0.961],[-0.376,-0.576]],"o":[[-5.838,0.034],[-8.618,-7.15],[0.338,-0.088],[0.642,-0.106],[8.647,14.237],[0.466,0.557],[2.621,4.012]],"v":[[17.295,13.68],[-4.8,6.787],[-17.37,-13.372],[-16.321,-13.595],[-13.948,-13.623],[13.205,0.292],[14.473,1.995]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.152941176471,0.337254901961,0.580392156863,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[68.812,20.327],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":4,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.004,-0.18],[-0.828,-3.867],[-0.659,-1.842],[-1.288,-1.015],[0.003,0.38],[0.319,0.73],[0.372,0.991],[0.466,1.754],[0.086,3.824]],"o":[[-0.081,3.938],[0.411,1.914],[0.536,1.499],[0.26,0.204],[-0.007,-0.812],[-0.423,-0.97],[-0.638,-1.7],[-0.982,-3.692],[-0.004,-0.179]],"v":[[-2.781,-11.074],[-1.892,0.504],[-0.273,6.138],[2.17,11.05],[2.86,10.764],[2.158,8.521],[0.96,5.582],[-0.686,0.389],[-2.502,-11.074]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.125490196078,0.278431372549,0.478431402468,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[32.274,66.014],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":4,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.026,0.24],[-1.698,3.253],[-1.069,1.401],[-1.148,1.416],[0.546,-0.368],[1.062,-1.402],[0.845,-1.788],[0.257,-3.797]],"o":[[0.389,-3.657],[0.816,-1.563],[1.115,-1.463],[0.353,-0.435],[-1.472,0.989],[-1.193,1.577],[-1.633,3.452],[-0.017,0.248]],"v":[[-4.87,10.017],[-1.585,-0.528],[1.251,-4.993],[4.917,-9.056],[4.267,-9.897],[0.532,-5.924],[-2.531,-0.868],[-5.252,10.017]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.125490196078,0.278431372549,0.478431402468,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[40.087,33.24],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":4,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.052,-0.235],[-2.621,-1.003],[-0.928,0.912],[0.13,1.041],[0.02,-0.165],[1.047,-0.612],[0.999,0.521],[0.565,1.954]],"o":[[0.604,2.704],[1.093,0.418],[0.818,-0.803],[-0.021,-0.164],[-0.133,1.084],[-1.063,0.622],[-1.811,-0.943],[-0.067,-0.233]],"v":[[-4.668,-3.132],[0.377,2.82],[3.902,2.552],[4.583,-0.891],[4.326,-0.891],[3.034,1.909],[-0.518,1.453],[-4.307,-3.231]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.125490196078,0.278431372549,0.478431402468,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[78.353,40.802],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":4,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.042,-0.27],[-5.568,-6.148],[-3.434,-1.554],[-3.515,1.928],[-0.307,1.781],[1.228,1.87],[-0.074,-0.148],[0.612,-2.138],[1.54,-0.554],[3.058,1.605],[2.199,6.422],[-0.506,4.073]],"o":[[-1.271,8.112],[2.529,2.793],[3.39,1.533],[1.558,-0.855],[0.406,-2.359],[-0.091,-0.139],[0.942,1.873],[-0.462,1.617],[-3.443,1.238],[-6.006,-3.151],[-1.326,-3.874],[0.034,-0.269]],"v":[[-14.507,-15.908],[-8.059,6.633],[1.026,13.273],[12.264,14.25],[15.372,10.156],[13.119,3.752],[12.897,3.88],[14.269,10.097],[10.834,13.44],[0.236,11.424],[-12.679,-3.593],[-14.032,-15.843]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.125490196078,0.278431372549,0.478431402468,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[58.319,28.723],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":4,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.16,1.439],[-2.399,-0.16],[1.279,-0.64]],"o":[[-0.167,-1.5],[2.399,0.16],[-1.28,0.64]],"v":[[-4.234,1.359],[2.003,-2.639],[2.803,-0.079]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784313725,0.270588235294,0.207843152214,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[44.977,40.948],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9","np":4,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.115,-0.455],[-0.794,-0.63],[-0.798,0.556],[0.018,0.185],[0.512,-0.014],[-0.177,0.948]],"o":[[-0.242,0.953],[0.742,0.589],[0.14,-0.097],[-0.087,-0.872],[-0.959,0.027],[0.083,-0.448]],"v":[[-1.767,-1.421],[-0.997,1.156],[1.736,1.32],[1.991,0.877],[0.492,0.61],[-1.073,-1.229]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.941176530427,0.694117647059,0.498039245605,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[55.937,55.472],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 10","np":4,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.378,-0.095],[-0.582,-0.549],[-0.553,-0.323],[-0.026,0.212],[0.536,0.428],[0.815,0.176]],"o":[[0.777,0.195],[0.47,0.442],[0.21,0.124],[0.095,-0.76],[-0.656,-0.523],[-0.376,-0.082]],"v":[[-1.732,-1.056],[0.278,0.086],[1.574,1.594],[2.015,1.341],[0.709,-0.619],[-1.572,-1.635]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.941176530427,0.694117647059,0.498039245605,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[33.433,48.799],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 11","np":4,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.297,-0.275],[-0.335,-1.122],[-0.367,-0.817],[-0.101,0.185],[1.392,1.217]],"o":[[0.858,0.793],[0.257,0.863],[0.093,0.208],[1.065,-1.955],[-0.3,-0.262]],"v":[[-1.814,-2.525],[0.001,0.396],[0.526,3.019],[1.046,3.019],[-1.373,-2.966]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.941176530427,0.694117647059,0.498039245605,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[34.353,48.395],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 12","np":4,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.209,-0.089],[0.104,-1.559],[-0.108,0.115],[-0.481,0.541],[-0.723,0.335]],"o":[[-1.286,0.549],[-0.011,0.162],[0.489,-0.524],[0.527,-0.592],[0.212,-0.098]],"v":[[1.418,-1.734],[-1.801,1.576],[-1.481,1.708],[-0.225,-0.037],[1.6,-1.424]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.941176530427,0.694117647059,0.498039245605,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[79.251,49.232],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 13","np":4,"cix":2,"bm":0,"ix":13,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.095,-0.116],[-0.429,-2.238],[-0.075,0.296],[-0.302,1.047],[-0.693,0.959]],"o":[[-1.357,1.65],[0.061,0.319],[0.266,-1.04],[0.329,-1.14],[0.088,-0.12]],"v":[[1.305,-3.347],[-1.171,3.144],[-0.549,3.144],[-0.032,-0.027],[1.512,-3.187]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.941176530427,0.694117647059,0.498039245605,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[78.498,48.685],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 14","np":4,"cix":2,"bm":0,"ix":14,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.422,0],[0,1.725],[1.422,0],[0,-1.724]],"o":[[1.422,0],[0,-1.724],[-1.422,0],[0,1.725]],"v":[[0,3.122],[2.575,0],[0,-3.122],[-2.575,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784313725,0.270588235294,0.207843152214,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[65.546,47.985],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 15","np":4,"cix":2,"bm":0,"ix":15,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.422,0],[0,1.725],[1.422,0],[0,-1.724]],"o":[[1.422,0],[0,-1.724],[-1.422,0],[0,1.725]],"v":[[0,3.122],[2.575,0],[0,-3.122],[-2.575,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784313725,0.270588235294,0.207843152214,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[46.569,47.985],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 16","np":4,"cix":2,"bm":0,"ix":16,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-1.512,0.842],[-0.849,-1.16],[-1.593,-0.165],[-2.867,-0.083],[1.805,-0.165],[1.805,0.041],[1.062,0.165]],"o":[[0,0],[1.858,-1.036],[0,0],[1.593,0.166],[0,0],[-1.806,0.166],[-1.384,-0.032],[-1.062,-0.166]],"v":[[-6.823,0.062],[-4.38,-0.517],[0.292,-0.269],[2.841,-1.098],[6.823,0.27],[3.744,1.056],[0.133,1.512],[-3.531,0.892]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.941176530427,0.580392156863,0.470588265213,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[56.602,61.607],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 17","np":4,"cix":2,"bm":0,"ix":17,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-1.881,-0.987],[-1.878,1.134],[0,0]],"o":[[0,0],[2.095,1.099],[1.618,-0.978],[0,0]],"v":[[-5.575,-2.041],[-2.921,1.024],[3.558,0.776],[5.575,-2.123]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.643137254902,0.533333333333,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[56.735,64.124],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 18","np":4,"cix":2,"bm":0,"ix":18,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.092,2.292],[2.855,0.115],[0.092,-2.292],[-2.855,-0.115]],"o":[[0.092,-2.292],[-2.855,-0.114],[-0.092,2.292],[2.855,0.114]],"v":[[5.17,0.207],[0.166,-4.15],[-5.17,-0.207],[-0.167,4.151]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.760784373564,0.650980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[68.414,57.06],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 19","np":4,"cix":2,"bm":0,"ix":19,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.853,0.164],[0.132,2.29],[2.853,-0.163],[-0.132,-2.29]],"o":[[2.853,-0.164],[-0.131,-2.291],[-2.853,0.164],[0.131,2.29]],"v":[[0.238,4.146],[5.165,-0.297],[-0.238,-4.147],[-5.165,0.297]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.760784373564,0.650980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[44.185,57.547],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 20","np":4,"cix":2,"bm":0,"ix":20,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-1.155,5.197],[1.732,-0.77],[0,0]],"o":[[0,0],[1.155,-5.197],[-1.732,0.77],[0,0]],"v":[[-3.079,5.582],[3.08,1.347],[-1.732,-5.774],[-4.234,0.577]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.831372608858,0.701960784314,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[79.425,49.029],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 21","np":4,"cix":2,"bm":0,"ix":21,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[1.154,5.197],[-1.733,-0.77],[0,0]],"o":[[0,0],[-1.155,-5.197],[1.732,0.77],[0,0]],"v":[[3.08,5.582],[-3.08,1.347],[1.732,-5.774],[4.234,0.577]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.831372608858,0.701960784314,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[33.05,49.029],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 22","np":4,"cix":2,"bm":0,"ix":22,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[2.117,15.206],[2.559,-10.555],[-6.737,-9.431],[-10.202,8.662],[0,0],[1.347,4.427],[4.619,-1.539]],"o":[[0,0],[-1.744,7.197],[6.736,9.432],[10.201,-8.662],[0,0],[0,0],[-4.62,1.54]],"v":[[-11.597,-28.62],[-20.393,-12.628],[-15.396,15.146],[11.358,19.958],[22.137,-9.106],[16.555,-15.65],[13.668,-8.529]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.831372608858,0.701960784314,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[56.338,52.217],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 23","np":4,"cix":2,"bm":0,"ix":23,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.57,-7.62],[5.127,8.281],[0.536,4.901],[0,0],[0,0],[-5.644,-4.923],[-1.353,-0.717],[-0.186,-0.062],[-0.094,-0.138]],"o":[[-3.269,-2.43],[-4.685,-7.563],[-0.42,-3.803],[0,0],[0.69,9.067],[1.142,0.993],[0.655,0.361],[0.094,0.135],[0.007,2.008]],"v":[[10.464,20.687],[-3.182,5.219],[-10.044,-14.501],[-10.219,-20.687],[-6.452,-20.687],[3.946,0.969],[7.732,3.622],[9.526,4.455],[9.808,4.862]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.137254901961,0.301960784314,0.521568627451,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[41.526,71.471],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 24","np":4,"cix":2,"bm":0,"ix":24,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.543,-11.243],[1.929,0.272],[4.72,17.575],[-2.744,8.857],[-2.336,-6.128],[-6.716,-3.809],[-3.919,-1.96],[-0.211,-0.07],[-0.094,-0.138]],"o":[[-1.982,-0.075],[-8.431,-11.086],[-3.758,-13.996],[0.545,6.602],[2.743,7.215],[0.053,0],[0.324,0.182],[0.094,0.135],[0.035,11.142]],"v":[[17.291,40.75],[11.419,40.228],[-13.533,-6.151],[-13.398,-40.75],[-8.497,-21.487],[5.073,-3.582],[11.807,1.917],[13.326,2.606],[13.607,3.013]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.152941176471,0.337254901961,0.580392156863,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[37.728,73.32],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 25","np":4,"cix":2,"bm":0,"ix":25,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-6.654,-6.155],[14.584,6.451],[-6.994,0.658]],"o":[[-13.924,5.803],[5.49,-4.427],[9.48,-0.94]],"v":[[22.427,1.428],[-22.427,0.946],[-2.124,-6.458]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.392156892664,0.537254901961,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[56.622,108.33],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 26","np":4,"cix":2,"bm":0,"ix":26,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.746,1.56],[0.952,2.223],[1.006,2.005],[1.625,2.884],[-0.526,0.21],[-1.61,-2.966],[-0.964,-2.117],[-0.598,-2.248]],"o":[[-1.037,-2.18],[-0.88,-2.061],[-1.471,-2.94],[0.479,-0.223],[1.986,2.678],[1.111,2.042],[0.959,2.117],[0.429,1.601]],"v":[[3.451,10.386],[0.742,3.634],[-2.08,-2.467],[-6.617,-11.298],[-5.105,-11.947],[0.395,-3.588],[3.523,2.654],[6.188,9.233]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.392156892664,0.537254901961,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[38.2,100.014],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 27","np":4,"cix":2,"bm":0,"ix":27,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.639,-2.236],[0,0],[0,0],[-0.181,0.163],[-0.366,3.219],[0,0]],"o":[[-10.839,4.898],[0,0],[0.229,-0.159],[1.983,-1.791],[0,0],[-0.103,2.199]],"v":[[7.781,-3.564],[-4.207,10.754],[-7.781,1.083],[-7.164,0.598],[-4.004,-8.268],[7.186,-10.755]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.815686334348,0.701960784314,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[54.785,81.369],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 28","np":4,"cix":2,"bm":0,"ix":28,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.532,-0.207],[0.42,-1.303],[0.592,-2.189],[0.445,-2.226],[0.185,-1.118],[0.648,-0.874],[0.389,0.886],[-0.347,1.976],[-0.72,2.349],[-0.993,2.173],[-0.714,1.159]],"o":[[-0.41,1.322],[-0.698,2.155],[-0.595,2.189],[-0.222,1.112],[-0.175,1.049],[-0.454,0.61],[-0.82,-1.883],[0.423,-2.421],[0.699,-2.283],[0.57,-1.25],[0.532,0.201]],"v":[[4.496,-11.86],[3.309,-7.886],[1.307,-1.387],[-0.25,5.239],[-0.876,8.581],[-1.671,11.585],[-3.676,11.585],[-3.322,4.98],[-1.584,-2.186],[0.909,-8.897],[2.895,-12.471]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.392156892664,0.537254901961,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[73.503,98.647],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 29","np":4,"cix":2,"bm":0,"ix":29,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.617,-2.424],[13.655,0],[9.711,7.705],[-2.993,2.392],[-1.202,0.548],[-0.526,0.209],[-2.865,2.011],[-0.182,0.163],[-0.366,3.219],[-0.066,0.721],[0,0],[0.1,-2.202],[-0.639,-2.236],[-0.877,-0.733],[-5.064,-1.901],[-0.532,-0.207],[-2.051,-2.264]],"o":[[-9.809,8.014],[-13.357,0],[1.137,-2.9],[0.758,-0.608],[0.479,-0.222],[4.729,-1.917],[0.229,-0.159],[1.982,-1.792],[0.254,-2.236],[0.16,-1.76],[0,0],[-0.103,2.198],[0.382,1.328],[1.935,1.613],[0.532,0.201],[4.429,1.713],[2.568,2.834]],"v":[[35.674,11.007],[-0.32,23.828],[-35.674,11.52],[-28.91,0.162],[-25.916,-1.567],[-24.403,-2.215],[-10.495,-7.831],[-9.878,-8.316],[-6.718,-17.182],[-6.361,-22.068],[4.832,-23.508],[4.472,-19.668],[5.067,-12.478],[6.912,-9.274],[18.9,-4.107],[20.5,-3.496],[31.22,2.401]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.831372608858,0.701960784314,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[57.499,90.283],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 30","np":4,"cix":2,"bm":0,"ix":30,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-4.557,-11.994],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[3.393,8.927],[0,0],[0,0],[0,0],[0,0]],"v":[[2.262,-22.589],[11.617,-3.797],[14.976,22.589],[-0.303,18.932],[-11.172,7.157],[-15.01,-4.357]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.137254901961,0.301960784314,0.521568627451,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[73.504,75.771],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 31","np":4,"cix":2,"bm":0,"ix":31,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[6.974,-12.396],[0,0],[0,0],[0,0],[0,0],[-3.805,-16.827],[1.93,0.273],[4.719,17.575],[-5.005,4.235],[0,0],[-5.03,1.325],[-0.363,0.06],[-0.93,-0.085],[-6.301,-7.554],[-0.376,-0.576],[0.295,-3.486],[0.57,-1.438],[0.561,-1.801],[0,0],[-1.212,-2.057],[-0.805,-2.261]],"o":[[-10.394,18.478],[0,0],[0,0],[0,0],[0,0],[-1.982,-0.075],[-8.43,-11.086],[-7.698,-28.678],[5.001,-4.234],[0,0],[0.338,-0.087],[0.642,-0.106],[6.921,0.629],[0.467,0.558],[2.621,4.012],[-0.241,2.831],[-0.695,1.757],[0,0],[1.582,1.807],[1.212,2.061],[3.407,9.552]],"v":[[33.18,36.723],[20.091,42.692],[7.001,33.259],[0.458,15.167],[-5.317,13.82],[-1.637,52.25],[-7.506,51.727],[-32.456,5.349],[-22.253,-46.811],[-12.438,-49.313],[-5.21,-54.866],[-4.161,-55.088],[-1.786,-55.116],[25.365,-41.202],[26.634,-39.498],[29.455,-27.813],[27.883,-21.174],[26.02,-15.831],[25.481,-14.09],[29.678,-8.278],[32.716,-1.782]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.152941176471,0.337254901961,0.580392156863,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[56.652,61.82],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 32","np":4,"cix":2,"bm":0,"ix":32,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-31.44],[12.781,-10.438],[5.133,-2.136],[7.748,0],[0.717,0.028],[0,0],[1.929,0.272],[4.685,2.073],[3.764,2.987],[0,18.083],[-31.44,0]],"o":[[0,17.788],[-4.24,3.464],[-6.733,2.806],[-0.724,0],[0,0],[-1.983,-0.075],[-5.246,-0.743],[-4.454,-1.964],[-13.144,-10.429],[0,-31.44],[31.443,0]],"v":[[56.931,-0.002],[35.992,44.109],[21.868,52.578],[-0.001,56.93],[-2.162,56.891],[-2.165,56.891],[-8.034,56.367],[-22.985,52.096],[-35.356,44.623],[-56.931,-0.002],[-0.001,-56.93]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.039215686275,0.145098039216,0.250980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[57.181,57.181],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 33","np":4,"cix":2,"bm":0,"ix":33,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.001,0.053],[-0.023,0.001],[0,0],[0.021,-0.001]],"o":[[0.023,-0.002],[0,0],[-0.022,0.003],[-0.001,-0.053]],"v":[[-0.034,-0.077],[0.034,-0.081],[0.034,0.076],[-0.031,0.081]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.894117706897,0.415686304429,0.501960784314,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[126.612,23.495],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 34","np":4,"cix":2,"bm":0,"ix":34,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.025,0.033],[-0.067,0.035],[0,0]],"o":[[-0.008,-0.067],[0,0],[-0.021,0.038]],"v":[[-0.03,0.063],[0.039,-0.098],[0.039,0.059]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.878431432387,0.298039215686,0.403921598547,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[126.608,23.355],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 35","np":4,"cix":2,"bm":0,"ix":35,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.013,0.068],[-0.022,-0.002],[0,0]],"o":[[0.022,0],[0,0],[-0.076,-0.031]],"v":[[-0.026,-0.08],[0.039,-0.077],[0.039,0.08]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.901960844152,0.470588265213,0.549019607843,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[126.607,21.216],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 36","np":4,"cix":2,"bm":0,"ix":36,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.02,0.041],[-0.088,0.023],[0,0]],"o":[[-0.009,-0.064],[0,0],[-0.024,0.039]],"v":[[-0.022,0.056],[0.044,-0.098],[0.044,0.059]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.921568687289,0.588235294118,0.647058823529,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[126.602,21.08],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 37","np":4,"cix":2,"bm":0,"ix":37,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.001,0.083],[-0.025,-0.039]],"o":[[-0.123,-0.048],[0.019,-0.042],[0,0]],"v":[[0.062,0.137],[-0.003,-0.094],[0.062,-0.098]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.917647118662,0.560784313725,0.627450980392,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[126.584,23.67],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 38","np":4,"cix":2,"bm":0,"ix":38,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.121,0.157]],"o":[[-0.115,-0.157],[0,0]],"v":[[0.061,0.235],[0.061,-0.235]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.850980451995,0.094117654539,0.231372563979,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[126.585,21.923],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 39","np":4,"cix":2,"bm":0,"ix":39,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.235,0.031],[0,-0.026],[0,0]],"o":[[0,0.026],[0,0],[0.222,-0.154]],"v":[[0.354,-0.001],[0.352,0.077],[-0.354,0.077]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.964705942191,0.964705942191,0.964705942191,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[107.696,42.406],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 40","np":4,"cix":2,"bm":0,"ix":40,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.001,0.026],[-0.221,-0.153]],"o":[[0,-0.026],[0.235,0.031],[0,0]],"v":[[-0.352,0.076],[-0.354,-0.001],[0.354,0.076]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.964705942191,0.964705942191,0.964705942191,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[105.419,42.406],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 41","np":4,"cix":2,"bm":0,"ix":41,"mn":"ADBE Vector Group","hd":false}],"ip":-35.0000014255792,"op":865.000035232172,"st":-35.0000014255792,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Layer 9 Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[501.244,687.184,0],"ix":2},"a":{"a":0,"k":[13.646,27.375,0],"ix":1},"s":{"a":0,"k":[300,300,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.133,0.266],[0.133,0.51],[0,0],[2.017,1.064],[0,0],[0.466,0.444],[0.199,0.289],[0.954,1.22],[0,0],[0.709,0.687],[0,0],[0.776,0.731],[1.996,0.665],[0.465,0.378],[0.155,0.554],[0.134,0.444],[0,0],[-0.716,1.353],[0.599,-0.643],[-0.421,3.081],[0.288,-0.023],[0.51,0.354],[0.354,0.288],[-0.023,-0.111],[-0.156,-0.348],[-0.244,-0.355],[-0.155,-0.288],[-0.037,-0.029],[1.446,-1.022],[0,0],[-0.155,-1.286],[-0.111,-1.352],[0,0],[-0.509,-0.222],[-0.376,-1.397],[-0.022,-0.909],[0.244,-1.02],[-1.375,-0.399],[0,0],[-0.954,0.045],[0,0],[-1.13,-0.422],[0,0],[-0.687,-0.177],[0.124,0.138],[-0.885,-0.188],[-0.152,-0.043],[0.038,-0.03],[0.116,0.027],[0.13,0.053],[0.16,-0.089],[0.369,-0.125],[0.063,-0.021],[0.398,-0.085],[0.181,0.02],[0.162,-0.177],[-0.253,-0.343],[0,0],[0,0],[-0.143,0.035],[-0.179,-0.198],[0,0],[0,0],[-0.154,-0.047],[-0.089,0.081],[-0.136,-0.054],[-0.082,-0.03],[0.07,-0.211],[0,0],[-0.493,-0.539],[0,0],[0,0],[-0.136,0.084],[-0.556,-0.135],[0,0],[0,0],[-0.06,0.097],[-0.029,0.002],[-0.052,0.062],[0.003,0.081],[-0.175,0.014],[-0.002,-0.005],[0.253,-0.317],[-0.221,-0.22],[0,0],[0,0],[-0.358,0],[-0.012,0.001],[0,0],[0,0],[-0.037,0.127],[-0.024,0.018],[-0.032,0.019],[-0.023,0.229],[-0.004,0.054],[-0.229,0.045],[0,0],[-0.409,-0.099],[-0.523,0.154],[-0.114,0.412],[-0.297,0.117],[-0.008,0.098],[0.992,-2.479],[-1.086,-0.576],[0,0],[-0.975,-0.444],[0,0],[-1.152,0.177],[0,0],[-0.488,-0.821],[0.598,7.248],[-0.399,0.821],[0,0],[0.133,0.931],[0.62,0.466],[0.155,0.51],[0.049,0.033],[-1.347,-0.064]],"o":[[0,0],[0,0],[-0.133,-0.509],[0,0],[-2.017,-1.064],[0,0],[0,0],[0,0],[-0.953,-1.219],[0,0],[-0.71,-0.688],[0,0],[-0.775,-0.732],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.155,0.243],[0.421,-3.081],[0,0],[0,0],[-0.355,-0.288],[0.022,0.11],[0,0],[0,0],[0.054,0.1],[-0.46,-0.07],[-1.663,1.175],[0,0],[0,0],[0.11,1.353],[0,0],[0,0],[0,0],[0,0],[-0.244,1.019],[0.288,0.022],[0,0],[0.155,-0.044],[0,0],[0.244,0.177],[0,0],[0.557,0.144],[0.165,0.173],[0.156,0.033],[-0.019,0.042],[-0.067,0.053],[-0.172,-0.039],[-0.211,-0.086],[-0.127,-0.124],[-0.081,0.027],[-0.238,0.082],[-0.205,0.044],[-0.256,-0.028],[-0.286,0.312],[0,0],[0,0],[0.108,-0.238],[-0.037,0.175],[0,0],[0,0],[0.063,-0.115],[0.266,0.074],[0.056,0],[0.083,0.033],[-0.388,0.092],[0,0],[-0.004,0.007],[0,0],[0,0],[0,-0.004],[0.004,0.24],[0,0],[0,0],[-0.079,-0.187],[0.007,-0.012],[0.083,-0.007],[0.103,-0.122],[0.308,-0.261],[0.033,-0.002],[0.025,0.047],[-0.279,0.348],[0,0],[0,0],[0.058,0.18],[0.011,0],[0,0],[0,0],[-0.038,-0.069],[0.009,-0.031],[0.021,0.005],[0.089,-0.053],[0.006,-0.059],[0.032,-0.382],[0,0],[0.286,-0.059],[0.425,0.101],[0.368,-0.109],[0.281,0.159],[0.408,-0.16],[0.084,0.733],[-1.063,2.661],[1.086,0.577],[0,0],[0.976,0.444],[0,0],[1.153,-0.178],[0,0],[0.488,0.82],[0,0],[0.4,-0.821],[0,0],[-0.133,-0.931],[0,0],[-0.136,-0.444],[0.123,0.078],[1.374,0.067]],"v":[[9.477,-1.702],[9.965,-1.945],[10.874,-2.079],[9.854,-3.098],[8.413,-4.915],[5.73,-6.09],[5.309,-6.911],[5.132,-7.643],[4.799,-8.729],[3.004,-10.857],[2.982,-11.587],[1.763,-12.585],[2.028,-13.206],[-2.095,-15.999],[-2.56,-17.419],[-2.272,-17.706],[-1.984,-18.083],[-2.117,-18.527],[-0.44,-19.59],[-0.72,-17.551],[1.979,-20.389],[0.455,-24.046],[0.033,-24.689],[-0.232,-25.62],[-0.232,-25.243],[-0.875,-25.702],[-2.583,-26.396],[-3.425,-26.329],[-3.289,-26.148],[-7.06,-25.398],[-7.615,-24.4],[-9.587,-22.294],[-10.74,-20.234],[-10.747,-20.145],[-11.384,-17.639],[-11.273,-15.178],[-12.07,-13.294],[-13.09,-12.962],[-12.07,-6.357],[-11.76,-6.844],[-9.809,-3.143],[-9.698,-3.874],[-7.704,-1.678],[-7.637,-2.055],[-6.263,-0.725],[-6.103,-1.072],[-4.445,-0.126],[-3.983,-0.01],[-4.064,0.102],[-4.341,0.141],[-4.79,-0.012],[-5.345,-0.083],[-6.24,-0.434],[-6.454,-0.361],[-7.234,-0.143],[-7.824,-0.141],[-8.484,-0.016],[-8.71,1.132],[-8.643,1.223],[-8.596,1.12],[-8.141,0.531],[-8.063,1.314],[-8,1.385],[-7.955,1.303],[-7.522,0.913],[-6.913,0.773],[-6.537,0.9],[-6.287,0.997],[-7.079,1.383],[-7.162,1.635],[-7.02,2.822],[-6.913,2.939],[-6.905,2.781],[-6.75,2.423],[-6.122,3.417],[-5.994,3.449],[-6.045,3.327],[-6.148,2.736],[-6.101,2.71],[-5.898,2.607],[-5.794,2.208],[-4.815,1.557],[-4.765,1.566],[-5.072,2.137],[-5.422,3.135],[-5.408,3.148],[-5.317,3.167],[-4.719,3.62],[-4.684,3.618],[-4.578,3.613],[-4.629,3.52],[-4.721,3.117],[-4.673,3.046],[-4.589,3.025],[-4.422,2.605],[-4.407,2.436],[-4.121,1.822],[-4.032,1.805],[-3.13,1.799],[-0.834,1.943],[-0.157,1.042],[0.654,1.202],[1.151,0.777],[0.831,9.492],[-1.463,19.456],[1.48,14.988],[0.465,26.307],[4.09,12.773],[3.69,22.35],[6.617,12.729],[6.816,15.611],[7.836,7.742],[8.922,8.473],[8.346,4.107],[8.9,3.818],[6.728,-0.615],[7.925,-0.327],[7.538,-0.962],[12.071,1.113]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0.166,0.814],[0,0],[0,0]],"o":[[-0.166,-0.815],[0.931,3.408],[0.897,-0.632]],"v":[[1.58,-21.99],[1.58,-22.755],[0.55,-18.15]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0.332,0.022],[0,0],[0.421,-0.31],[-0.03,0.199],[0.436,0.021],[0,0],[0,0],[0,0],[0.399,-0.2],[-0.51,1.153],[-1.64,0.133],[0,0],[0,0],[0,0],[0.422,-0.488],[0,0],[0.422,-0.31],[0,0],[0,0],[0.377,-0.178],[0,0]],"o":[[-0.333,-0.023],[0,0],[-0.395,0.291],[-0.032,0.198],[-0.465,-0.022],[0,0],[-0.421,0.665],[0,0],[-0.399,0.199],[0.51,-1.153],[1.64,-0.133],[0,0],[0.577,0.023],[-1.063,0.444],[-0.421,0.488],[0,0],[-0.421,0.31],[-0.288,-0.044],[0,0],[-0.377,0.177],[0,0]],"v":[[-4.599,-19.146],[-4.799,-20.122],[-5.286,-19.191],[-5.422,-20.678],[-6.151,-18.926],[-5.774,-21.008],[-6.195,-20.344],[-6.528,-21.497],[-6.927,-21.296],[-6.284,-24.09],[-3.38,-25.796],[-1.163,-25.087],[-0.808,-25.109],[0.167,-24.09],[-2.072,-22.426],[-2.183,-21.562],[-3.114,-21.363],[-3.047,-19.324],[-3.436,-19.611],[-3.712,-18.635],[-4.355,-19.878]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0.149,0.06],[0.067,-0.067],[0.222,0.061],[0.1,-0.153],[-0.035,0.128],[0,0],[0,0],[0.118,-0.228],[-0.222,0.241],[-0.241,-0.025],[-0.225,0.048],[-0.243,0.084],[-0.082,0.027],[-0.005,-0.004],[0,0],[0,0],[-0.237,-0.097],[-0.183,-0.041],[-0.099,0.08],[-0.026,0.064],[-0.831,-0.058],[0.178,-0.039],[0.425,0.179],[0.311,-0.136],[0.142,-0.05],[0.107,-0.027]],"o":[[-0.312,-0.126],[-0.051,0.05],[-0.218,-0.058],[-0.074,-0.192],[0,0],[0,0],[-0.253,-0.107],[-0.109,-0.275],[0.117,-0.127],[0.19,0.021],[0.406,-0.087],[0.062,-0.022],[0.351,-0.117],[0,0],[0,0],[0.106,-0.087],[0.134,0.055],[0.159,0.036],[0.062,-0.05],[0.78,0.23],[-0.088,0.067],[-0.69,0.15],[-0.334,-0.141],[-0.11,0.049],[-0.1,0.034],[-0.126,-0.031]],"v":[[-6.487,0.775],[-6.996,0.669],[-7.486,0.783],[-8.013,1.141],[-7.993,0.49],[-7.979,0.432],[-8.032,0.411],[-8.66,0.949],[-8.385,0.074],[-7.837,-0.01],[-7.206,-0.014],[-6.41,-0.234],[-6.197,-0.307],[-5.402,0.048],[-5.36,0.094],[-5.311,0.055],[-4.84,0.111],[-4.37,0.27],[-3.98,0.206],[-3.856,0.027],[-1.5,0.617],[-1.887,0.783],[-4.463,0.587],[-5.353,0.691],[-5.73,0.846],[-6.046,0.93]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[0.321,-0.095],[0.45,0.106],[0.291,-0.059],[0,0],[0.029,-0.357],[0.005,-0.058],[0.021,-0.017],[-0.003,-0.001],[0,0],[0,0],[0.021,-0.073],[-0.043,-0.106],[0.004,0.015],[0,0],[0,0],[-0.409,0.511],[0.088,0.165],[0.107,-0.011],[0.081,-0.07],[0,0],[0,0],[0.076,-0.093],[0.047,-0.003],[0.033,-0.054],[-0.058,-0.169],[-0.001,0.007],[0,0],[0,0],[0.036,-0.142],[-0.016,0.031],[0,0],[-0.328,0.078],[-0.064,0.016],[-0.018,-0.003],[-0.036,0.016],[-0.066,0.023],[-0.112,0.051],[-0.28,-0.118],[-0.709,0.156],[-0.101,0.113],[-0.268,-0.151]],"o":[[-0.475,0.14],[-0.437,-0.104],[0,0],[-0.337,0.067],[-0.005,0.054],[-0.023,0.233],[-0.009,0.007],[0,0],[0,0],[-0.065,0.035],[-0.039,0.132],[-0.318,-0.046],[0,0],[0,0],[-0.062,-0.084],[0.157,-0.197],[-0.022,-0.04],[-0.279,0.023],[0,0],[0,0],[0.006,0.062],[-0.029,0.033],[-0.065,0.006],[-0.084,0.137],[-0.443,-0.218],[0,0],[0,0],[-0.203,0.017],[-0.29,-0.437],[0,0],[0.048,-0.145],[0.064,-0.015],[0.018,0.003],[0.033,-0.019],[0.068,-0.019],[0.146,-0.051],[0.303,-0.134],[0.439,0.186],[0.27,-0.058],[0.46,0.032],[-0.103,0.385]],"v":[[-0.872,1.816],[-3.099,1.671],[-4.058,1.673],[-4.147,1.691],[-4.539,2.424],[-4.554,2.592],[-4.651,2.906],[-4.662,2.915],[-4.691,2.904],[-4.719,2.919],[-4.848,3.081],[-4.794,3.482],[-5.199,3.094],[-5.209,3.053],[-5.339,3.027],[-4.968,2.221],[-4.647,1.503],[-4.826,1.426],[-5.905,2.13],[-5.932,2.152],[-5.928,2.186],[-5.999,2.523],[-6.111,2.579],[-6.261,2.669],[-6.218,3.243],[-6.615,2.339],[-6.609,2.262],[-6.686,2.268],[-7.011,2.618],[-7.039,1.691],[-6.951,1.426],[-6.236,1.122],[-6.045,1.07],[-5.991,1.081],[-5.888,1.027],[-5.684,0.971],[-5.297,0.814],[-4.513,0.712],[-1.857,0.915],[-1.324,0.637],[-0.275,0.977]],"c":true},"ix":2},"nm":"Path 5","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 2","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.815686334348,0.266666666667,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[13.695,27],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":8,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.039,-0.003],[-0.22,-0.209],[-0.001,-0.153],[-0.036,0],[0.001,0.037],[0.125,0.118],[0.018,0],[-0.001,-0.037]],"o":[[0.006,0.001],[0.096,0.092],[0,0.036],[0.037,0],[0,-0.19],[-0.26,-0.248],[-0.037,0.002],[0.002,0.037]],"v":[[-0.413,-0.238],[0.206,-0.045],[0.351,0.324],[0.417,0.39],[0.483,0.323],[0.296,-0.142],[-0.419,-0.372],[-0.483,-0.302]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.815686334348,0.266666666667,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[10.136,2.026],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.078,0.293],[-0.08,0.13],[0.032,0.019],[0.02,-0.031],[-0.044,-0.164],[-0.016,-0.009],[-0.011,0],[-0.012,0.023],[0.032,0.018]],"o":[[-0.034,-0.128],[0.019,-0.031],[-0.031,-0.018],[-0.099,0.163],[0.093,0.348],[0.011,0.005],[0.023,0],[0.018,-0.032],[-0.004,-0.001]],"v":[[-0.149,-0.057],[-0.081,-0.446],[-0.104,-0.538],[-0.195,-0.516],[-0.277,-0.022],[0.213,0.548],[0.245,0.556],[0.303,0.521],[0.277,0.431]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.815686334348,0.266666666667,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[9.071,2.979],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":3,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.018,0.032],[0.031,-0.019],[0.292,0.081],[0.072,0.134],[0.031,-0.017],[-0.018,-0.032],[-0.165,-0.046],[-0.062,0],[-0.013,0.008]],"o":[[-0.019,-0.032],[-0.003,0.002],[-0.128,-0.035],[-0.017,-0.033],[-0.033,0.018],[0.09,0.168],[0.061,0.017],[0.284,0],[0.031,-0.019]],"v":[[0.573,-0.024],[0.482,-0.047],[-0.155,0.074],[-0.456,-0.181],[-0.546,-0.209],[-0.573,-0.119],[-0.189,0.203],[-0.004,0.226],[0.55,0.067]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.815686334348,0.266666666667,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[9.705,3.172],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":3,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.117,0],[-0.004,0.114],[0.033,0],[0,0.076],[-0.041,0.024],[0.021,0],[0,-0.118]],"o":[[0.115,0],[-0.024,0.021],[-0.076,0],[0,-0.05],[-0.019,-0.005],[-0.118,0],[0,0.117]],"v":[[0.001,0.214],[0.212,0.01],[0.125,0.047],[-0.013,-0.092],[0.06,-0.202],[0.001,-0.214],[-0.212,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.815686334348,0.266666666667,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[9.787,2.543],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":3,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.308,0],[0,0.309],[0.308,0],[0,-0.308]],"o":[[0.308,0],[0,-0.308],[-0.308,0],[0,0.309]],"v":[[0,0.56],[0.56,0],[0,-0.56],[-0.56,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-0.235,0],[0,-0.236],[0.236,0],[0,0.235]],"o":[[0.235,0],[0,0.235],[-0.236,0],[0,-0.235]],"v":[[0,-0.426],[0.427,0.001],[0,0.427],[-0.427,0.001]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 2","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.815686334348,0.266666666667,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[9.788,2.528],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":5,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":900.000036657751,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"Layer 3 Outlines","sr":1,"ks":{"o":{"a":0,"k":50,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[500.152,684.165,0],"ix":2},"a":{"a":0,"k":[127.707,127.707,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-68.242],[68.242,0],[0,68.242],[-68.243,0]],"o":[[0,68.242],[-68.243,0],[0,-68.242],[68.242,0]],"v":[[123.564,0],[0,123.563],[-123.564,0],[0,-123.563]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[128.513,128.512],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[68.084,0],[0,0],[0,70.837]],"o":[[0,68.084],[0,0],[70.837,0],[0,0]],"v":[[123.277,0],[0,123.277],[0,128.263],[128.262,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,68.084],[0,0],[-70.838,0]],"o":[[-68.084,0],[0,0],[0,70.837],[0,0]],"v":[[0,123.277],[-123.277,0],[-128.263,0],[0,128.263]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[-68.084,0],[0,0],[0,-70.837]],"o":[[0,-68.084],[0,0],[-70.838,0],[0,0]],"v":[[-123.277,0],[0,-123.277],[0,-128.263],[-128.263,0]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0,0],[0,-68.084],[0,0],[70.837,0]],"o":[[68.084,0],[0,0],[0,-70.837],[0,0]],"v":[[0,-123.277],[123.277,0],[128.262,0],[0,-128.263]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 2","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[128.513,128.513],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":7,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":900.000036657751,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"Layer 1 Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[500.572,539.294,0],"ix":2},"a":{"a":0,"k":[461.868,461.868,0],"ix":1},"s":{"a":0,"k":[105,105,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[186.899,0],[0,0],[0,189.652]],"o":[[0,186.899],[0,0],[189.652,0],[0,0]],"v":[[338.41,0.001],[0,338.411],[0,343.396],[343.395,0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,186.899],[0,0],[-189.652,0]],"o":[[-186.899,0],[0,0],[0,189.652],[0,0]],"v":[[0,338.411],[-338.41,0.001],[-343.395,0.001],[0,343.396]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[-186.899,0],[0,0],[0,-189.652]],"o":[[0,-186.899],[0,0],[-189.652,0],[0,0]],"v":[[-338.41,0.001],[0,-338.409],[0,-343.394],[-343.395,0.001]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0,0],[0,-186.899],[0,0],[189.652,0]],"o":[[186.899,0],[0,0],[0,-189.652],[0,0]],"v":[[0,-338.409],[338.41,0.001],[343.395,0.001],[0,-343.394]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[462.795,581.947],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":7,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[252.703,0],[0,0],[0,255.457]],"o":[[0,252.704],[0,0],[255.457,0],[0,0]],"v":[[457.561,0],[0.001,457.56],[0.001,462.546],[462.546,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,252.704],[0,0],[-255.458,0]],"o":[[-252.704,0],[0,0],[0,255.457],[0,0]],"v":[[0.001,457.56],[-457.56,0],[-462.545,0],[0.001,462.546]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[-252.704,0],[0,0],[0,-255.457]],"o":[[0,-252.704],[0,0],[-255.458,0],[0,0]],"v":[[-457.56,0],[0.001,-457.56],[0.001,-462.546],[-462.545,0]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0,0],[0,-252.704],[0,0],[255.457,0]],"o":[[252.703,0],[0,0],[0,-255.457],[0,0]],"v":[[0.001,-457.56],[457.561,0],[462.546,0],[0.001,-462.546]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[462.795,462.796],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":7,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":900.000036657751,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/samples/playground-app-shared/src/commonMain/composeResources/files/search_lottie_anim.json b/samples/playground-app-shared/src/commonMain/composeResources/files/search_lottie_anim.json new file mode 100644 index 00000000..f46b4517 --- /dev/null +++ b/samples/playground-app-shared/src/commonMain/composeResources/files/search_lottie_anim.json @@ -0,0 +1 @@ +{"v":"4.8.0","meta":{"g":"LottieFiles AE 3.5.4","a":"","k":"","d":"","tc":""},"fr":29.9700012207031,"ip":0,"op":150.000006109625,"w":1000,"h":1000,"nm":"Search","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Layer 4 Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[903.112,323.168,0],"ix":2},"a":{"a":0,"k":[47.322,47.322,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":7,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":23,"s":[100,100,100]},{"t":30.0000012219251,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,19.4],[17.042,6.662],[0,0]],"o":[[0,-19.4],[0,0],[17.042,-6.662]],"v":[[14.566,0],[-14.566,-42.605],[-14.566,42.605]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.89019613827,0.023529413635,0.074509803922,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[78.528,47.319],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[5.879,0],[5.167,-2.018],[0,0],[-5.878,0],[-5.162,2.021]],"o":[[-5.162,-2.018],[-5.878,0],[0,0],[5.163,2.017],[5.879,0],[0,0]],"v":[[16.643,-42.607],[0,-45.772],[-16.643,-42.607],[-16.643,42.604],[0,45.772],[16.643,42.604]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[47.323,47.322],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":4,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-19.4],[-17.042,-6.662],[0,0]],"o":[[0,19.4],[0,0],[-17.042,6.662]],"v":[[-14.565,0],[14.565,42.605],[14.565,-42.605]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.529411764706,0.149019607843,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[16.118,47.319],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":4,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":210.000008553475,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Layer 5 Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[769.307,116.243,0],"ix":2},"a":{"a":0,"k":[47.322,47.322,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":23,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":30,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":46,"s":[100,100,100]},{"t":53.0000021587343,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-0.218,0.286],[0.218,0.286],[0,-0.286]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[42.03,43.628],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-0.732,-0.886],[-2.667,-0.886],[-1.188,0.368],[-1.647,2.249],[0,1.228],[1.647,2.249],[1.187,0.368],[2.667,-0.886],[0.732,-0.886],[0.218,-2.249],[-0.218,-2.249]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[42.027,46.16],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":4,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-0.216,0.286],[0.216,0.286],[0.002,-0.286]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[30.432,43.628],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":4,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-0.732,-0.886],[-2.667,-0.886],[-1.187,0.368],[-1.647,2.249],[0,1.228],[1.647,2.249],[1.183,0.368],[2.667,-0.886],[0.732,-0.886],[0.214,-2.249],[-0.218,-2.249]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[30.435,46.16],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":4,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-0.216,0.286],[0.216,0.286],[-0.002,-0.286]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[18.84,43.628],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":4,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-0.734,-0.886],[-2.665,-0.886],[-1.186,0.368],[-1.649,2.249],[-0.002,1.228],[1.649,2.249],[1.185,0.368],[2.665,-0.886],[0.734,-0.886],[0.216,-2.249],[-0.216,-2.249]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[18.841,46.16],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":4,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-0.216,0.286],[0.216,0.286],[-0.002,-0.286]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[7.244,43.628],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":4,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-0.732,-0.886],[-2.667,-0.886],[-1.184,0.368],[-1.647,2.249],[0,1.228],[1.647,2.249],[1.187,0.368],[2.667,-0.886],[0.732,-0.886],[0.218,-2.249],[-0.214,-2.249]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[7.243,46.16],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":4,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.004,0.023],[0,0]],"v":[[1.186,1.581],[2.664,0.331],[0.734,0.331],[0.002,-1.604],[-0.729,0.331],[-2.664,0.331],[-1.185,1.581],[1.194,1.604]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[42.033,35.376],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9","np":4,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0,-0.092],[1.647,0.928],[1.191,-0.928],[-1.191,-0.928],[-1.647,0.928]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[42.03,37.913],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 10","np":4,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.004,0.023],[0,0]],"v":[[1.188,1.581],[2.666,0.331],[0.731,0.331],[0.001,-1.604],[-0.731,0.331],[-2.666,0.331],[-1.187,1.581],[1.191,1.604]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[30.431,35.376],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 11","np":4,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0,-0.092],[1.647,0.928],[1.191,-0.928],[-1.191,-0.928],[-1.647,0.928]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[30.434,37.913],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 12","np":4,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.004,0.023],[0,0]],"v":[[1.186,1.581],[2.664,0.331],[0.734,0.331],[0.002,-1.604],[-0.73,0.331],[-2.664,0.331],[-1.185,1.581],[1.194,1.604]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[18.841,35.376],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 13","np":4,"cix":2,"bm":0,"ix":13,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-0.002,-0.092],[1.649,0.928],[1.193,-0.928],[-1.193,-0.928],[-1.649,0.928]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[18.84,37.913],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 14","np":4,"cix":2,"bm":0,"ix":14,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.008,0.023],[0,0]],"v":[[1.186,1.581],[2.664,0.331],[0.729,0.331],[-0.001,-1.604],[-0.733,0.331],[-2.664,0.331],[-1.185,1.581],[1.194,1.604]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[7.245,35.376],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 15","np":4,"cix":2,"bm":0,"ix":15,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0,-0.092],[1.647,0.928],[1.191,-0.928],[-1.191,-0.928],[-1.647,0.928]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[7.242,37.913],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 16","np":4,"cix":2,"bm":0,"ix":16,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.082,0],[0,0],[0.082,0],[0,0]],"v":[[2.663,-0.571],[0.732,-0.571],[0,-2.506],[-0.732,-0.571],[-2.663,-0.571],[-1.183,0.684],[-1.631,2.506],[0.004,1.543],[1.557,2.506],[1.191,0.684]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[36.237,41.406],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 17","np":4,"cix":2,"bm":0,"ix":17,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.082,0],[0,0],[0.082,0],[0,0]],"v":[[2.663,-0.571],[0.732,-0.571],[0,-2.506],[-0.732,-0.571],[-2.663,-0.571],[-1.183,0.684],[-1.631,2.506],[0,1.543],[1.553,2.506],[1.187,0.684]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[24.637,41.406],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 18","np":4,"cix":2,"bm":0,"ix":18,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.082,0],[0,0],[0.081,0],[0,0]],"v":[[2.667,-0.571],[0.732,-0.571],[0,-2.506],[-0.732,-0.571],[-2.667,-0.571],[-1.187,0.684],[-1.635,2.506],[-0.004,1.543],[1.55,2.506],[1.184,0.684]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[13.041,41.406],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 19","np":4,"cix":2,"bm":0,"ix":19,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0.074,-0.923],[0,0],[0,0]],"o":[[0,0],[-0.129,0.907],[0,0],[0.081,0],[0,0]],"v":[[0.831,-1.538],[-0.508,-1.538],[-0.831,1.199],[-0.282,1.538],[-0.648,-0.284]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[3.282,42.374],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 20","np":4,"cix":2,"bm":0,"ix":20,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-1.647,2.536],[0,1.517],[1.647,2.536],[1.187,0.653],[2.667,-0.597],[0.732,-0.597],[0,-2.536],[-0.732,-0.597],[-2.667,-0.597],[-1.188,0.653]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[42.027,26.735],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 21","np":4,"cix":2,"bm":0,"ix":21,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.732,-0.598],[0,-2.536],[-0.732,-0.598],[-2.667,-0.598],[-1.187,0.652],[-1.647,2.536],[0,1.516],[1.647,2.536],[1.184,0.652],[2.667,-0.598]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[30.435,26.735],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 22","np":4,"cix":2,"bm":0,"ix":22,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.734,-0.598],[-0.002,-2.536],[-0.734,-0.598],[-2.665,-0.598],[-1.185,0.652],[-1.649,2.536],[-0.002,1.516],[1.649,2.536],[1.186,0.652],[2.665,-0.598]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[18.841,26.735],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 23","np":4,"cix":2,"bm":0,"ix":23,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0.494,-1.101],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[-0.576,1.055],[0,0],[0,0]],"v":[[0.837,1.812],[0.374,-0.071],[1.853,-1.321],[-0.082,-1.321],[-0.269,-1.812],[-1.853,1.435],[-0.818,0.793]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[8.053,27.459],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 24","np":4,"cix":2,"bm":0,"ix":24,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[0,-0.36],[-0.273,0.36],[0.273,0.36]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[36.234,29.687],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 25","np":4,"cix":2,"bm":0,"ix":25,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-2.667,-0.958],[-1.188,0.292],[-1.647,2.177],[0,1.156],[1.647,2.177],[1.187,0.292],[2.667,-0.958],[0.732,-0.961],[0.272,-2.177],[-0.273,-2.177],[-0.732,-0.961]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[36.233,32.226],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 26","np":4,"cix":2,"bm":0,"ix":26,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[0.002,-0.36],[-0.274,0.36],[0.274,0.36]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[24.636,29.687],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 27","np":4,"cix":2,"bm":0,"ix":27,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-2.665,-0.958],[-1.186,0.292],[-1.649,2.177],[0.002,1.156],[1.649,2.177],[1.185,0.292],[2.665,-0.958],[0.734,-0.961],[0.274,-2.177],[-0.275,-2.177],[-0.734,-0.961]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[24.635,32.226],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 28","np":4,"cix":2,"bm":0,"ix":28,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[0,-0.36],[-0.273,0.36],[0.273,0.36]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[13.042,29.687],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 29","np":4,"cix":2,"bm":0,"ix":29,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-2.665,-0.958],[-1.186,0.292],[-1.649,2.177],[-0.002,1.156],[1.649,2.177],[1.185,0.292],[2.665,-0.958],[0.734,-0.961],[0.27,-2.177],[-0.275,-2.177],[-0.734,-0.961]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[13.043,32.226],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 30","np":4,"cix":2,"bm":0,"ix":30,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[0,-0.781],[-0.592,0.781],[0.592,0.781]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[42.028,15.41],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 31","np":4,"cix":2,"bm":0,"ix":31,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-2.667,-1.378],[-1.188,-0.128],[-1.647,1.756],[0,0.736],[1.647,1.756],[1.187,-0.128],[2.667,-1.378],[0.732,-1.378],[0.592,-1.756],[-0.592,-1.756],[-0.732,-1.378]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[42.027,17.944],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 32","np":4,"cix":2,"bm":0,"ix":32,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[0,-0.781],[-0.592,0.781],[0.592,0.781]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[30.436,15.41],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 33","np":4,"cix":2,"bm":0,"ix":33,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-2.667,-1.378],[-1.188,-0.128],[-1.647,1.756],[0,0.736],[1.647,1.756],[1.183,-0.128],[2.667,-1.378],[0.732,-1.378],[0.592,-1.756],[-0.592,-1.756],[-0.732,-1.378]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[30.435,17.944],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 34","np":4,"cix":2,"bm":0,"ix":34,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-0.002,-0.781],[-0.59,0.781],[0.59,0.781]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[18.838,15.41],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 35","np":4,"cix":2,"bm":0,"ix":35,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-2.665,-1.378],[-1.186,-0.128],[-1.649,1.756],[-0.002,0.736],[1.649,1.756],[1.185,-0.128],[2.665,-1.378],[0.734,-1.378],[0.59,-1.756],[-0.59,-1.756],[-0.734,-1.378]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[18.841,17.944],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 36","np":4,"cix":2,"bm":0,"ix":36,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.043,0.171],[0,0]],"v":[[1.184,1.509],[2.663,0.255],[0.732,0.255],[0,-1.68],[-0.732,0.255],[-2.663,0.255],[-1.183,1.509],[1.231,1.68]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[36.236,21.437],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 37","np":4,"cix":2,"bm":0,"ix":37,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0,-0.17],[1.647,0.855],[1.226,-0.855],[-1.23,-0.855],[-1.647,0.855]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[36.232,23.977],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 38","np":4,"cix":2,"bm":0,"ix":38,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.043,0.171],[0,0]],"v":[[1.184,1.509],[2.662,0.255],[0.732,0.255],[0,-1.68],[-0.732,0.255],[-2.662,0.255],[-1.183,1.509],[1.231,1.68]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[24.637,21.437],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 39","np":4,"cix":2,"bm":0,"ix":39,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.002,-0.17],[1.649,0.855],[1.228,-0.855],[-1.228,-0.855],[-1.649,0.855]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[24.638,23.977],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 40","np":4,"cix":2,"bm":0,"ix":40,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.043,0.171],[0,0]],"v":[[1.188,1.509],[2.666,0.255],[0.731,0.255],[0.001,-1.68],[-0.731,0.255],[-2.666,0.255],[-1.187,1.509],[1.226,1.68]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[13.041,21.437],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 41","np":4,"cix":2,"bm":0,"ix":41,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-0.002,-0.17],[1.649,0.855],[1.228,-0.855],[-1.228,-0.855],[-1.649,0.855]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[13.042,23.977],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 42","np":4,"cix":2,"bm":0,"ix":42,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[2.667,-0.162],[0.732,-0.162],[0,-2.1],[-0.732,-0.162],[-2.667,-0.162],[-1.187,1.088],[-1.433,2.1],[-0.241,2.1],[0,1.952],[0.245,2.1],[1.437,2.1],[1.188,1.088]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[42.027,7.16],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 43","np":4,"cix":2,"bm":0,"ix":43,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[0.701,0.436],[0.491,-0.436],[-0.701,-0.436]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[42.973,9.697],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 44","np":4,"cix":2,"bm":0,"ix":44,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-0.702,0.436],[0.702,-0.436],[-0.488,-0.436]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[41.085,9.697],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 45","np":4,"cix":2,"bm":0,"ix":45,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.116,-0.047],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.117,0.047],[0,0],[0,0]],"v":[[-2.665,-0.364],[-1.186,0.886],[-1.435,1.898],[-0.243,1.898],[-0.002,1.746],[0.243,1.898],[1.434,1.898],[1.185,0.886],[2.665,-0.364],[0.73,-0.364],[0.15,-1.898],[-0.204,-1.769],[-0.734,-0.368]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[30.433,7.36],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 46","np":4,"cix":2,"bm":0,"ix":46,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[0.703,0.436],[0.488,-0.436],[-0.703,-0.436]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[31.38,9.697],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 47","np":4,"cix":2,"bm":0,"ix":47,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-0.701,0.436],[0.701,-0.436],[-0.491,-0.436]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[29.488,9.697],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 48","np":4,"cix":2,"bm":0,"ix":48,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-1.647,2.536],[0,1.517],[1.647,2.536],[1.187,0.653],[2.667,-0.597],[0.732,-0.601],[0,-2.536],[-0.732,-0.601],[-2.667,-0.597],[-1.188,0.653]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[36.233,12.725],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 49","np":4,"cix":2,"bm":0,"ix":49,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-1.649,2.536],[0.002,1.517],[1.649,2.536],[1.185,0.653],[2.665,-0.597],[0.734,-0.601],[0.002,-2.536],[-0.734,-0.601],[-2.665,-0.597],[-1.186,0.653]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[24.635,12.725],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 50","np":4,"cix":2,"bm":0,"ix":50,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[2.223,-1.413],[0,0]],"o":[[0,0],[0,0],[0,0],[-2.468,1.012],[0,0],[0,0]],"v":[[2.533,0.817],[1.054,-0.433],[2.989,-0.433],[3.518,-1.833],[-3.518,1.833],[2.287,1.833]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.16862745098,0.564705882353,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[26.716,7.429],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 51","np":4,"cix":2,"bm":0,"ix":51,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-0.243,0.074],[0.243,0.074],[-0.003,-0.074]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.16862745098,0.564705882353,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[42.029,9.186],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 52","np":4,"cix":2,"bm":0,"ix":52,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[4.528,-1.81],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-5.111,0.245],[0,0],[0,0]],"v":[[-5.853,1.203],[-7.332,2.453],[-7.084,3.465],[1.645,3.465],[1.895,2.453],[0.414,1.203],[2.349,1.203],[3.082,-0.732],[3.814,1.203],[5.744,1.203],[4.264,2.453],[4.514,3.465],[8.361,3.465],[8.361,-3.465],[6.164,-3.465],[-8.361,-0.335],[-7.78,1.199]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.16862745098,0.564705882353,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[38.954,5.795],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 53","np":4,"cix":2,"bm":0,"ix":53,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-0.243,0.074],[0.243,0.074],[0.001,-0.074]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.16862745098,0.564705882353,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[30.433,9.186],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 54","np":4,"cix":2,"bm":0,"ix":54,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-7.126,-0.6],[-6.394,-2.535],[-5.662,-0.6],[-3.732,-0.6],[-5.211,0.65],[-4.751,2.53],[-6.398,1.511],[-8.045,2.53],[-7.583,0.65],[-9.062,-0.6]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[4.471,-0.6],[5.203,-2.535],[5.935,-0.6],[7.867,-0.6],[6.386,0.65],[6.851,2.53],[5.203,1.511],[3.557,2.53],[4.02,0.65],[2.541,-0.6]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[2.519,-2.635],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-3.088,1.97]],"v":[[-16.279,3.465],[-12.784,3.465],[-12.191,1.904],[-11.599,3.465],[-1.185,3.465],[-0.594,1.904],[-0.001,3.465],[10.409,3.465],[11,1.904],[11.591,3.465],[16.279,3.465],[16.279,-3.465],[12.432,-3.465],[12.646,-2.596],[11.242,-3.465],[10.755,-3.465],[9.349,-2.596],[9.563,-3.465],[0.836,-3.465],[1.049,-2.596],[-0.357,-3.465],[-0.842,-3.465],[-2.248,-2.596],[-2.034,-3.465],[-7.839,-3.465]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.16862745098,0.564705882353,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[31.03,12.726],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 55","np":7,"cix":2,"bm":0,"ix":55,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[1.585,-2.488],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.028,2.122],[0,0],[0.043,-0.171],[0,0],[0,0],[0,0],[0,0],[0,0],[0.042,0.171],[0.043,-0.171],[0,0],[0,0],[0,0],[0,0],[0,0],[0.042,0.171],[0.043,-0.171],[0,0],[0,0],[0,0],[0,0],[0,0],[0.042,0.171],[0,0],[0,0],[0,0]],"v":[[14.438,-3.091],[16.368,-3.091],[14.889,-1.841],[15.353,0.043],[13.705,-0.977],[12.059,0.043],[12.522,-1.841],[11.043,-3.091],[12.978,-3.091],[13.118,-3.465],[2.707,-3.465],[2.848,-3.091],[4.783,-3.091],[3.303,-1.841],[3.767,0.043],[2.119,-0.977],[0.473,0.043],[0.933,-1.841],[-0.548,-3.091],[1.387,-3.091],[1.527,-3.465],[-8.887,-3.465],[-8.746,-3.091],[-6.816,-3.091],[-8.295,-1.841],[-7.832,0.043],[-9.478,-0.977],[-11.126,0.043],[-10.662,-1.841],[-12.142,-3.091],[-10.207,-3.091],[-10.066,-3.465],[-13.562,-3.465],[-18.989,3.465],[-16.498,3.465],[-17.934,2.04],[-15.999,2.04],[-15.267,0.105],[-14.535,2.04],[-12.6,2.04],[-14.079,3.294],[-4.9,3.465],[-6.337,2.04],[-4.405,2.04],[-3.673,0.105],[-2.941,2.04],[-1.011,2.04],[-2.489,3.294],[6.691,3.465],[5.254,2.04],[7.184,2.04],[7.916,0.105],[8.649,2.04],[10.579,2.04],[9.1,3.294],[18.989,3.465],[18.989,-3.465],[14.301,-3.465]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.16862745098,0.564705882353,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[28.322,19.656],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 56","np":4,"cix":2,"bm":0,"ix":56,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[14.786,-0.452],[15.518,-2.387],[16.25,-0.452],[18.181,-0.452],[16.701,0.798],[17.165,2.682],[15.518,1.662],[13.871,2.682],[14.334,0.798],[12.855,-0.452]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[5.571,2.682],[3.924,1.662],[2.277,2.682],[2.737,0.798],[1.257,-0.452],[3.192,-0.452],[3.924,-2.387],[4.656,-0.452],[6.591,-0.452],[5.112,0.798]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-6.023,2.682],[-7.67,1.662],[-9.317,2.682],[-8.853,0.798],[-10.333,-0.452],[-8.398,-0.452],[-7.666,-2.387],[-6.934,-0.452],[-5.003,-0.452],[-6.482,0.798]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.475,-0.864],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.163,-0.394],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.529,0.829],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.175,0.39],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[11.368,-1.756],[9.721,-2.776],[8.074,-1.756],[8.495,-3.465],[-0.643,-3.465],[-0.222,-1.756],[-1.869,-2.776],[-3.516,-1.756],[-3.095,-3.465],[-12.233,-3.465],[-11.812,-1.756],[-13.459,-2.776],[-15.106,-1.756],[-14.685,-3.465],[-17.177,-3.465],[-18.711,-0.943],[-18.524,-0.452],[-16.589,-0.452],[-18.069,0.798],[-17.605,2.682],[-19.252,1.662],[-20.288,2.304],[-20.809,3.465],[-13.728,3.465],[-13.455,2.744],[-13.183,3.465],[-2.134,3.465],[-1.861,2.744],[-1.589,3.465],[9.46,3.465],[9.733,2.744],[10.005,3.465],[20.809,3.465],[20.809,-3.465],[10.959,-3.465]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.16862745098,0.564705882353,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[26.511,26.588],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 57","np":8,"cix":2,"bm":0,"ix":57,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.561,-2.386],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.919,2.223],[0,0],[0.008,-0.023],[0,0],[0,0],[0,0],[0,0],[0,0],[0.008,0.023],[0.004,-0.023],[0,0],[0,0],[0,0],[0,0],[0,0],[0.004,0.023],[0.004,-0.023],[0,0],[0,0],[0,0],[0,0],[0,0],[0.007,0.024],[0.004,-0.024],[0,0],[0,0],[0,0],[0,0],[0,0],[0.007,0.024],[0,0],[0,0],[0,0]],"v":[[11.565,-2.243],[13.496,-2.243],[12.017,-0.993],[12.48,0.887],[10.833,-0.132],[9.186,0.887],[9.65,-0.993],[8.17,-2.243],[10.101,-2.243],[10.561,-3.457],[-0.488,-3.457],[-0.029,-2.243],[1.902,-2.243],[0.423,-0.993],[0.882,0.887],[-0.765,-0.132],[-2.412,0.887],[-1.948,-0.993],[-3.428,-2.243],[-1.497,-2.243],[-1.037,-3.457],[-12.086,-3.457],[-11.627,-2.243],[-9.692,-2.243],[-11.171,-0.993],[-10.708,0.887],[-12.355,-0.132],[-14.002,0.887],[-13.542,-0.993],[-15.022,-2.243],[-13.087,-2.243],[-12.627,-3.457],[-19.709,-3.457],[-21.909,3.473],[-19.343,3.473],[-20.819,2.196],[-18.888,2.196],[-18.156,0.261],[-17.424,2.196],[-15.489,2.196],[-16.968,3.446],[-7.749,3.469],[-9.225,2.191],[-7.29,2.191],[-6.558,0.257],[-5.826,2.191],[-3.895,2.191],[-5.374,3.441],[3.845,3.465],[2.369,2.188],[4.304,2.188],[5.036,0.254],[5.768,2.188],[7.703,2.188],[6.224,3.438],[15.443,3.462],[13.967,2.184],[15.902,2.184],[16.634,0.249],[17.366,2.184],[19.297,2.184],[17.818,3.434],[21.909,3.457],[21.909,-3.473],[11.106,-3.473]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.16862745098,0.564705882353,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[25.397,33.507],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 58","np":4,"cix":2,"bm":0,"ix":58,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-1.551,0.481],[1.551,0.481],[-0.003,-0.481]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.16862745098,0.564705882353,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[13.043,43.43],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 59","np":4,"cix":2,"bm":0,"ix":59,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.008,-0.113],[0,0],[0,0]],"o":[[0,0],[0,0],[-0.008,0.109]],"v":[[-0.282,0.169],[0.282,0.169],[-0.266,-0.169]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.16862745098,0.564705882353,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[2.714,43.743],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 60","np":4,"cix":2,"bm":0,"ix":60,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.187,-1.304],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.295,1.265],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[18.697,-1.608],[17.05,-2.628],[15.403,-1.608],[15.859,-3.465],[6.648,-3.465],[7.103,-1.608],[5.456,-2.628],[3.809,-1.608],[4.265,-3.465],[-4.946,-3.465],[-4.491,-1.608],[-6.138,-2.628],[-7.784,-1.608],[-7.329,-3.465],[-16.54,-3.465],[-16.085,-1.608],[-17.732,-2.628],[-19.378,-1.608],[-18.923,-3.465],[-21.489,-3.465],[-22.201,0.389],[-20.862,0.389],[-22.341,1.643],[-21.893,3.465],[-17.946,3.465],[-17.728,2.893],[-17.51,3.465],[-13.562,3.465],[-13.114,1.643],[-14.594,0.389],[-12.659,0.389],[-11.927,-1.546],[-11.195,0.389],[-9.26,0.389],[-10.739,1.643],[-10.292,3.465],[-6.344,3.465],[-6.126,2.893],[-5.908,3.465],[-1.96,3.465],[-1.512,1.643],[-2.992,0.389],[-1.061,0.389],[-0.329,-1.546],[0.403,0.389],[2.334,0.389],[0.854,1.643],[1.302,3.465],[5.25,3.465],[5.468,2.893],[5.686,3.465],[9.634,3.465],[10.081,1.643],[8.602,0.389],[10.533,0.389],[11.265,-1.546],[11.997,0.389],[13.928,0.389],[12.448,1.643],[12.896,3.465],[16.844,3.465],[17.062,2.893],[17.28,3.465],[22.341,3.465],[22.341,-3.465],[18.253,-3.465]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.16862745098,0.564705882353,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[24.978,40.45],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 61","np":4,"cix":2,"bm":0,"ix":61,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-1.551,0.481],[1.551,0.481],[0.001,-0.481]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.16862745098,0.564705882353,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[24.636,43.43],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 62","np":4,"cix":2,"bm":0,"ix":62,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-1.553,0.481],[1.553,0.481],[-0.001,-0.481]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.16862745098,0.564705882353,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[36.234,43.43],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 63","np":4,"cix":2,"bm":0,"ix":63,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,-1.133],[-0.089,-1.18],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.081,1.11],[0,1.207],[0,0],[0,0],[0,0]],"v":[[22.491,-3.465],[17.43,-3.465],[17.948,-2.102],[19.879,-2.102],[18.399,-0.849],[18.863,1.032],[17.216,0.012],[15.569,1.032],[16.032,-0.849],[14.553,-2.102],[16.488,-2.102],[17.006,-3.465],[13.058,-3.465],[9.873,-3.465],[5.844,-3.465],[6.362,-2.102],[8.297,-2.102],[6.817,-0.849],[7.28,1.032],[5.634,0.012],[3.987,1.032],[4.446,-0.849],[2.967,-2.102],[4.902,-2.102],[5.419,-3.465],[1.472,-3.465],[-1.713,-3.465],[-5.742,-3.465],[-5.225,-2.102],[-3.293,-2.102],[-4.773,-0.849],[-4.31,1.032],[-5.956,0.012],[-7.603,1.032],[-7.14,-0.849],[-8.619,-2.102],[-6.684,-2.102],[-6.171,-3.465],[-10.118,-3.465],[-13.303,-3.465],[-17.332,-3.465],[-16.815,-2.102],[-14.88,-2.102],[-16.359,-0.849],[-15.896,1.032],[-17.543,0.012],[-19.189,1.032],[-18.726,-0.849],[-20.206,-2.102],[-18.275,-2.102],[-17.757,-3.465],[-21.704,-3.465],[-22.351,-3.465],[-22.522,-0.109],[-22.343,3.465],[22.522,3.465],[22.522,-3.465]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.16862745098,0.564705882353,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[24.817,47.377],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 64","np":4,"cix":2,"bm":0,"ix":64,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[8.044,0.389],[0,0]],"o":[[0,0],[-6.393,-4.065],[0,0],[0,0]],"v":[[-12.055,3.465],[12.055,3.465],[-9.861,-3.465],[-12.055,-3.465]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.89019613827,0.023529413635,0.074509803922,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[59.362,5.795],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 65","np":4,"cix":2,"bm":0,"ix":65,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[3.095,1.966],[0,0]],"o":[[0,0],[-2.519,-2.64],[0,0],[0,0]],"v":[[-16.279,3.465],[16.279,3.465],[7.831,-3.465],[-16.279,-3.465]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[63.586,12.726],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 66","np":4,"cix":2,"bm":0,"ix":66,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[2.028,2.122],[0,0]],"o":[[0,0],[-1.585,-2.488],[0,0],[0,0]],"v":[[-18.993,3.465],[18.993,3.465],[13.566,-3.465],[-18.993,-3.465]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.89019613827,0.023529413635,0.074509803922,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[66.299,19.656],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 67","np":4,"cix":2,"bm":0,"ix":67,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[1.398,2.196],[0,0]],"o":[[0,0],[-1.005,-2.429],[0,0],[0,0]],"v":[[-20.811,3.465],[20.811,3.465],[17.175,-3.465],[-20.811,-3.465]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[68.117,26.584],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 68","np":4,"cix":2,"bm":0,"ix":68,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0.919,2.223],[0,0],[0,0]],"o":[[0,0],[-0.556,-2.386],[0,0],[0,0],[0,0]],"v":[[-21.91,3.465],[21.91,3.465],[19.715,-3.465],[-21.907,-3.465],[-21.907,3.465]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.89019613827,0.023529413635,0.074509803922,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[69.217,33.518],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 69","np":4,"cix":2,"bm":0,"ix":69,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0.526,2.25],[0,0]],"o":[[0,0],[-0.175,-2.367],[0,0],[0,0]],"v":[[-22.438,3.465],[22.438,3.465],[21.383,-3.465],[-22.438,-3.465]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[69.744,40.449],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 70","np":4,"cix":2,"bm":0,"ix":70,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,1.207],[0.082,1.114],[0,0]],"o":[[0,0],[0.094,-1.184],[0,-1.133],[0,0],[0,0]],"v":[[-22.522,3.465],[22.343,3.465],[22.522,-0.109],[22.354,-3.465],[-22.522,-3.465]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.89019613827,0.023529413635,0.074509803922,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[69.828,47.377],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 71","np":4,"cix":2,"bm":0,"ix":71,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.537,-2.25],[0,0],[-0.187,2.367],[0,0]],"o":[[0.187,2.367],[0,0],[0.537,-2.25],[0,0],[0,0]],"v":[[-44.865,-3.465],[-43.763,3.465],[43.764,3.465],[44.865,-3.465],[0,-3.465]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[47.308,54.308],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 72","np":4,"cix":2,"bm":0,"ix":72,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.934,-2.219],[0,0],[-0.573,2.383],[0,0]],"o":[[0,0],[0.934,-2.219],[0,0],[0.572,2.383]],"v":[[-41.54,3.465],[41.541,3.465],[43.763,-3.465],[-43.763,-3.465]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.89019613827,0.023529413635,0.074509803922,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[47.309,61.238],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 73","np":4,"cix":2,"bm":0,"ix":73,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.413,-2.192],[0,0],[-1.02,2.433],[0,0]],"o":[[0,0],[1.413,-2.192],[0,0],[1.02,2.433]],"v":[[-37.849,3.465],[37.85,3.465],[41.54,-3.465],[-41.54,-3.465]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[47.306,68.169],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 74","np":4,"cix":2,"bm":0,"ix":74,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.052,-2.122],[0,0],[-1.608,2.488],[0,0]],"o":[[0,0],[2.052,-2.118],[0,0],[1.604,2.488]],"v":[[-32.356,3.465],[32.356,3.465],[37.85,-3.465],[-37.85,-3.465]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.89019613827,0.023529413635,0.074509803922,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[47.308,75.096],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 75","np":4,"cix":2,"bm":0,"ix":75,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.15,-1.962],[0,0],[-2.57,2.651],[0,0]],"o":[[0,0],[3.15,-1.958],[0,0],[2.562,2.651]],"v":[[-23.748,3.465],[23.745,3.465],[32.357,-3.465],[-32.357,-3.465]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[47.312,82.028],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 76","np":4,"cix":2,"bm":0,"ix":76,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-8.728,0],[-6.902,4.298],[0,0]],"o":[[8.729,0],[0,0],[6.899,4.294]],"v":[[-0.001,3.41],[23.747,-3.41],[-23.747,-3.41]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.89019613827,0.023529413635,0.074509803922,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[47.309,88.904],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 77","np":4,"cix":2,"bm":0,"ix":77,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":210.000008553475,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Layer 3 Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[749.07,281.097,0],"ix":2},"a":{"a":0,"k":[47.322,47.487,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":46,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":53,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":69,"s":[100,100,100]},{"t":76.0000030955435,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.931,-0.367],[1.803,-2.952],[6.828,3.991],[0.023,1.946],[-0.724,0.254],[-8.621,0.598],[0,0],[0,0]],"o":[[-0.144,1.483],[-3.347,5.485],[-5.617,-3.282],[0,0],[0,0],[8.621,-0.6],[0,0],[1.037,0.322]],"v":[[12.52,-6.997],[10.034,-0.47],[-6.323,3.917],[-12.52,-6.857],[-10.073,-7.908],[-0.067,2.522],[9.908,-7.908],[9.91,-7.908]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.929411824544,0.878431432387,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[45.681,84.63],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.352,-0.646],[-1.933,3.608],[0.436,-0.723],[1.575,2.667]],"o":[[1.929,3.544],[0.397,-0.742],[-1.575,2.61],[-0.374,-0.634]],"v":[[-4.511,-1.16],[4.466,-1.112],[3.336,-1.773],[-3.526,-1.736]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.909803981407,0.607843137255,0.407843167174,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[46.571,53.627],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":4,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.328,-0.416],[1.391,-0.491],[-0.754,-0.054],[-0.2,0.989],[0.869,0.852]],"o":[[0.788,0.998],[-0.709,0.25],[1.078,0.078],[0.26,-1.293],[-0.398,-0.392]],"v":[[-0.544,-1.754],[-0.953,1.367],[-0.778,2.664],[1.402,0.746],[0.053,-2.351]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.909803981407,0.607843137255,0.407843167174,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[47.209,45.477],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":4,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.419,0.04],[0.706,-1.04],[1.725,-0.941],[-0.381,0.232],[-0.981,1.614],[-0.288,0.85],[-0.119,0.454],[-0.101,-0.166]],"o":[[-0.204,1.415],[-1.107,1.626],[-0.391,0.214],[1.609,-0.976],[0.464,-0.764],[0.149,-0.441],[0.114,0.182],[0,0]],"v":[[3.496,-4.426],[1.728,-0.443],[-3.105,4.646],[-2.59,3.583],[1.029,-1.068],[2.167,-3.497],[2.515,-4.859],[2.835,-4.338]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.309803921569,0.215686289469,0.145098039216,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[55.649,18.99],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":4,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.266,0.21],[3.277,-0.834],[1.478,-2.65],[2.627,-2.099],[3.088,-0.775],[-0.233,0.032],[-3.123,4.515],[-2.882,1.797],[-2.636,-1.955]],"o":[[-2.391,-1.893],[-3.152,0.802],[-1.622,2.906],[-2.502,1.999],[-0.243,0.061],[5.482,-0.746],[1.851,-2.674],[3.155,-1.967],[0.27,0.2]],"v":[[14.623,-5.608],[6.382,-8.794],[-0.09,-2.372],[-6.106,5.211],[-14.645,9.231],[-14.546,9.596],[-0.811,0.898],[5.082,-7.039],[14.26,-5.139]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.309803921569,0.215686289469,0.145098039216,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[38.085,28.742],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":4,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.436,0.164],[0.061,1.399],[1.972,-1.242]],"o":[[2.436,-0.164],[-0.061,-1.398],[-1.973,1.242]],"v":[[-1.194,1.689],[3.569,-0.263],[-1.446,-0.611]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784313725,0.270588235294,0.207843152214,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[36.595,32.85],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":4,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[2.436,0.164],[-0.062,1.399],[-1.972,-1.242]],"o":[[-2.436,-0.164],[0.061,-1.398],[1.973,1.242]],"v":[[1.195,1.689],[-3.568,-0.263],[1.446,-0.611]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784313725,0.270588235294,0.207843152214,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[56.253,32.85],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":4,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.494,0.084],[-0.645,-0.314],[-0.584,0.082],[0.005,0.159],[0.638,0.185],[0.781,-0.175]],"o":[[0.708,-0.121],[0.5,0.242],[0.167,-0.023],[-0.025,-0.766],[-0.776,-0.226],[-0.504,0.112]],"v":[[-1.519,0.01],[0.547,0.342],[1.933,0.897],[2.228,0.51],[0.658,-0.754],[-1.729,-0.752]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.909803981407,0.607843137255,0.407843167174,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[26.235,42.877],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":4,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.478,-0.218],[-0.412,-1.225],[-0.418,-0.266],[-0.202,0.271],[0.458,0.606],[1.051,0.417]],"o":[[1.176,0.536],[0.142,0.423],[0.29,0.185],[0.562,-0.755],[-0.686,-0.909],[-0.485,-0.192]],"v":[[-1.981,-1.64],[0.522,1.184],[1.069,2.495],[1.897,2.33],[1.02,-0.578],[-1.624,-2.487]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.909803981407,0.607843137255,0.407843167174,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[26.757,42.445],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9","np":4,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.459,-0.125],[0.592,-0.52],[-0.291,-0.619],[-0.091,0.014],[-0.351,0.341],[-0.65,0.199]],"o":[[-0.759,0.207],[-0.421,0.371],[0.044,0.095],[0.518,-0.08],[0.49,-0.476],[0.452,-0.138]],"v":[[1.288,-1.378],[-0.751,-0.286],[-1.643,1.388],[-1.394,1.489],[-0.25,0.338],[1.482,-0.668]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.909803981407,0.607843137255,0.407843167174,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[65.621,42.974],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 10","np":4,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.259,-0.25],[0.394,-0.978],[-0.459,-0.84],[-0.126,0.293],[-0.186,0.779],[-0.656,0.75]],"o":[[-0.755,0.728],[-0.336,0.831],[0.139,0.253],[0.314,-0.728],[0.232,-0.969],[0.233,-0.267]],"v":[[0.934,-2.723],[-0.825,-0.214],[-1.1,2.68],[-0.377,2.68],[-0.021,0.308],[1.326,-2.331]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.909803981407,0.607843137255,0.407843167174,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[64.918,42.648],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 11","np":4,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.145,0],[0,1.389],[1.145,0],[0,-1.389]],"o":[[1.145,0],[0,-1.389],[-1.145,0],[0,1.389]],"v":[[0,2.515],[2.073,0],[0,-2.515],[-2.073,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784313725,0.270588235294,0.207843152214,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[54.171,40.149],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 12","np":4,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.145,0],[0,1.389],[1.145,0],[0,-1.389]],"o":[[1.145,0],[0,-1.389],[-1.145,0],[0,1.389]],"v":[[0,2.515],[2.073,0],[0,-2.515],[-2.073,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784313725,0.270588235294,0.207843152214,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[38.973,40.063],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 13","np":4,"cix":2,"bm":0,"ix":13,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.298,0.132],[0.106,1.844],[2.297,-0.132],[-0.106,-1.844]],"o":[[2.297,-0.132],[-0.106,-1.845],[-2.298,0.132],[0.106,1.845]],"v":[[0.192,3.339],[4.16,-0.238],[-0.191,-3.339],[-4.16,0.239]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.690196078431,0.521568627451,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[57.772,46.844],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 14","np":4,"cix":2,"bm":0,"ix":14,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.298,0.132],[0.106,1.844],[2.297,-0.132],[-0.106,-1.844]],"o":[[2.297,-0.132],[-0.105,-1.845],[-2.298,0.131],[0.106,1.844]],"v":[[0.192,3.339],[4.16,-0.238],[-0.191,-3.339],[-4.16,0.239]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.690196078431,0.521568627451,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[34.158,47.23],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 15","np":4,"cix":2,"bm":0,"ix":15,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-2.146,3.123],[4.22,0]],"o":[[0,0],[2.146,-3.124],[-4.22,0]],"v":[[-3.84,5.814],[3.122,2.332],[-1.048,-5.814]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.768627510819,0.611764705882,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[65.716,42.784],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 16","np":4,"cix":2,"bm":0,"ix":16,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.675,0.551],[-2.572,3.858],[-4.025,1.469],[0,0],[-4.226,-1.838],[0.551,-5.879],[5.104,-3.908],[4.287,6.859],[0,0],[1.348,3.436]],"o":[[0,0],[2.572,-3.859],[4.026,-1.47],[0,0],[4.226,1.837],[-0.552,5.88],[-7.839,6.002],[-3.892,-6.227],[0,0],[-1.341,-3.42]],"v":[[-16.049,-6.309],[-7.23,-12.371],[1.238,-22.476],[9.306,-19.904],[15.553,-19.659],[21.249,-5.022],[12.123,17.945],[-9.761,14.393],[-13.844,5.451],[-20.459,0.668]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.768627510819,0.611764705882,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[43.241,43.462],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 17","np":4,"cix":2,"bm":0,"ix":17,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.989,-2.373],[9.052,0],[7.536,5.44],[-3.846,1.616],[-0.724,0.328],[0,0],[-8.621,0.771],[0,0],[0,0],[-0.852,-0.328]],"o":[[-7.108,4.53],[-10.006,0],[3.702,-2.543],[0.893,-0.374],[0,0],[0,0],[8.621,-0.775],[0,0],[0.907,0.287],[6.023,2.305]],"v":[[25.7,0.804],[1.101,7.957],[-25.7,-0.689],[-13.062,-6.905],[-10.622,-7.949],[-10.615,-7.957],[-0.609,5.512],[9.366,-7.957],[9.369,-7.957],[12.009,-7.032]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.988235353956,0.658823529412,0.58431372549,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[46.223,84.679],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 18","np":4,"cix":2,"bm":0,"ix":18,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.429,8.152],[-0.401,0.048],[-0.303,0.023],[-3.012,-4.439]],"o":[[0,0],[0.391,-0.063],[0.315,-0.038],[0.095,2.525],[3.67,5.408]],"v":[[-4.319,8.208],[-2.163,-8.623],[-0.972,-8.792],[-0.046,-8.885],[3.601,5.504]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.458823559331,0.345098039216,0.266666666667,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[44.452,16.296],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 19","np":4,"cix":2,"bm":0,"ix":19,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.647,-5.804],[0,0],[0,0],[-1.965,6.074]],"o":[[0,0],[0,0],[0,0],[1.314,5.531]],"v":[[0.691,9.236],[-2.865,9.178],[-3.11,1.538],[2.626,-9.237]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.458823559331,0.345098039216,0.266666666667,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[67.681,31.952],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 20","np":4,"cix":2,"bm":0,"ix":20,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0.36,1.077],[-2.704,6.374],[-0.876,1.284],[0,0]],"o":[[0,0],[-0.777,-2.772],[-1.158,-3.478],[0.519,-1.22],[-3.015,9.97],[0,0]],"v":[[4.712,7.26],[-1.364,12.562],[-3.21,6.488],[-3.21,-8.774],[-1.119,-12.562],[3.358,4.362]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.458823559331,0.345098039216,0.266666666667,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[25.374,31.54],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 21","np":4,"cix":2,"bm":0,"ix":21,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.158,-4.444],[0.026,-1.824],[2.224,-0.588],[0,0]],"o":[[-0.356,1.364],[-5.299,3.236],[0.494,-3.715],[0,0]],"v":[[6.865,-4.381],[6.339,0.593],[-6.93,6.134],[-6.66,-3.415]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.768627510819,0.611764705882,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[46.213,66.172],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 22","np":4,"cix":2,"bm":0,"ix":22,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-4.482,-2.719],[8.687,0],[7.536,5.44],[-3.857,1.741],[0,0],[-0.313,0.492],[-0.151,1.163],[0,0],[1.158,-4.444],[0.025,-1.823],[-0.152,-1.604],[-0.752,-0.442],[-0.333,-0.197],[0,0]],"o":[[-6.921,4.197],[-10.006,0],[4.562,-3.13],[0,0],[1.564,-0.706],[0.323,-0.507],[0.494,-3.715],[0,0],[-0.355,1.365],[-0.046,2.681],[0.083,0.87],[0.517,0.305],[0,0],[4.255,2.512]],"v":[[25.265,11.032],[1.536,17.646],[-25.265,9],[-10.187,1.74],[-10.18,1.731],[-7.201,-0.063],[-6.505,-2.687],[-6.235,-12.235],[7.289,-13.201],[6.765,-8.227],[7.078,-1.18],[8.407,0.909],[9.802,1.731],[9.804,1.731]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.768627510819,0.611764705882,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[45.788,74.991],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 23","np":4,"cix":2,"bm":0,"ix":23,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.352,-1.546],[1.352,1.352],[-1.158,-1.617],[2.318,-0.772],[0,0],[1.544,1.546],[2.124,-2.512],[1.932,1.158],[-1.932,0.966],[-1.158,7.148],[1.518,5.866],[0,0],[0,0],[0.212,-0.933],[-1.352,-4.25]],"o":[[-1.352,1.546],[-1.352,-1.352],[1.16,1.617],[-2.318,0.774],[0,0],[-1.546,-1.546],[-2.126,2.51],[-1.932,-1.16],[1.932,-0.966],[0.691,-4.26],[0,0],[0,0],[-0.406,1.36],[-1.352,5.991],[1.352,4.25]],"v":[[25.05,13.356],[19.834,13.356],[18.288,14.443],[16.742,18.378],[-12.656,17.518],[-11.076,12.196],[-16.486,14.902],[-23.248,17.22],[-24.408,12.39],[-17.066,3.116],[-19.328,-14.219],[-11.527,-18.585],[22.919,-15.105],[21.958,-11.632],[22.152,6.208]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.458823559331,0.345098039216,0.266666666667,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[44.061,60.993],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 24","np":4,"cix":2,"bm":0,"ix":24,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.352,-4.25],[1.352,-1.546],[1.352,1.352],[-1.158,-1.617],[2.318,-0.772],[0,0],[1.544,1.546],[2.124,-2.512],[1.932,1.158],[-1.932,0.966],[-1.158,7.148],[1.518,5.866],[0.237,0.845],[0.361,1.077],[-2.704,6.374],[-0.875,1.284],[-8.644,1.412],[-0.401,0.048],[-0.303,0.023],[-1.806,-2.87],[-0.101,-0.166],[-0.419,0.04],[-2.938,-4.515],[-0.328,-1.387],[1.647,-5.803],[0.419,-1.402],[0.212,-0.933]],"o":[[1.352,4.25],[-1.352,1.546],[-1.352,-1.352],[1.16,1.617],[-2.318,0.774],[0,0],[-1.546,-1.546],[-2.126,2.51],[-1.932,-1.16],[1.932,-0.966],[0.691,-4.26],[-0.243,-0.931],[-0.777,-2.772],[-1.158,-3.478],[0.52,-1.221],[3.37,-4.946],[0.391,-0.063],[0.316,-0.038],[8.273,-0.666],[0.113,0.182],[0,0],[1.763,-0.169],[0.742,1.14],[1.314,5.531],[-0.484,1.708],[-0.406,1.36],[-1.352,5.991]],"v":[[21.542,23.755],[24.44,30.903],[19.224,30.903],[17.678,31.991],[16.132,35.926],[-13.266,35.066],[-11.686,29.743],[-17.096,32.449],[-23.858,34.767],[-25.018,29.937],[-17.676,20.663],[-19.938,3.329],[-20.66,0.658],[-22.506,-5.417],[-22.506,-20.678],[-20.415,-24.467],[-2.381,-35.772],[-1.191,-35.941],[-0.265,-36.034],[13.494,-29.314],[13.814,-28.793],[14.475,-28.881],[24.054,-24.543],[25.636,-20.728],[23.701,-2.257],[22.309,2.442],[21.348,5.915]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.458823559331,0.345098039216,0.266666666667,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[44.671,43.445],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 25","np":4,"cix":2,"bm":0,"ix":25,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-25.323],[12.775,-8.137],[0.293,-0.176],[8.686,0],[7.536,5.441],[0,15.317],[-25.323,0]],"o":[[0,16.271],[-0.287,0.184],[-6.921,4.197],[-10.006,0],[-11.539,-8.326],[0,-25.323],[25.32,0]],"v":[[45.851,0],[24.601,38.7],[23.73,39.239],[0.002,45.852],[-26.799,37.206],[-45.851,0],[0.002,-45.852]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.039215686275,0.145098039216,0.250980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[47.322,46.785],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 26","np":4,"cix":2,"bm":0,"ix":26,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":210.000008553475,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Layer 6 Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[257.823,707.477,0],"ix":2},"a":{"a":0,"k":[47.322,47.322,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":69,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":76,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":92,"s":[100,100,100]},{"t":99.0000040323527,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-6.321,17.855],[0,0],[-20.021,0]],"o":[[0,0],[6.321,17.855],[20.022,0]],"v":[[43.327,-15.334],[-43.327,-15.334],[-0.001,15.334]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.807843197093,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[47.32,77.989],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-5.383],[-1.698,-4.803],[0,0],[0,5.387],[1.701,4.802],[0,0]],"o":[[0,5.383],[0,0],[1.701,-4.803],[0,-5.383],[0,0],[-1.698,4.802]],"v":[[-46,0],[-43.328,15.334],[43.325,15.334],[46,0],[43.325,-15.334],[-43.328,-15.334]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.89019613827,0.023529413635,0.074509803922,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[47.322,47.322],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":4,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[6.321,-17.851],[0,0],[20.021,0]],"o":[[0,0],[-6.321,-17.855],[-20.022,0.004]],"v":[[-43.326,15.334],[43.326,15.334],[0.001,-15.334]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[47.32,16.654],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":4,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":210.000008553475,"st":-1.00000004073083,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Layer 7 Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[180.473,861.388,0],"ix":2},"a":{"a":0,"k":[47.445,47.416,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":92,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":99,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":115,"s":[100,100,100]},{"t":122.000004969162,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.072,-0.476],[-1.331,0.155],[0.901,1.018],[0.089,-0.11],[0.101,-0.264],[0.634,-0.035],[0.197,0.951]],"o":[[0.219,1.448],[0.907,-0.106],[-0.09,-0.102],[-0.181,0.223],[-0.233,0.615],[-0.886,0.05],[-0.102,-0.491]],"v":[[-2.852,-0.682],[0.277,1.221],[2.023,-1.126],[1.639,-1.126],[1.376,-0.562],[-0.006,0.371],[-2.115,-0.885]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.909803981407,0.607843137255,0.407843167174,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[48.261,51.541],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.265,0.019],[-0.32,-0.207],[-0.32,-0.043],[-0.015,0.081],[0.321,0.159],[0.421,-0.049]],"o":[[0.381,-0.027],[0.261,0.169],[0.083,0.011],[0.072,-0.407],[-0.383,-0.188],[-0.253,0.03]],"v":[[-0.882,-0.175],[0.145,0.104],[0.873,0.619],[1.075,0.466],[0.375,-0.389],[-0.882,-0.581]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.909803981407,0.607843137255,0.407843167174,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[28.725,40.682],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":4,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.194,-0.154],[-0.159,-0.68],[-0.314,-0.385],[-0.059,0.034],[0.177,0.492],[0.615,0.436]],"o":[[0.544,0.433],[0.109,0.472],[0.045,0.056],[0.563,-0.326],[-0.257,-0.714],[-0.199,-0.142]],"v":[[-0.938,-1.387],[0.142,0.321],[0.369,1.81],[0.569,1.836],[0.677,-0.017],[-0.675,-1.728]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.909803981407,0.607843137255,0.407843167174,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[29.07,40.488],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":4,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.166,-0.063],[0.356,-0.398],[-0.328,-0.402],[-0.052,0.019],[-0.19,0.309],[-0.466,0.204]],"o":[[-0.494,0.187],[-0.278,0.311],[0.035,0.043],[0.37,-0.137],[0.264,-0.431],[0.161,-0.07]],"v":[[0.893,-1.074],[-0.458,-0.215],[-0.847,1.074],[-0.681,1.118],[-0.045,0.171],[1.013,-0.788]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.909803981407,0.607843137255,0.407843167174,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[66.151,40.89],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":4,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.073,-0.101],[-0.865,-1.091],[-0.062,0.149],[-0.032,0.536],[-0.39,0.64]],"o":[[-0.665,0.927],[0.129,0.162],[0.207,-0.501],[0.046,-0.747],[0.068,-0.111]],"v":[[0.779,-1.999],[-0.152,1.938],[0.26,1.829],[0.325,0.186],[0.949,-1.898]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.909803981407,0.607843137255,0.407843167174,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[65.38,40.835],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":4,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.674,-0.842],[1.432,0.084],[1.011,-0.337],[0,0.589],[-1.011,0.589]],"o":[[0.634,0.792],[-1.432,-0.084],[-1.01,0.337],[0,-0.59],[1.011,-0.59]],"v":[[3.684,-1.348],[2.252,0.926],[-2.717,1.685],[-4.318,1.601],[-2.044,-1.432]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784313725,0.270588235294,0.207843152214,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[39.204,32.406],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":4,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.674,-0.842],[-1.432,0.084],[-1.011,-0.337],[0,0.589],[1.011,0.589]],"o":[[-0.634,0.792],[1.432,-0.084],[1.011,0.337],[0,-0.59],[-1.011,-0.59]],"v":[[-3.684,-1.348],[-2.252,0.926],[2.717,1.685],[4.318,1.601],[2.044,-1.432]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784313725,0.270588235294,0.207843152214,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[55.154,32.406],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":4,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.881,1.438],[0.287,-0.574],[4.295,-0.126],[1.138,3.917],[0.19,1.356],[-4.5,-2.45],[-4.886,4.379]],"o":[[-0.141,2.056],[-1.135,2.274],[-4.295,0.126],[-0.203,-0.7],[0.989,1.519],[6.19,3.369],[3.108,-2.786]],"v":[[16.341,-7.605],[15.71,-3.387],[0.804,7.603],[-15.747,-3.387],[-16.341,-6.556],[-8.419,0.53],[10.574,-0.903]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.439215716194,0.250980392157,0.117647066303,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[47.845,60.007],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":4,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.17,0.072],[-0.571,0.884],[0.626,0.884],[0.131,-0.146],[0.262,-0.798],[0.961,-0.482]],"o":[[0.956,-0.407],[0.522,-0.805],[-0.099,-0.141],[-0.58,0.646],[-0.328,1],[-0.174,0.087]],"v":[[-1.604,2.578],[0.737,0.7],[1.301,-2.446],[0.855,-2.504],[0.133,-0.072],[-1.753,2.323]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.439215716194,0.250980392157,0.117647066303,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[49.57,13.295],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9","np":4,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.116,-0.001],[-1.212,1.1],[0.667,1.225],[0.129,-0.144],[0.162,-0.523],[0.454,-0.557],[1.548,-0.065]],"o":[[1.615,0.01],[0.867,-0.787],[-0.09,-0.166],[-0.374,0.418],[-0.211,0.685],[-0.98,1.204],[-0.115,0.005]],"v":[[-3.289,2.832],[1.051,1.292],[2.739,-2.637],[2.26,-2.699],[1.715,-1.221],[0.739,0.639],[-3.289,2.652]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.439215716194,0.250980392157,0.117647066303,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[50.927,14.082],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 10","np":4,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.235,-0.011],[0.511,1.077],[0.603,0.705],[0.079,-0.222],[-0.747,-0.849],[-1.196,0.12]],"o":[[-1.292,0.058],[-0.391,-0.825],[-0.18,-0.211],[-0.4,1.124],[0.802,0.912],[0.226,-0.022]],"v":[[2.22,2.146],[-0.44,0.128],[-1.482,-2.414],[-2.054,-2.264],[-0.972,1.285],[2.22,2.505]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.439215716194,0.250980392157,0.117647066303,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[44.335,14.271],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 11","np":4,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.278,-0.363],[-0.676,-0.729],[-0.716,0.671],[0.359,-0.067],[0.487,0.527],[-0.353,0.512]],"o":[[-0.598,0.779],[0.615,0.664],[0.306,-0.286],[-0.599,0.111],[-0.441,-0.478],[0.272,-0.395]],"v":[[-1.227,-1.64],[-1.125,1.037],[1.519,1.331],[1.138,0.678],[-0.533,0.445],[-0.596,-1.271]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.909803981407,0.607843137255,0.407843167174,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[47.889,43.389],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 12","np":4,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.502,-0.784],[-0.478,-1.557],[0,0],[2.645,1.306]],"o":[[0.052,-0.049],[0.507,1.642],[0,0],[-0.769,0.905]],"v":[[-1.7,-1.421],[-0.524,-0.363],[0.992,4.058],[0.321,-4.058]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.800000059838,0.870588295133,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[49.258,77.449],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 13","np":4,"cix":2,"bm":0,"ix":13,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.502,-0.784],[0.477,-1.556],[0,0],[-2.645,1.306]],"o":[[-0.052,-0.049],[-0.508,1.643],[0,0],[0.769,0.906]],"v":[[1.661,-1.447],[0.61,-0.386],[-0.907,4.035],[-0.308,-4.035]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.800000059838,0.870588295133,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[45.891,77.471],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 14","np":4,"cix":2,"bm":0,"ix":14,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.123,0],[0,1.363],[1.123,0],[0,-1.362]],"o":[[1.123,0],[0,-1.362],[-1.123,0],[0,1.363]],"v":[[0,2.467],[2.034,-0.001],[0,-2.467],[-2.034,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784313725,0.270588235294,0.207843152214,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[54.675,37.165],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 15","np":4,"cix":2,"bm":0,"ix":15,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.123,0],[0,1.363],[1.123,0],[0,-1.362]],"o":[[1.123,0],[0,-1.362],[-1.123,0],[0,1.363]],"v":[[0,2.467],[2.034,-0.001],[0,-2.467],[-2.034,-0.001]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784313725,0.270588235294,0.207843152214,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[39.683,37.165],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 16","np":4,"cix":2,"bm":0,"ix":16,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.132,1.66],[2.067,0.164],[0.132,-1.66],[-2.068,-0.164]],"o":[[0.132,-1.66],[-2.068,-0.164],[-0.131,1.66],[2.067,0.164]],"v":[[3.744,0.298],[0.239,-3.006],[-3.745,-0.297],[-0.239,3.006]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.690196078431,0.521568627451,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[56.897,46.461],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 17","np":4,"cix":2,"bm":0,"ix":17,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.068,0.163],[0.132,1.66],[2.068,-0.164],[-0.132,-1.66]],"o":[[2.068,-0.164],[-0.131,-1.66],[-2.068,0.163],[0.131,1.66]],"v":[[0.238,3.006],[3.744,-0.296],[-0.238,-3.005],[-3.743,0.296]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.690196078431,0.521568627451,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[38.408,46.86],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 18","np":4,"cix":2,"bm":0,"ix":18,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.253,1.516],[-1.015,2.454],[-1.769,-3.032],[1.336,-0.621],[0,2.779],[0.625,-0.005],[0.026,-0.83],[1.117,-0.43]],"o":[[0,0],[1.305,-3.158],[1.768,3.032],[-2.716,1.263],[0,-1.303],[-1.324,0.011],[-0.039,1.278],[-1.642,0.632]],"v":[[-6.527,3.285],[-5.474,-2.4],[4.759,-2.653],[5.011,4.422],[0.969,0.843],[-0.234,-0.642],[-1.727,0.758],[-3.074,4.801]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.768627510819,0.611764705882,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[48.69,54.219],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 19","np":4,"cix":2,"bm":0,"ix":19,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[2.021,-3.158],[-0.505,-1.642],[0,0],[0,0],[0.884,0.758],[0,0]],"o":[[0,0],[0.505,1.642],[0,0],[0,0],[-0.884,-0.758],[0,0]],"v":[[-4.948,1.334],[-3.769,2.4],[-2.253,6.822],[4.948,-1.39],[3.306,-6.064],[2.422,-6.822]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.800000059838,0.870588295133,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[52.507,74.686],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 20","np":4,"cix":2,"bm":0,"ix":20,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.502,-0.784],[0.477,-1.556],[0,0],[0,0],[-0.884,0.757],[0,0],[-2.323,-2.746]],"o":[[-0.052,-0.049],[-0.508,1.643],[0,0],[0,0],[0,0],[0,0],[0.769,0.906]],"v":[[4.885,1.339],[3.834,2.4],[2.317,6.821],[-4.885,-1.391],[-3.242,-6.063],[-2.356,-6.82],[2.916,-1.249]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.800000059838,0.870588295133,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[42.668,74.686],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 21","np":4,"cix":2,"bm":0,"ix":21,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.423,-6.098],[0.287,-0.574],[4.295,-0.126],[1.138,3.917],[0.19,1.356],[0,0],[0,0],[0,0],[-0.893,-2.756],[-1.898,-1.096],[-2.653,1.643],[-1.388,-1.012],[-0.896,-0.119],[-0.126,3.916],[0,0],[0,0]],"o":[[-0.141,2.056],[-1.135,2.274],[-4.295,0.126],[-0.203,-0.7],[-0.871,-6.222],[0,0],[0,0],[0.161,2.892],[1.158,3.58],[3.285,1.896],[2.652,-1.643],[1.391,1.009],[2.842,0.381],[0.126,-3.917],[0,0],[0,0.001]],"v":[[16.907,1.373],[16.275,5.591],[1.37,16.581],[-15.182,5.591],[-15.775,2.422],[-17.329,-15.129],[-16.255,-16.707],[-16.02,-12.44],[-14.447,-3.929],[-9.622,5.212],[-3.852,-3.379],[6.169,-3.379],[9.708,4.705],[15.519,-9.191],[16.023,-14.748],[17.223,-14.939]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.529411764706,0.329411764706,0.196078446332,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[47.279,51.029],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 22","np":4,"cix":2,"bm":0,"ix":22,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.514,-3.298],[10.539,0],[7.664,6.071],[-3.607,1.388],[-0.596,0.206],[-13.35,12.281],[-0.433,-0.153]],"o":[[-7.667,6.074],[-10.54,0],[2.209,-2.897],[0.609,-0.235],[1.982,1.321],[0.423,0.141],[4.05,1.428]],"v":[[27.899,-1.262],[0.002,8.437],[-27.899,-1.262],[-18.404,-7.447],[-16.59,-8.107],[15.63,-8.437],[16.914,-7.997]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.152941176471,0.337254901961,0.580392156863,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[47.619,83.684],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 23","np":4,"cix":2,"bm":0,"ix":23,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.433,-0.153],[0,0],[0,0],[0,0],[0,0],[-0.297,0.552],[-0.597,0.205],[-1.19,0.379],[-0.71,0.587],[0,0],[0,0],[0,0],[-3.57,-1.188]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0.609,-0.235],[1.385,-0.483],[2.081,-0.658],[0,0],[0,0],[0,0],[0.876,0.893],[0.423,0.141]],"v":[[17.922,-3.284],[14.166,2.661],[-0.616,6.579],[-16.66,2.031],[-17.922,-1.76],[-17.395,-2.735],[-15.581,-3.395],[-11.67,-4.672],[-7.239,-6.461],[0.941,-2.967],[4.391,-4.183],[9.127,-6.579],[16.638,-3.724]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.180392156863,0.400000029919,0.690196078431,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[46.61,78.971],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 24","np":4,"cix":2,"bm":0,"ix":24,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[2.695,0],[1.786,-1.495],[0.552,-2.623],[-0.632,-2.906],[-4.927,-3.032],[0,0],[-1.642,1.516],[-0.505,1.516],[-0.122,3.916],[3.186,1.821]],"o":[[-3.537,0],[-2.716,2.274],[-0.505,2.4],[0.632,2.905],[4.927,3.032],[0,0],[1.642,-1.516],[0.506,-1.516],[0.19,-6.064],[-1.769,-1.011]],"v":[[0.726,-23.372],[-8.707,-21.014],[-15.95,-7.959],[-14.813,9.728],[-7.738,20.34],[1.61,23.245],[8.306,20.845],[14.875,12.128],[16.265,-6.064],[8.559,-21.856]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.768627510819,0.611764705882,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[47.088,40.196],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 25","np":4,"cix":2,"bm":0,"ix":25,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[1.011,3.285],[-1.011,0.884],[0,0]],"o":[[0,0],[-1.011,-3.284],[1.01,-0.885],[0,0]],"v":[[2.401,5.053],[-1.39,1.769],[-0.379,-4.169],[2.401,-4.926]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.768627510819,0.611764705882,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[28.814,40.954],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 26","np":4,"cix":2,"bm":0,"ix":26,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-1.011,3.285],[1.011,0.884],[0,0]],"o":[[0,0],[1.011,-3.284],[-1.01,-0.885],[0,0]],"v":[[-2.4,5.053],[1.389,1.769],[0.378,-4.169],[-2.4,-4.926]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.768627510819,0.611764705882,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[66.425,41.459],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 27","np":4,"cix":2,"bm":0,"ix":27,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-2.029],[0.572,-2.182],[0,0],[4.043,3.664],[5.183,-7.877],[-0.287,2.776],[-0.762,1.081],[-4.832,0.851],[0,0],[-4.084,4.095]],"o":[[0,2.746],[0,0],[0,0],[-3.956,-3.587],[-0.581,-3.889],[0.126,-1.222],[1.296,1.227],[6.442,-1.138],[0,0],[2.672,2.841]],"v":[[19.604,-2.822],[16.833,10.691],[16.761,10.758],[10.002,0.587],[-18.103,9.041],[-19.56,-5.982],[-18.147,-9.457],[-8.82,-6.738],[7.904,-6.991],[16.516,-10.759]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.439215716194,0.250980392157,0.117647066303,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[47.741,25.332],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 28","np":4,"cix":2,"bm":0,"ix":28,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.514,-3.298],[10.539,0],[7.664,6.071],[-3.607,1.388],[-0.596,0.206],[-1.19,0.378],[-0.71,0.586],[-0.064,0.119],[0,0],[0,0],[-1.136,-2.147],[-0.077,-0.074],[-3.57,-1.187],[-0.433,-0.153]],"o":[[-7.667,6.074],[-10.54,0],[2.209,-2.897],[0.609,-0.235],[1.385,-0.482],[2.081,-0.658],[0.139,-0.114],[1.138,-2.147],[0,0],[0,0],[0.042,0.08],[0.876,0.893],[0.424,0.141],[4.049,1.428]],"v":[[27.899,6.979],[0.002,16.676],[-27.899,6.979],[-18.404,0.794],[-16.59,0.133],[-12.679,-1.144],[-8.248,-2.933],[-7.941,-3.285],[-7.181,-16.677],[7.184,-16.677],[7.941,-3.285],[8.118,-3.052],[15.63,-0.197],[16.915,0.243]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.768627510819,0.611764705882,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[47.619,75.443],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 29","np":4,"cix":2,"bm":0,"ix":29,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-2.029],[0.572,-2.182],[0,0],[0,0],[0,0],[0.186,1.247],[-0.287,2.776],[-0.762,1.081],[-2.162,1.037],[-8.969,-3.41],[-1.489,-1.583]],"o":[[0,2.746],[-0.084,0.327],[0,0],[0,0],[0,0],[-0.581,-3.889],[0.126,-1.222],[1.524,-2.163],[2.021,-0.97],[3.211,1.222],[2.672,2.841]],"v":[[19.726,0],[16.954,13.513],[16.82,14.023],[13.913,15.666],[-17.67,13.897],[-17.982,11.863],[-19.439,-3.159],[-18.026,-6.635],[-11.859,-11.623],[9.745,-12.256],[16.637,-7.937]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.529411764706,0.329411764706,0.196078446332,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[47.619,22.51],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 30","np":4,"cix":2,"bm":0,"ix":30,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-24.84],[10.401,-8.236],[10.539,0],[7.665,6.072],[0,14.3],[-24.84,0]],"o":[[0,14.3],[-7.667,6.074],[-10.54,0],[-10.403,-8.238],[0,-24.84],[24.837,0]],"v":[[44.975,0],[27.898,35.277],[0.001,44.976],[-27.898,35.277],[-44.975,0],[0.001,-44.976]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.039215686275,0.145098039216,0.250980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[47.74,47.145],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 31","np":4,"cix":2,"bm":0,"ix":31,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":210.000008553475,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Layer 1 Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[75.412,646.825,0],"ix":2},"a":{"a":0,"k":[47.401,47.492,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":115,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":122,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":138,"s":[100,100,100]},{"t":145.000005905971,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.21,-0.077],[1.026,0.073],[0.728,1.493],[-1.639,2.541],[1.523,2.488],[1.377,2.659],[-1.619,2.932],[-1.231,3.262],[5.821,3.315],[2.064,-2.478],[-0.788,-2.736],[0.033,0.204],[-2.106,1.967],[-2.173,-2.316],[3.056,-5.456],[0.879,-3.217],[-1.993,-2.299],[-0.853,-3.037],[0.54,-1.324],[0.833,-1.23],[-2.357,-2.157],[-1.76,0.741]],"o":[[-0.971,0.358],[-1.641,-0.116],[-1.638,-3.354],[1.578,-2.447],[-1.558,-2.547],[-1.674,-3.233],[1.678,-3.039],[2.05,-5.433],[-2.702,-1.539],[-1.903,2.284],[0.06,0.208],[-0.424,-2.668],[2.522,-2.355],[4.987,5.317],[-1.605,2.865],[-0.781,2.86],[1.923,2.219],[0.386,1.373],[-0.568,1.394],[-1.685,2.492],[1.509,1.38],[0.196,-0.082]],"v":[[8.498,30.378],[5.397,30.746],[2.035,28.506],[5.082,20.256],[5.17,12.058],[-0.943,5.757],[0.422,-4.179],[5.173,-13.425],[1.674,-30.127],[-6.816,-28.937],[-7.997,-20.71],[-7.68,-20.797],[-5.821,-28.814],[2.783,-27.901],[1.762,-9.031],[-2.783,-0.304],[-1.274,7.963],[4.557,14.403],[4.331,18.606],[1.832,22.322],[2.393,30.286],[8.589,30.706]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.89019613827,0.501960784314,0.176470588235,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[54.57,44.14],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[4.323,-3.307],[-1.145,-5.594],[4.703,-4.449],[-0.266,-0.174],[0.124,3.484],[-1.526,1.527],[3.177,1.78],[-0.761,5.084],[-6.23,3.561],[2.289,8.645],[0.894,1.439],[-1.397,-2.256]],"o":[[-4.322,3.304],[1.143,5.595],[-4.597,4.347],[-0.274,-0.137],[-0.127,-3.56],[1.527,-1.526],[-3.18,-1.778],[0,0],[6.23,-3.558],[-1.489,-5.627],[1.95,1.82],[5.595,9.026]],"v":[[7.537,-0.259],[7.41,12.328],[-4.16,26.186],[-1.936,30.319],[-9.628,27.586],[-6.322,20.083],[-6.448,11.436],[-13.062,2.284],[-1.745,5.333],[9.317,-20.22],[5.391,-30.327],[10.46,-24.161]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.909803981407,0.670588235294,0.262745098039,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[65.24,44.492],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":4,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[4.322,-3.307],[-1.145,-5.594],[4.703,-4.449],[-0.266,-0.174],[0.124,3.484],[-1.526,1.527],[3.177,1.78],[-0.761,5.084],[-1.65,7.629],[5.468,-1.907],[0,0],[0,0],[-9.663,2.926],[-5.854,-5.46],[-1.397,-2.256]],"o":[[-4.322,3.304],[1.143,5.595],[-4.597,4.347],[-0.274,-0.137],[-0.127,-3.56],[1.527,-1.526],[-3.18,-1.778],[0.765,-5.087],[1.654,-7.629],[-5.465,1.907],[0,0],[0,0],[7.251,-2.193],[1.95,1.82],[5.595,9.026]],"v":[[12.143,3.615],[12.016,16.201],[0.446,30.06],[2.67,34.192],[-5.022,31.459],[-1.716,23.957],[-1.842,15.31],[-8.456,6.157],[-0.446,-15.204],[-10.744,-26.137],[-14.004,-17.096],[-19.431,-20.33],[-10.998,-32.75],[9.997,-26.453],[15.066,-20.288]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.611764705882,0.290196078431,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[60.634,40.618],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":4,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.013,-0.184],[0.043,0.003],[0.284,0.012],[0.038,0.202],[0.025,0.085],[0.615,0.692],[-0.336,-0.343],[-0.337,-0.66],[-0.082,-0.209],[-0.079,-0.304],[0.003,-0.002]],"o":[[-0.042,0],[-0.286,-0.005],[-0.032,-0.207],[-0.017,-0.089],[-0.259,-0.893],[-0.314,-0.353],[0.525,0.536],[0.099,0.197],[0.098,0.252],[0.003,0.003],[0.05,0.185]],"v":[[1.397,2.076],[1.267,2.074],[0.411,2.05],[0.316,1.429],[0.254,1.165],[-1.083,-1.21],[-0.56,-1.734],[0.735,0.055],[1.008,0.665],[1.297,1.514],[1.297,1.519]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.909803981407,0.607843137255,0.407843167174,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[44.733,90.079],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":4,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.1,-0.237],[0.157,-1.046],[0.007,-0.054],[0.002,-0.002],[0.005,-0.192],[0.284,0.012],[0.075,0.005],[-0.042,0.192],[-0.01,0.045],[-0.159,0.396],[-0.366,0.635]],"o":[[-0.403,0.979],[-0.007,0.052],[0.002,0.003],[-0.017,0.177],[-0.286,-0.005],[-0.074,-0.003],[0.04,-0.212],[0.012,-0.047],[0.097,-0.43],[0.266,-0.669],[0.122,-0.214]],"v":[[0.913,-1.7],[0.12,1.364],[0.098,1.525],[0.098,1.529],[0.068,2.085],[-0.788,2.061],[-1.012,2.05],[-0.883,1.441],[-0.85,1.3],[-0.465,0.066],[0.507,-1.872]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.909803981407,0.607843137255,0.407843167174,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[45.932,90.068],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":4,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.009,-0.444],[-0.236,-0.793],[0.952,-0.247],[-0.562,0.157],[-0.113,0.816],[0.103,1.278]],"o":[[0.017,0.84],[0.213,0.72],[-0.563,0.146],[0.823,-0.228],[0.183,-1.316],[-0.035,-0.431]],"v":[[-0.57,-2.576],[-0.005,-0.223],[-0.618,1.992],[-0.379,2.863],[0.999,1.093],[0.112,-2.576]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.909803981407,0.607843137255,0.407843167174,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[47.472,44.629],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":4,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.476,-0.055],[-0.418,-0.275],[-0.408,-0.226],[0.119,0.427],[1.103,-0.003]],"o":[[0.499,0.058],[0.394,0.259],[0.376,0.209],[-0.344,-1.236],[-0.503,0.001]],"v":[[-1.408,-0.456],[-0.01,0.104],[1.059,1.013],[1.792,0.449],[-1.408,-1.218]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.909803981407,0.607843137255,0.407843167174,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[27.522,43.714],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":4,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.299,-0.308],[-0.367,-1.451],[0.194,0.747],[1.336,1.136]],"o":[[1.055,1.087],[0.188,0.745],[-0.446,-1.723],[-0.319,-0.271]],"v":[[-1.558,-2.008],[0.51,1.999],[1.663,1.681],[-1.093,-2.473]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.909803981407,0.607843137255,0.407843167174,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[28.224,43.355],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":4,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.268,0.13],[0.104,1.82],[2.268,-0.13],[-0.104,-1.821]],"o":[[2.268,-0.13],[-0.105,-1.821],[-2.268,0.131],[0.105,1.821]],"v":[[0.189,3.297],[4.107,-0.235],[-0.189,-3.297],[-4.107,0.236]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.690196078431,0.521568627451,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[36.594,47.28],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9","np":4,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.182,1.292],[-1.66,0.096],[1.481,-0.982]],"o":[[0.216,-1.531],[1.661,-0.095],[-1.481,0.982]],"v":[[-2.671,0.984],[1.119,-2.181],[1.372,-0.017]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784313725,0.270588235294,0.207843152214,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[36.653,32.678],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 10","np":4,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.078,-1.421],[-0.91,-0.05],[-0.077,1.421],[0.909,0.049]],"o":[[-0.078,1.421],[0.909,0.05],[0.078,-1.421],[-0.909,-0.05]],"v":[[-1.646,-0.09],[-0.14,2.572],[1.646,0.09],[0.141,-2.572]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784313725,0.270588235294,0.207843152214,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[38.543,39.414],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 11","np":4,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-5.272,1.469],[0.777,-0.915],[1.55,0.59],[0.197,0.44]],"o":[[0,0],[-3.937,1.19],[-0.334,-0.434],[0,0]],"v":[[5.679,-1.398],[4.41,0.331],[-4.872,-0.198],[-5.679,-1.521]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.980392216701,0.925490255917,0.89019613827,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[46.99,52.177],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 12","np":4,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-3.937,1.19],[1.379,-0.169],[1.341,1.74]],"o":[[-0.916,1.076],[-2.039,0.249],[1.55,0.59]],"v":[[4.641,-1.088],[1.031,1.368],[-4.641,-1.617]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.788235353956,0.388235324037,0.231372563979,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[46.759,53.596],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 13","np":4,"cix":2,"bm":0,"ix":13,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.015,-0.959],[-0.012,-0.294],[6.315,-1.663],[-0.078,1.471],[0.05,1.235],[-4.988,3.443],[0,0]],"o":[[0.005,0.291],[-1.364,0.973],[0.344,-1.141],[0.077,-1.469],[0.593,0.431],[0,0],[-0.032,0.825]],"v":[[5.402,-1.224],[5.429,-0.345],[-5.437,4.127],[-4.841,0.071],[-4.839,-4.127],[5.437,-3.955],[5.437,-3.941]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.768627510819,0.611764705882,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[46.021,66.379],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 14","np":4,"cix":2,"bm":0,"ix":14,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.084,-1.543],[-0.987,-0.054],[-0.084,1.542],[0.987,0.054]],"o":[[-0.084,1.543],[0.988,0.054],[0.084,-1.543],[-0.988,-0.054]],"v":[[-1.788,-0.098],[-0.153,2.794],[1.788,0.099],[0.153,-2.793]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784313725,0.270588235294,0.207843152214,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[53.884,39.928],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 15","np":4,"cix":2,"bm":0,"ix":15,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.03,-0.164],[0.047,-0.313],[0.092,-4.721],[3.832,0],[0.261,0.005],[-3.782,1.17],[0.115,2.669],[0.01,0.137],[0,0]],"o":[[-0.032,0.149],[-0.052,0.276],[-0.528,3.568],[-3.553,0.899],[-0.262,0],[1.03,-0.956],[4.49,-1.389],[-0.01,-0.232],[-0.01,-0.16],[0,0]],"v":[[6.487,-8.138],[6.395,-7.67],[6.248,-6.784],[5.404,7.272],[-5.703,8.646],[-6.487,8.639],[0.638,4.705],[5.008,-7.844],[4.978,-8.399],[4.961,-8.646]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.392156892664,0.537254901961,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[52.685,83.52],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 16","np":4,"cix":2,"bm":0,"ix":16,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.134,-0.217],[-0.653,-2.9],[-0.921,-1.059],[-1.353,-0.662],[-0.639,-2.947],[0.45,-1.417],[0.658,-1.366],[-0.869,0.403],[0.174,2.861],[2.308,1.868],[1.731,2.902],[-1.744,2.935]],"o":[[-1.561,2.516],[0.307,1.36],[1.011,1.161],[2.657,1.3],[0.317,1.46],[-0.464,1.462],[-0.423,0.879],[2.781,-1.289],[-0.18,-2.971],[-2.473,-2.001],[-1.766,-2.963],[0.13,-0.221]],"v":[[-5.036,-15.452],[-6.513,-7.015],[-4.705,-3.256],[-0.939,-0.81],[4.305,5.524],[4.041,9.939],[1.951,13.972],[3.244,15.266],[6.992,7.142],[3.02,-0.481],[-4.784,-5.496],[-4.693,-15.251]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.929411824544,0.56862745098,0.270588235294,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[76.647,55.149],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 17","np":4,"cix":2,"bm":0,"ix":17,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[2.008,1.333],[-0.738,1.169],[-1.082,-2.03]],"o":[[-2.008,-1.333],[0.737,-1.169],[1.083,2.031]],"v":[[0.72,1.92],[-2.407,-2.084],[2.062,0.072]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.360784313725,0.270588235294,0.207843152214,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[55.634,32.628],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 18","np":4,"cix":2,"bm":0,"ix":18,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-4.31,-2.462],[-1.06,-0.837],[3.815,1.268],[0.152,1.327],[0,0],[0,0],[-0.015,-0.092]],"o":[[2.926,1.671],[-4.19,-0.205],[-0.47,-5.268],[-0.02,-0.167],[0,0],[0.013,0.083],[0.433,2.72]],"v":[[0.673,3.969],[6.702,7.983],[-5.344,5.734],[-6.673,-7.091],[-6.702,-7.348],[-5.558,-7.983],[-5.518,-7.724]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.392156892664,0.537254901961,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[38.03,84.128],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 19","np":4,"cix":2,"bm":0,"ix":19,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.288,-4.116],[4.564,-1.151],[3.832,0],[0.261,0.005],[0.022,0.003],[0.042,0.003],[0.284,0.012],[0.075,0.005],[0.062,0.003],[3.814,1.267],[3.24,2.127],[-3.446,1.927],[-0.381,0.204],[-0.916,1.188],[-0.191,0.635],[-0.078,1.472],[0.05,1.233],[0,0],[0.005,0.122],[0,0],[0,0],[0.07,-1.603],[0.002,-0.112],[0,0],[-0.015,-0.958],[-0.012,-0.294],[-0.909,-1.178],[-1.877,-0.976],[-0.319,-0.167],[-0.488,-0.254],[-0.286,-0.154]],"o":[[-3.894,2.42],[-3.553,0.898],[-0.261,0],[-0.023,0],[-0.043,0],[-0.286,-0.005],[-0.074,-0.003],[-0.062,-0.003],[-4.191,-0.204],[-3.745,-1.245],[2.107,-3.346],[0.388,-0.216],[3.396,-1.818],[0.306,-0.396],[0.344,-1.14],[0.077,-1.464],[0,0],[-0.005,-0.127],[-0.072,-1.489],[0,0],[0,0],[-0.005,0.107],[0,0],[-0.032,0.824],[0.005,0.292],[0.095,2.428],[0.591,0.764],[0.299,0.157],[0.455,0.231],[0.279,0.145],[4.016,2.137]],"v":[[24.33,9.612],[11.584,15.028],[0.477,16.402],[-0.307,16.395],[-0.374,16.392],[-0.504,16.389],[-1.361,16.365],[-1.585,16.355],[-1.771,16.347],[-13.817,14.099],[-24.33,9.004],[-15.147,1.273],[-13.992,0.641],[-6.659,-3.687],[-5.92,-5.258],[-5.324,-9.314],[-5.322,-13.497],[-5.322,-13.512],[-5.337,-13.885],[-5.514,-16.402],[5.153,-16.402],[4.966,-13.669],[4.954,-13.34],[4.954,-13.325],[4.919,-10.609],[4.946,-9.73],[6.298,-3.687],[10.232,-1.125],[11.159,-0.644],[12.575,0.085],[13.427,0.533]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.768627510819,0.611764705882,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[46.505,75.764],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 20","np":4,"cix":2,"bm":0,"ix":20,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.58,-1.22],[0,0],[2.293,-1.422],[1.006,-0.526],[0,0],[0,0],[0.381,3.242],[1.337,4.579],[-2.099,4.576],[-0.281,1.819],[-0.695,0.201],[-6.232,-3.431],[-1.046,-0.679],[-0.055,-0.027],[-3.14,1.497],[-0.219,0.114],[-2.039,3.279],[-0.187,0.324],[-0.257,0.481],[-0.648,-0.353],[2.669,-3.626],[-3.814,-1.335]],"o":[[0,0],[-1.994,1.8],[-0.961,0.597],[0,0],[0,0],[0,0],[-0.381,-3.241],[-1.335,-4.577],[0.669,-1.464],[0.727,0.171],[0,0],[0.175,0.095],[0.336,0.219],[3.224,1.599],[0.219,-0.102],[2.273,-1.201],[0.189,-0.301],[0.276,-0.48],[1.945,-0.361],[2.096,1.146],[-2.672,3.623],[3.1,1.082]],"v":[[26.822,12.91],[26.822,12.913],[20.378,17.758],[17.425,19.444],[13.103,15.266],[-24.659,14.312],[-19.129,5.348],[-26.377,-2.853],[-23.705,-14.294],[-22.316,-19.413],[-20.147,-19.443],[-12.454,-7.43],[-9.274,-5.351],[-8.639,-4.95],[1.002,-5.194],[1.659,-5.522],[8.143,-12.006],[8.081,-13.087],[8.88,-14.531],[13.103,-14.678],[19.206,-1.135],[21.302,7.256]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.780392216701,0.576470588235,0.223529426724,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[50.457,67.619],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 21","np":4,"cix":2,"bm":0,"ix":21,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.695,-1.218],[0.453,-0.403],[0.002,-0.003],[2.293,-1.421],[1.006,-0.525],[3.439,-0.867],[3.832,0],[0.261,0.005],[0.485,0.022],[3.814,1.268],[3.24,2.126],[2.296,2.355],[-2.721,1.713],[3.05,4.068],[-3.942,4.577],[1.526,5.594],[-8.52,4.577],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.172,-1.078],[3.601,6.065],[0,0],[0.017,0.018],[2.737,0.824],[1.287,-0.685],[0,0],[1.019,-3.814],[-2.47,-0.57],[-0.695,0.202],[-6.233,-3.431],[-1.046,-0.68],[-0.055,-0.028],[-3.14,1.496],[-0.219,0.114],[-2.039,3.279],[-0.187,0.323],[-0.256,0.48],[0,0],[0,0],[0,0],[0.13,-0.496],[0.443,-2.741],[-4.126,-0.675],[-0.212,-0.054],[1.845,-2.462],[-3.18,-2.796]],"o":[[-0.436,0.426],[0,0],[-1.995,1.8],[-0.961,0.598],[-3.075,1.604],[-3.553,0.899],[-0.262,0],[-0.491,-0.008],[-4.191,-0.204],[-3.745,-1.244],[-2.761,-1.812],[0.782,-2.074],[3.434,-2.161],[-3.052,-4.068],[3.941,-4.576],[-1.527,-5.595],[8.518,-4.579],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.578,3.65],[-6.865,-11.57],[0,0],[-0.287,-0.251],[-1.396,-0.421],[-8.137,4.322],[0,0],[-0.784,2.944],[0.727,0.172],[0,0],[0.174,0.094],[0.336,0.219],[3.225,1.598],[0.219,-0.102],[2.274,-1.2],[0.189,-0.301],[0.276,-0.481],[4.669,-8.79],[0,0],[0,0],[0,0],[-0.316,1.185],[-0.901,5.592],[0.224,0.037],[6.361,1.519],[-1.907,2.543],[1.792,1.576]],"v":[[32.375,28.373],[31.043,29.62],[31.043,29.623],[24.599,34.468],[21.646,36.154],[11.853,39.885],[0.745,41.258],[-0.038,41.252],[-1.503,41.205],[-13.549,38.955],[-24.061,33.861],[-31.671,27.588],[-25.844,23.205],[-29.402,14.05],[-25.714,0.445],[-26.859,-14.303],[-17.577,-36.679],[-4.738,-37.062],[-4.145,-36.529],[-3.934,-36.34],[9.883,-40.239],[16.077,-35.363],[19.141,-32.952],[20.057,-32.23],[19.811,-30.393],[13.952,-25.493],[0.477,-27.399],[0.45,-27.424],[-5.036,-30.631],[-9.187,-30.45],[-17.451,-11.252],[-22.029,-8.709],[-18.096,-2.702],[-15.926,-2.732],[-8.232,9.282],[-5.053,11.36],[-4.419,11.761],[5.223,11.518],[5.88,11.188],[12.364,4.705],[12.301,3.624],[13.101,2.18],[18.911,-15.067],[23.367,-16.825],[23.743,-16.975],[23.531,-16.197],[22.174,-9.859],[25.142,3.37],[25.797,3.505],[30.609,15.067],[28.702,23.839]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.929411824544,0.56862745098,0.270588235294,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[46.236,50.907],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 22","np":4,"cix":2,"bm":0,"ix":22,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-1.526,5.086],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[1.526,-5.086],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-13.731,20.47],[-19.325,11.316],[-23.394,-6.993],[-4.005,-26.573],[19.326,-25.81],[24.92,-4.45],[12.715,20.979],[-1.017,26.573]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.768627510819,0.611764705882,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[45.44,41.435],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 23","np":4,"cix":2,"bm":0,"ix":23,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-24.998],[8.414,-8.22],[0.454,-0.403],[0,0],[2.294,-1.422],[1.006,-0.526],[3.438,-0.866],[3.832,0],[0.261,0.004],[0.486,0.023],[3.814,1.267],[3.239,2.126],[2.295,2.356],[0,12.29],[-24.998,0]],"o":[[0,12.689],[-0.435,0.425],[0,0],[-1.994,1.8],[-0.961,0.597],[-3.075,1.603],[-3.553,0.899],[-0.261,0],[-0.49,-0.008],[-4.19,-0.204],[-3.745,-1.245],[-2.762,-1.813],[-7.951,-8.157],[0,-24.998],[24.999,-0.001]],"v":[[45.264,0],[31.628,32.379],[30.296,33.626],[30.296,33.629],[23.852,38.474],[20.899,40.16],[11.108,43.889],[-0.001,45.264],[-0.785,45.257],[-2.249,45.209],[-14.294,42.961],[-24.807,37.867],[-32.415,31.592],[-45.264,0],[-0.001,-45.263]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.039215686275,0.145098039216,0.250980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[46.981,46.902],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 24","np":4,"cix":2,"bm":0,"ix":24,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":210.000008553475,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Layer 2 Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[516.573,560.758,0],"to":[-39.167,-2,0],"ti":[4.667,37.167,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19,"s":[446.573,500.758,0],"to":[-2.707,-21.561,0],"ti":[-45.196,1.417,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":38,"s":[506.573,430.758,0],"to":[33.206,-1.041,0],"ti":[-1.148,-40.228,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":57,"s":[576.573,490.758,0],"to":[0.822,28.822,0],"ti":[37.5,-4.667,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":76,"s":[516.573,560.758,0],"to":[-15.248,1.898,0],"ti":[4.667,37.167,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":93,"s":[446.573,500.758,0],"to":[-2.707,-21.561,0],"ti":[-45.196,1.417,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":112,"s":[506.573,430.758,0],"to":[33.206,-1.041,0],"ti":[-1.148,-40.228,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":131,"s":[576.573,490.758,0],"to":[0.822,28.822,0],"ti":[37.5,-4.667,0]},{"t":150.000006109625,"s":[516.573,560.758,0]}],"ix":2},"a":{"a":0,"k":[221.985,221.986,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[5.755,-5.754],[-5.754,-5.754],[0,0],[-5.754,5.754],[5.755,5.755]],"o":[[-5.754,-5.754],[-5.754,5.754],[0,0],[5.754,5.754],[5.754,-5.754],[0,0]],"v":[[-28.872,-49.71],[-49.71,-49.71],[-49.71,-28.873],[28.872,49.71],[49.709,49.71],[49.709,28.872]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.81568627451,0.266666666667,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[388.256,388.257],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[105.789,0],[0,-105.788],[-105.789,0],[0,105.789]],"o":[[-105.789,0],[0,105.789],[105.789,0],[0,-105.788]],"v":[[0,-191.547],[-191.547,0],[0,191.547],[191.547,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,89.514],[-89.513,0],[0,-89.513],[89.513,0]],"o":[[0,-89.513],[89.513,0],[0,89.514],[-89.513,0]],"v":[[-162.078,0],[0,-162.078],[162.078,0],[0,162.078]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 2","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.81568627451,0.266666666667,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[191.797,191.797],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":5,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-35.727,5.659],[1.273,8.037],[8.037,-1.273],[7.655,-48.337],[-8.038,-1.273],[-1.273,8.038]],"o":[[8.037,-1.273],[-1.273,-8.037],[-48.336,7.656],[-1.273,8.037],[8.037,1.273],[5.658,-35.726]],"v":[[43.132,-26.274],[55.379,-43.132],[38.521,-55.379],[-55.38,38.522],[-43.132,55.379],[-26.273,43.132]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":4,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.039215686275,0.145098039216,0.250980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[191.458,191.458],"ix":2},"a":{"a":0,"k":[75.5,75.5],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":150.000006109625,"s":[720]}],"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":3,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":210.000008553475,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/samples/playground-app-shared/src/commonMain/composeResources/font/quasimoda-black.ttf b/samples/playground-app-shared/src/commonMain/composeResources/font/quasimoda-black.ttf new file mode 100755 index 00000000..c5ca2e9d Binary files /dev/null and b/samples/playground-app-shared/src/commonMain/composeResources/font/quasimoda-black.ttf differ diff --git a/samples/playground-app-shared/src/commonMain/composeResources/font/quasimoda-bold.ttf b/samples/playground-app-shared/src/commonMain/composeResources/font/quasimoda-bold.ttf new file mode 100755 index 00000000..23541827 Binary files /dev/null and b/samples/playground-app-shared/src/commonMain/composeResources/font/quasimoda-bold.ttf differ diff --git a/samples/playground-app-shared/src/commonMain/composeResources/font/quasimoda-light.ttf b/samples/playground-app-shared/src/commonMain/composeResources/font/quasimoda-light.ttf new file mode 100755 index 00000000..901b0b3e Binary files /dev/null and b/samples/playground-app-shared/src/commonMain/composeResources/font/quasimoda-light.ttf differ diff --git a/samples/playground-app-shared/src/commonMain/composeResources/font/quasimoda-medium.ttf b/samples/playground-app-shared/src/commonMain/composeResources/font/quasimoda-medium.ttf new file mode 100755 index 00000000..e21d7e09 Binary files /dev/null and b/samples/playground-app-shared/src/commonMain/composeResources/font/quasimoda-medium.ttf differ diff --git a/samples/playground-app-shared/src/commonMain/composeResources/font/quasimoda-regular.ttf b/samples/playground-app-shared/src/commonMain/composeResources/font/quasimoda-regular.ttf new file mode 100755 index 00000000..5394b8ea Binary files /dev/null and b/samples/playground-app-shared/src/commonMain/composeResources/font/quasimoda-regular.ttf differ diff --git a/samples/playground-app-shared/src/commonMain/composeResources/font/quasimoda-semibold.ttf b/samples/playground-app-shared/src/commonMain/composeResources/font/quasimoda-semibold.ttf new file mode 100755 index 00000000..2bd32f26 Binary files /dev/null and b/samples/playground-app-shared/src/commonMain/composeResources/font/quasimoda-semibold.ttf differ diff --git a/samples/playground-app-shared/src/commonMain/composeResources/font/quasimoda-thin.ttf b/samples/playground-app-shared/src/commonMain/composeResources/font/quasimoda-thin.ttf new file mode 100755 index 00000000..67ee2c93 Binary files /dev/null and b/samples/playground-app-shared/src/commonMain/composeResources/font/quasimoda-thin.ttf differ diff --git a/samples/playground-app-shared/src/commonMain/composeResources/values-ar/plurals.xml b/samples/playground-app-shared/src/commonMain/composeResources/values-ar/plurals.xml new file mode 100644 index 00000000..e0a0dee8 --- /dev/null +++ b/samples/playground-app-shared/src/commonMain/composeResources/values-ar/plurals.xml @@ -0,0 +1,12 @@ + + + + %1$d لغة + %1$d لغات + + + + لغتي + لغاتي + + diff --git a/samples/playground-app-shared/src/commonMain/composeResources/values-ar/strings.xml b/samples/playground-app-shared/src/commonMain/composeResources/values-ar/strings.xml new file mode 100644 index 00000000..bd2632b9 --- /dev/null +++ b/samples/playground-app-shared/src/commonMain/composeResources/values-ar/strings.xml @@ -0,0 +1,8 @@ + + + أطلسي + مرحبًا بالعالم! + مرحبًا %1$s + مرحبًا %1$s من %2$s إلى %3$s + تغيير اللغة + \ No newline at end of file diff --git a/samples/playground-app-shared/src/commonMain/composeResources/values/plurals.xml b/samples/playground-app-shared/src/commonMain/composeResources/values/plurals.xml new file mode 100644 index 00000000..e911b6a6 --- /dev/null +++ b/samples/playground-app-shared/src/commonMain/composeResources/values/plurals.xml @@ -0,0 +1,12 @@ + + + + %1$d Language + %1$d Languages + + + + My Language + My Languages + + diff --git a/samples/playground-app-shared/src/commonMain/composeResources/values/strings.xml b/samples/playground-app-shared/src/commonMain/composeResources/values/strings.xml new file mode 100644 index 00000000..cd243621 --- /dev/null +++ b/samples/playground-app-shared/src/commonMain/composeResources/values/strings.xml @@ -0,0 +1,8 @@ + + + MyAtlas + Hello World! + Hello %1$s + Hello %1$s from %2$s to %3$s + Toggle language + \ No newline at end of file diff --git a/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/constants/AppConstants.kt b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/constants/AppConstants.kt new file mode 100644 index 00000000..f15aa56f --- /dev/null +++ b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/constants/AppConstants.kt @@ -0,0 +1,5 @@ +package com.metacto.playground.constants + +object AppConstants { + const val CONFIG_ENABLE_ENHANCED_CRASHLYTICS = "ENABLE_ENHANCED_CRASHLYTICS" +} \ No newline at end of file diff --git a/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/constants/AppEnvironment.kt b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/constants/AppEnvironment.kt new file mode 100644 index 00000000..97cdb27e --- /dev/null +++ b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/constants/AppEnvironment.kt @@ -0,0 +1,34 @@ +package com.metacto.playground.constants + +import com.metacto.core.CoreConfigs +import com.metacto.core.ui.CoreUIConfigs +import com.metacto.kmm.logger.LogLevel +import kotlin.time.Duration.Companion.days +import kotlin.time.Duration.Companion.hours + +sealed class AppEnvironment( + val coreConfigs: CoreConfigs, + val coreUIConfigs: CoreUIConfigs = CoreUIConfigs( + enableSwipeToGoBack = true + ) +) { + data object Dev : AppEnvironment( + coreConfigs = CoreConfigs( + baseUrl = "https://dev-api.satyadating.com/api", + storageName = "CatalogAppDev", + logLevel = LogLevel.ALL, + shouldShowActualErrorMessages = true, + appConfigurationExpirationInMinutes = 1.hours.inWholeMinutes, + ), + ) + + data object Prod : AppEnvironment( + coreConfigs = CoreConfigs( + baseUrl = "https://api.satyadating.com/api", + storageName = "CatalogAppProd", + logLevel = LogLevel.NONE, + shouldShowActualErrorMessages = false, + appConfigurationExpirationInMinutes = 1.days.inWholeMinutes, + ) + ) +} \ No newline at end of file diff --git a/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/di/AppModule.kt b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/di/AppModule.kt new file mode 100644 index 00000000..a22a758c --- /dev/null +++ b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/di/AppModule.kt @@ -0,0 +1,16 @@ +package com.metacto.playground.di + +import com.metacto.core.ui.globalState.ICoreGlobalState +import com.metacto.playground.presentation.app.globalState.AppGlobalState +import com.metacto.playground.presentation.app.globalState.IAppGlobalState +import org.koin.dsl.module + +val appModule = module { + single { + AppGlobalState() + } + + single { + get() + } +} \ No newline at end of file diff --git a/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/di/DomainModule.kt b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/di/DomainModule.kt new file mode 100644 index 00000000..9707c3d0 --- /dev/null +++ b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/di/DomainModule.kt @@ -0,0 +1,6 @@ +package com.metacto.playground.di + +import org.koin.dsl.module + +val domainModule = module { +} \ No newline at end of file diff --git a/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/di/Koin.kt b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/di/Koin.kt new file mode 100644 index 00000000..9f757afd --- /dev/null +++ b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/di/Koin.kt @@ -0,0 +1,30 @@ +package com.metacto.playground.di + +import com.metacto.core.di.coreModule +import com.metacto.core.ui.di.coreUIModule +import com.metacto.kmm.network.errorhandling.NetworkError +import com.metacto.playground.constants.AppEnvironment +import org.koin.core.context.startKoin +import org.koin.dsl.KoinAppDeclaration + +fun initKoin( + environment: AppEnvironment +) = initKoin( + environment = environment, + appDeclaration = {} +) + +fun initKoin( + environment: AppEnvironment, + appDeclaration: KoinAppDeclaration = {} +) = startKoin { + appDeclaration() + modules( + appModule, + platformModule, + viewModelsModule, + domainModule, + coreModule(environment.coreConfigs, NetworkError::class), + coreUIModule(environment.coreUIConfigs) + ) +} \ No newline at end of file diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/di/PlatformModule.kt b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/di/PlatformModule.kt similarity index 67% rename from sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/di/PlatformModule.kt rename to samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/di/PlatformModule.kt index 8e50aa9a..b19ad4b0 100644 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/di/PlatformModule.kt +++ b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/di/PlatformModule.kt @@ -1,4 +1,4 @@ -package com.sampleApp.app.di +package com.metacto.playground.di import org.koin.core.module.Module diff --git a/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/di/ViewModelsModule.kt b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/di/ViewModelsModule.kt new file mode 100644 index 00000000..61c1df0b --- /dev/null +++ b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/di/ViewModelsModule.kt @@ -0,0 +1,13 @@ +package com.metacto.playground.di + +// MARK: Add imports +import com.metacto.core.ui.di.commonViewModel +import com.metacto.playground.presentation.app.app.AppViewModel +import com.metacto.playground.presentation.main.MainViewModel +import org.koin.dsl.module + +val viewModelsModule = module { + // MARK: Add view model definitions + commonViewModel { MainViewModel() } + single { AppViewModel() } +} diff --git a/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/app/app/AppContent.kt b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/app/app/AppContent.kt new file mode 100644 index 00000000..d4784c82 --- /dev/null +++ b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/app/app/AppContent.kt @@ -0,0 +1,25 @@ +package com.metacto.playground.presentation.app.app + +import androidx.compose.runtime.Composable +import com.metacto.core.ui.app.CoreAppContent +import com.metacto.core.ui.navigation.NavManager +import com.metacto.playground.presentation.app.globalState.IAppGlobalState +import com.metacto.playground.presentation.main.MainScreen +import com.metacto.playground.presentation.theme.AppThemeContent +import org.koin.compose.koinInject + +@Composable +internal fun AppContent() { + // Get main objects + val globalState = koinInject() + val navManager = koinInject() + + // Render core app content + AppThemeContent { + CoreAppContent( + globalState = globalState, + navManager = navManager, + startScreen = MainScreen() + ) + } +} diff --git a/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/app/app/AppContract.kt b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/app/app/AppContract.kt new file mode 100644 index 00000000..79689304 --- /dev/null +++ b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/app/app/AppContract.kt @@ -0,0 +1,15 @@ +package com.metacto.playground.presentation.app.app + +import com.metacto.core.ui.base.ViewEvent +import com.metacto.core.ui.base.ViewSideEffect +import com.metacto.core.ui.base.ViewState + +class AppContract { + object State : ViewState + + sealed class Event : ViewEvent { + data object Init : Event() + } + + sealed class Effect : ViewSideEffect +} diff --git a/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/app/app/AppViewModel.kt b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/app/app/AppViewModel.kt new file mode 100644 index 00000000..d6e7cd26 --- /dev/null +++ b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/app/app/AppViewModel.kt @@ -0,0 +1,29 @@ +package com.metacto.playground.presentation.app.app + +import com.metacto.core.deepLink.IDeepLinkManager +import org.koin.core.component.inject +import com.metacto.playground.presentation.app.app.AppContract.State +import com.metacto.playground.presentation.app.app.AppContract.Event +import com.metacto.playground.presentation.app.app.AppContract.Effect +import com.metacto.playground.presentation.base.BaseViewModel + +class AppViewModel : BaseViewModel() { + private val deepLinksManager by inject() + + init { + handleDeepLinks() + } + + override fun setInitialState() = State + + override fun handleEvents(event: Event): Any = when(event) { + Event.Init -> { + } + } + + private fun handleDeepLinks() = executeSilent({ + deepLinksManager.observeDeepLinks { + showError("Received deep link: $it") + } + }) +} diff --git a/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/app/globalState/AppGlobalState.kt b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/app/globalState/AppGlobalState.kt new file mode 100644 index 00000000..9ac04110 --- /dev/null +++ b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/app/globalState/AppGlobalState.kt @@ -0,0 +1,5 @@ +package com.metacto.playground.presentation.app.globalState + +import com.metacto.core.ui.globalState.CoreGlobalState + +class AppGlobalState : CoreGlobalState(), IAppGlobalState \ No newline at end of file diff --git a/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/app/globalState/IAppGlobalState.kt b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/app/globalState/IAppGlobalState.kt new file mode 100644 index 00000000..99ac2d3c --- /dev/null +++ b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/app/globalState/IAppGlobalState.kt @@ -0,0 +1,5 @@ +package com.metacto.playground.presentation.app.globalState + +import com.metacto.core.ui.globalState.ICoreGlobalState + +interface IAppGlobalState : ICoreGlobalState \ No newline at end of file diff --git a/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/base/BaseViewModel.kt b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/base/BaseViewModel.kt new file mode 100644 index 00000000..f984d083 --- /dev/null +++ b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/base/BaseViewModel.kt @@ -0,0 +1,20 @@ +package com.metacto.playground.presentation.base + +import com.metacto.core.ui.base.CoreViewModel +import com.metacto.core.ui.base.ErrorType +import com.metacto.core.ui.base.ViewEvent +import com.metacto.core.ui.base.ViewSideEffect +import com.metacto.core.ui.base.ViewState +import com.metacto.core.ui.globalState.models.LoadingType +import com.metacto.playground.presentation.app.globalState.IAppGlobalState +import org.koin.core.component.inject + +abstract class BaseViewModel : + CoreViewModel() { + + protected val globalState by inject() + + override val defaultLoadingType: LoadingType = LoadingType.SecondaryCircularBlocking + + override val defaultErrorType: ErrorType = ErrorType.SnackBar +} \ No newline at end of file diff --git a/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/components/containers/AppScreenColumn.kt b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/components/containers/AppScreenColumn.kt new file mode 100644 index 00000000..1efacf7e --- /dev/null +++ b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/components/containers/AppScreenColumn.kt @@ -0,0 +1,85 @@ +package com.metacto.playground.presentation.components.containers + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.imePadding +import androidx.compose.foundation.layout.navigationBarsPadding +import androidx.compose.foundation.layout.statusBarsPadding +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.alpha +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.unit.Dp +import com.metacto.core.ui.components.containers.ScreenColumn +import com.metacto.core.ui.components.toolbar.Toolbar +import com.metacto.core.ui.extensions.modifyIf +import com.metacto.playground.presentation.theme.colors +import com.metacto.playground.presentation.theme.spacings + +@Composable +internal fun AppScreenColumn( + modifier: Modifier = Modifier, + bgColor: Color = colors.background, + verticalArrangement: Arrangement.Vertical = Arrangement.Top, + horizontalAlignment: Alignment.Horizontal = Alignment.Start, + topPadding: Dp = spacings.spacing0, + bottomPadding: Dp = spacings.spacing0, + startPadding: Dp = spacings.spacing16, + endPadding: Dp = spacings.spacing16, + enableSafeInsets: Boolean = true, + enableImeInsets: Boolean = false, + isScrollable: Boolean = false, + onScroll: (() -> Unit)? = null, + isRefreshable: Boolean = false, + isRefreshing: Boolean = false, + onRefresh: (() -> Unit)? = null, + showToolbar: Boolean = false, + showBack: Boolean = false, + onBackClick: (() -> Unit)? = null, + title: String? = null, + contentAlpha: Float = 1f, + content: @Composable ColumnScope.() -> Unit, +) { + // Render screen column + ScreenColumn( + modifier = modifier + .fillMaxSize() + .background(bgColor) + .alpha(contentAlpha) + .modifyIf(enableImeInsets) { + imePadding() + } + .modifyIf(enableSafeInsets) { + statusBarsPadding().navigationBarsPadding() + }, + verticalArrangement = verticalArrangement, + horizontalAlignment = horizontalAlignment, + topPadding = topPadding, + bottomPadding = bottomPadding, + startPadding = startPadding, + endPadding = endPadding, + enableSafeInsets = false, + isScrollable = isScrollable, + onScroll = onScroll, + isRefreshable = isRefreshable, + isRefreshing = isRefreshing, + onRefresh = onRefresh, + mainContent = content, + toolbar = { + if (showToolbar) { + Toolbar( + title = title, + modifier = Modifier.fillMaxWidth(), + showStartIcon = showBack, + onStartIconClick = { + onBackClick?.invoke() + } + ) + } + } + ) +} \ No newline at end of file diff --git a/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/main/MainContract.kt b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/main/MainContract.kt new file mode 100644 index 00000000..4781dfae --- /dev/null +++ b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/main/MainContract.kt @@ -0,0 +1,17 @@ +package com.metacto.playground.presentation.main + +import com.metacto.core.ui.base.ViewEvent +import com.metacto.core.ui.base.ViewSideEffect +import com.metacto.core.ui.base.ViewState + +class MainContract { + data class State( + val isInitialized: Boolean = false + ) : ViewState + + sealed class Event : ViewEvent { + data object Init : Event() + } + + sealed class Effect : ViewSideEffect +} diff --git a/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/main/MainScreen.kt b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/main/MainScreen.kt new file mode 100644 index 00000000..f550f9be --- /dev/null +++ b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/main/MainScreen.kt @@ -0,0 +1,28 @@ +package com.metacto.playground.presentation.main + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import com.metacto.core.ui.base.CoreScreen +import com.metacto.core.ui.base.rememberViewModel +import com.metacto.playground.presentation.main.MainContract.Event +import com.metacto.playground.presentation.main.components.MainContent + +internal class MainScreen : CoreScreen() { + + @Composable + override fun Content() { + // Get the view model + val viewModel = rememberViewModel() + + // Init view model + LaunchedEffect(Unit) { + viewModel.setEvent(Event.Init) + } + + // Render content + MainContent( + state = viewModel.viewState.value, + onEvent = viewModel::setEvent + ) + } +} \ No newline at end of file diff --git a/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/main/MainViewModel.kt b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/main/MainViewModel.kt new file mode 100644 index 00000000..1520d52f --- /dev/null +++ b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/main/MainViewModel.kt @@ -0,0 +1,25 @@ +package com.metacto.playground.presentation.main + +import com.metacto.playground.presentation.base.BaseViewModel +import com.metacto.playground.presentation.main.MainContract.State +import com.metacto.playground.presentation.main.MainContract.Event +import com.metacto.playground.presentation.main.MainContract.Effect + +class MainViewModel : BaseViewModel() { + + override fun setInitialState() = State() + + override fun handleEvents(event: Event): Any = when (event) { + Event.Init -> init() + } + + private fun init() { + // Validate if already initialized + if (currentState.isInitialized) return + + // Init + + // Update the flag + setState { copy(isInitialized = true) } + } +} diff --git a/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/main/components/MainContent.kt b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/main/components/MainContent.kt new file mode 100644 index 00000000..9addd522 --- /dev/null +++ b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/main/components/MainContent.kt @@ -0,0 +1,33 @@ +package com.metacto.playground.presentation.main.components + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import com.metacto.core.ui.components.containers.ScreenColumn +import com.metacto.core.ui.navigation.NavManager +import com.metacto.playground.presentation.main.MainContract.Event +import com.metacto.playground.presentation.main.MainContract.State +import org.koin.compose.koinInject + +@Composable +internal fun MainContent( + state: State, + onEvent: (Event) -> Unit +) { + // Di + val navManage = koinInject() + + ScreenColumn( + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally, + isScrollable = true, + modifier = Modifier.fillMaxSize() + ) { + Text( + text = "Playground app" + ) + } +} \ No newline at end of file diff --git a/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/theme/Colors.kt b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/theme/Colors.kt new file mode 100644 index 00000000..19dc22a0 --- /dev/null +++ b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/theme/Colors.kt @@ -0,0 +1,47 @@ +package com.metacto.playground.presentation.theme + +import androidx.compose.runtime.Immutable +import androidx.compose.runtime.staticCompositionLocalOf +import androidx.compose.ui.graphics.Color + +@Immutable +internal data class AppColors( + val transparent: Color = Color(0x00FFFFFF), + + val white: Color = Color(0xFFFFFFFF), + val white10: Color = white.copy(alpha = 0.1f), + val white20: Color = white.copy(alpha = 0.2f), + val white30: Color = white.copy(alpha = 0.3f), + val white40: Color = white.copy(alpha = 0.4f), + val white50: Color = white.copy(alpha = 0.5f), + val white60: Color = white.copy(alpha = 0.6f), + val white70: Color = white.copy(alpha = 0.7f), + val white80: Color = white.copy(alpha = 0.8f), + val white90: Color = white.copy(alpha = 0.9f), + + val black: Color = Color(0xFF000000), + val black10: Color = black.copy(alpha = 0.1f), + val black20: Color = black.copy(alpha = 0.2f), + val black30: Color = black.copy(alpha = 0.3f), + val black40: Color = black.copy(alpha = 0.4f), + val black50: Color = black.copy(alpha = 0.5f), + val black60: Color = black.copy(alpha = 0.6f), + val black70: Color = black.copy(alpha = 0.7f), + val black80: Color = black.copy(alpha = 0.8f), + val black90: Color = black.copy(alpha = 0.9f), + + val gray: Color = Color(0xFF909090), + val darkGray: Color = Color(0xFF1F1F1F), + + val nectarine: Color = Color(0xFFF1C3A9), + val nectarineDark: Color = Color(0xFFED9E72), + val miniPeach: Color = Color(0xFFFAF4F0), + val terra: Color = Color(0xFFC55415), + val midnight: Color = Color(0xFF271E41), + val lavender: Color = Color(0xFFD5D8FC), + val lilac: Color = Color(0xFFF5F6FF), + val background: Color = miniPeach, + val coalLight: Color = Color(0xFFC8C8C8), +) + +internal val LocalAppColors = staticCompositionLocalOf { AppColors() } diff --git a/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/theme/Shapes.kt b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/theme/Shapes.kt new file mode 100644 index 00000000..2085df67 --- /dev/null +++ b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/theme/Shapes.kt @@ -0,0 +1,27 @@ +package com.metacto.playground.presentation.theme + +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.runtime.Immutable +import androidx.compose.runtime.staticCompositionLocalOf +import androidx.compose.ui.unit.dp + +@Immutable +internal data class AppShapes( + val roundedCorner2: RoundedCornerShape = RoundedCornerShape(2.dp), + val roundedCorner4: RoundedCornerShape = RoundedCornerShape(4.dp), + val roundedCorner6: RoundedCornerShape = RoundedCornerShape(6.dp), + val roundedCorner8: RoundedCornerShape = RoundedCornerShape(8.dp), + val roundedCorner10: RoundedCornerShape = RoundedCornerShape(10.dp), + val roundedCorner12: RoundedCornerShape = RoundedCornerShape(12.dp), + val roundedCorner14: RoundedCornerShape = RoundedCornerShape(14.dp), + val roundedCorner16: RoundedCornerShape = RoundedCornerShape(16.dp), + val roundedCorner20: RoundedCornerShape = RoundedCornerShape(20.dp), + val roundedCorner24: RoundedCornerShape = RoundedCornerShape(24.dp), + val roundedCorner30: RoundedCornerShape = RoundedCornerShape(30.dp), + val roundedCorner50: RoundedCornerShape = RoundedCornerShape(50.dp), + val roundedCornerMax: RoundedCornerShape = RoundedCornerShape(Int.MAX_VALUE.dp), + val circle: RoundedCornerShape = CircleShape +) + +internal val LocalAppShapes = staticCompositionLocalOf { AppShapes() } \ No newline at end of file diff --git a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/theme/Spacings.kt b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/theme/Spacings.kt similarity index 98% rename from sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/theme/Spacings.kt rename to samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/theme/Spacings.kt index c23deb79..81f05f1a 100644 --- a/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app/presentation/theme/Spacings.kt +++ b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/theme/Spacings.kt @@ -1,4 +1,4 @@ -package com.sampleApp.app.presentation.theme +package com.metacto.playground.presentation.theme import androidx.compose.runtime.Immutable import androidx.compose.runtime.staticCompositionLocalOf diff --git a/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/theme/Theme.kt b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/theme/Theme.kt new file mode 100644 index 00000000..b5748b66 --- /dev/null +++ b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/theme/Theme.kt @@ -0,0 +1,131 @@ +package com.metacto.playground.presentation.theme + +import androidx.compose.foundation.background +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Scaffold +import androidx.compose.material3.lightColorScheme +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.ReadOnlyComposable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.key +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalLayoutDirection +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.unit.LayoutDirection +import com.metacto.core.language.ILanguageManager +import com.metacto.core.ui.theme.CoreColors +import com.metacto.core.ui.theme.CoreShapes +import com.metacto.core.ui.theme.CoreSpacings +import com.metacto.core.ui.theme.LocalCoreColors +import com.metacto.core.ui.theme.LocalCoreShapes +import com.metacto.core.ui.theme.LocalCoreSpacings +import com.metacto.core.ui.theme.LocalCoreTypography +import org.koin.compose.koinInject + +internal val colors + @Composable + @ReadOnlyComposable + get() = LocalAppColors.current + +internal val typography + @Composable + @ReadOnlyComposable + get() = LocalAppTypography.current + +internal val spacings + @Composable + @ReadOnlyComposable + get() = LocalAppSpacings.current + +internal val shapes + @Composable + @ReadOnlyComposable + get() = LocalAppShapes.current + +@Composable +private fun ProvideTheme( + content: @Composable () -> Unit +) { + // Prepare language and layout direction stuff + val languageManager = koinInject() + val currentLanguage by remember { languageManager.currentLanguageAsState() } + val layoutDirection = remember(currentLanguage) { + if (currentLanguage?.isRtl == true) LayoutDirection.Rtl else LayoutDirection.Ltr + } + + // Get font families + val quasimodaFontFamily = getQuasimodaFontFamily() + + // Create typographies + val appTypography = remember(quasimodaFontFamily) { + AppTypography( + primary = Primary(TextStyle(fontFamily = quasimodaFontFamily)) + ) + } + val coreTypography = remember(appTypography) { + appTypography.getCoreTypography() + } + + // Create other app & core theme sets + val appColors = remember { AppColors() } + val appShapes = remember { AppShapes() } + val appSpacings = remember { AppSpacings() } + val coreColors = remember { CoreColors() } + val coreShapes = remember { CoreShapes() } + val coreSpacings = remember { CoreSpacings() } + + CompositionLocalProvider( + LocalAppColors provides appColors, + LocalAppShapes provides appShapes, + LocalAppSpacings provides appSpacings, + LocalCoreColors provides coreColors, + LocalCoreShapes provides coreShapes, + LocalCoreSpacings provides coreSpacings, + LocalAppTypography provides appTypography, + LocalCoreTypography provides coreTypography, + LocalLayoutDirection provides layoutDirection + ) { + key(layoutDirection, currentLanguage) { + content() + } + } +} + +@Composable +internal fun AppThemeContent( + content: @Composable () -> Unit +) { + // Create material color scheme + val materialColorScheme = lightColorScheme( + primary = colors.nectarine, + onPrimary = colors.midnight, + primaryContainer = colors.miniPeach, + onPrimaryContainer = colors.midnight, + secondary = colors.midnight, + onSecondary = colors.white, + secondaryContainer = colors.lavender, + onSecondaryContainer = colors.midnight, + tertiary = colors.gray, + onTertiary = colors.white, + tertiaryContainer = colors.white, + onTertiaryContainer = colors.midnight, + background = colors.background, + surface = colors.background + ) + + // Provide different theme then render material theme + ProvideTheme { + MaterialTheme( + colorScheme = materialColorScheme + ) { + Scaffold( + containerColor = colors.background, + modifier = Modifier.background(colors.background) + ) { + content() + } + } + } +} diff --git a/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/theme/Typography.kt b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/theme/Typography.kt new file mode 100644 index 00000000..eeeb44fd --- /dev/null +++ b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/presentation/theme/Typography.kt @@ -0,0 +1,98 @@ +package com.metacto.playground.presentation.theme + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.Immutable +import androidx.compose.runtime.staticCompositionLocalOf +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.sp +import com.metacto.core.ui.extensions.FontFamily +import com.metacto.core.ui.theme.CoreTypography +import com.metacto.playground.resources.Res +import com.metacto.playground.resources.quasimoda_black +import com.metacto.playground.resources.quasimoda_bold +import com.metacto.playground.resources.quasimoda_light +import com.metacto.playground.resources.quasimoda_medium +import com.metacto.playground.resources.quasimoda_regular +import com.metacto.playground.resources.quasimoda_semibold +import com.metacto.playground.resources.quasimoda_thin +import org.jetbrains.compose.resources.Font + + +// Define font families +@Composable +fun getQuasimodaFontFamily() = FontFamily( + Font(Res.font.quasimoda_black, FontWeight.Black), + Font(Res.font.quasimoda_bold, FontWeight.Bold), + Font(Res.font.quasimoda_semibold, FontWeight.SemiBold), + Font(Res.font.quasimoda_medium, FontWeight.Medium), + Font(Res.font.quasimoda_regular, FontWeight.Normal), + Font(Res.font.quasimoda_light, FontWeight.Light), + Font(Res.font.quasimoda_thin, FontWeight.Thin) +) + +@Immutable +data class Primary( + val base: TextStyle +) { + val black = FontSizes(base.copy(fontWeight = FontWeight.Black)) + val extraBold = FontSizes(base.copy(fontWeight = FontWeight.ExtraBold)) + val bold = FontSizes(base.copy(fontWeight = FontWeight.Bold)) + val semiBold = FontSizes(base.copy(fontWeight = FontWeight.SemiBold)) + val medium = FontSizes(base.copy(fontWeight = FontWeight.Medium)) + val regular = FontSizes(base.copy(fontWeight = FontWeight.Normal)) + val light = FontSizes(base.copy(fontWeight = FontWeight.Light)) + val thin = FontSizes(base.copy(fontWeight = FontWeight.Thin)) +} + +@Immutable +data class FontSizes( + val base: TextStyle +) { + val _8 = base.copy(fontSize = 8.sp) + val _10 = base.copy(fontSize = 10.sp) + val _12 = base.copy(fontSize = 12.sp) + val _14 = base.copy(fontSize = 14.sp) + val _16 = base.copy(fontSize = 16.sp) + val _18 = base.copy(fontSize = 18.sp) + val _20 = base.copy(fontSize = 20.sp) + val _22 = base.copy(fontSize = 22.sp) + val _24 = base.copy(fontSize = 24.sp) + val _26 = base.copy(fontSize = 26.sp) + val _28 = base.copy(fontSize = 28.sp) + val _32 = base.copy(fontSize = 32.sp) + val _40 = base.copy(fontSize = 40.sp) + val _72 = base.copy(fontSize = 72.sp) +} + +internal val LocalAppTypography = staticCompositionLocalOf { AppTypography() } + +// Create app typography +@Immutable +data class AppTypography( + val primary: Primary = Primary(TextStyle()) +) + +// Create core typography +internal fun AppTypography.getCoreTypography(): CoreTypography { + val coreTypography = CoreTypography() + + return coreTypography.copy( + primary = primary.base, + primaryFilledButton = coreTypography.primaryFilledButton.copy( + textStyle = primary.medium._16 + ), + tertiaryFilledButton = coreTypography.tertiaryFilledButton.copy( + textStyle = primary.medium._16 + ), + primaryStrokedButton = coreTypography.primaryStrokedButton.copy( + textStyle = primary.medium._16 + ), + primaryTextButton = coreTypography.primaryTextButton.copy( + textStyle = primary.medium._16 + ), + secondaryTextButton = coreTypography.secondaryTextButton.copy( + textStyle = primary.medium._16 + ) + ) +} \ No newline at end of file diff --git a/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/resources/FileResource.kt b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/resources/FileResource.kt new file mode 100644 index 00000000..68966584 --- /dev/null +++ b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/resources/FileResource.kt @@ -0,0 +1,24 @@ +package com.metacto.playground.resources + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.State +import androidx.compose.runtime.produceState +import com.metacto.core.ui.resources.IFileResource +import org.jetbrains.compose.resources.ExperimentalResourceApi + +internal data class FileResource( + override val path: String +) : IFileResource { + @OptIn(ExperimentalResourceApi::class) + @Composable + override fun readAsState(): State { + return produceState(null, this) { + value = Res.readBytes(path).decodeToString() + } + } + + @OptIn(ExperimentalResourceApi::class) + override fun getUri(): String { + return Res.getUri(path) + } +} \ No newline at end of file diff --git a/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/resources/FileResources.kt b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/resources/FileResources.kt new file mode 100644 index 00000000..c5edb5e7 --- /dev/null +++ b/samples/playground-app-shared/src/commonMain/kotlin/com/metacto/playground/resources/FileResources.kt @@ -0,0 +1,13 @@ +package com.metacto.playground.resources + +import com.metacto.core.ui.resources.IFileResource + +internal val Res.file: FileResources + get() = FileResources + +internal fun String.asFileResource(): IFileResource = FileResource(path = "files/$this") + +internal object FileResources { + val app_loading = "app_loading.json".asFileResource() + val intro_video = "intro_video.mp4".asFileResource() +} \ No newline at end of file diff --git a/sampleAppShared/src/iosMain/kotlin/com/sampleApp/app/presentation/main.ios.kt b/samples/playground-app-shared/src/iosMain/kotlin/com/metacto/playground/MainViewController.kt similarity index 52% rename from sampleAppShared/src/iosMain/kotlin/com/sampleApp/app/presentation/main.ios.kt rename to samples/playground-app-shared/src/iosMain/kotlin/com/metacto/playground/MainViewController.kt index 0d0d108d..2edc1334 100644 --- a/sampleAppShared/src/iosMain/kotlin/com/sampleApp/app/presentation/main.ios.kt +++ b/samples/playground-app-shared/src/iosMain/kotlin/com/metacto/playground/MainViewController.kt @@ -1,9 +1,8 @@ -package com.sampleApp.app.presentation +package com.metacto.playground import androidx.compose.ui.window.ComposeUIViewController -import com.sampleApp.app.presentation.app.app.AppContent +import com.metacto.playground.presentation.app.app.AppContent fun MainViewController() = ComposeUIViewController { - // Then render app AppContent() } \ No newline at end of file diff --git a/samples/playground-app-shared/src/iosMain/kotlin/com/metacto/playground/di/DiProvider.kt b/samples/playground-app-shared/src/iosMain/kotlin/com/metacto/playground/di/DiProvider.kt new file mode 100644 index 00000000..5830b604 --- /dev/null +++ b/samples/playground-app-shared/src/iosMain/kotlin/com/metacto/playground/di/DiProvider.kt @@ -0,0 +1,5 @@ +package com.metacto.playground.di + +import org.koin.core.component.KoinComponent + +object DiProvider : KoinComponent \ No newline at end of file diff --git a/sampleAppShared/src/iosMain/kotlin/com/sampleApp/app/di/PlatformModule.kt b/samples/playground-app-shared/src/iosMain/kotlin/com/metacto/playground/di/PlatformModule.kt similarity index 52% rename from sampleAppShared/src/iosMain/kotlin/com/sampleApp/app/di/PlatformModule.kt rename to samples/playground-app-shared/src/iosMain/kotlin/com/metacto/playground/di/PlatformModule.kt index f1e7eed0..a58fc5fb 100644 --- a/sampleAppShared/src/iosMain/kotlin/com/sampleApp/app/di/PlatformModule.kt +++ b/samples/playground-app-shared/src/iosMain/kotlin/com/metacto/playground/di/PlatformModule.kt @@ -1,7 +1,7 @@ -package com.sampleApp.app.di +package com.metacto.playground.di -import com.metacto.core.permissions.helpers.IPermissionDelegateFactory -import com.sampleApp.app.permissions.PermissionDelegateFactory +import com.metacto.core.ui.permissions.helpers.IPermissionDelegateFactory +import com.metacto.playground.permissions.PermissionDelegateFactory import org.koin.dsl.module actual val platformModule = module { diff --git a/samples/playground-app-shared/src/iosMain/kotlin/com/metacto/playground/permissions/AVCapturePermissionDelegate.kt b/samples/playground-app-shared/src/iosMain/kotlin/com/metacto/playground/permissions/AVCapturePermissionDelegate.kt new file mode 100644 index 00000000..2899888a --- /dev/null +++ b/samples/playground-app-shared/src/iosMain/kotlin/com/metacto/playground/permissions/AVCapturePermissionDelegate.kt @@ -0,0 +1,63 @@ +package com.metacto.playground.permissions + +import com.metacto.core.extensions.mainContinuation +import com.metacto.core.ui.permissions.enums.Permission +import com.metacto.core.ui.permissions.enums.PermissionState +import com.metacto.core.ui.permissions.exceptions.DeniedAlwaysException +import com.metacto.core.ui.permissions.helpers.PermissionDelegate +import platform.AVFoundation.AVAuthorizationStatus +import platform.AVFoundation.AVAuthorizationStatusAuthorized +import platform.AVFoundation.AVAuthorizationStatusDenied +import platform.AVFoundation.AVAuthorizationStatusNotDetermined +import platform.AVFoundation.AVAuthorizationStatusRestricted +import platform.AVFoundation.AVCaptureDevice +import platform.AVFoundation.AVMediaType +import platform.AVFoundation.authorizationStatusForMediaType +import platform.AVFoundation.requestAccessForMediaType +import kotlin.coroutines.resume +import kotlin.coroutines.suspendCoroutine + +internal class AVCapturePermissionDelegate( + private val type: AVMediaType, + private val permission: Permission +) : PermissionDelegate { + + override suspend fun providePermission() { + when (val status = currentAuthorizationStatus()) { + AVAuthorizationStatusAuthorized -> return + AVAuthorizationStatusNotDetermined -> { + val isGranted: Boolean = suspendCoroutine { continuation -> + AVCaptureDevice.requestAccess(type) { continuation.resume(it) } + } + if (isGranted) return + else throw DeniedAlwaysException(permission) + } + + AVAuthorizationStatusDenied -> throw DeniedAlwaysException(permission) + else -> error("unknown authorization status $status") + } + } + + override suspend fun getPermissionState(): PermissionState { + return when (val status = currentAuthorizationStatus()) { + AVAuthorizationStatusAuthorized -> PermissionState.Granted + AVAuthorizationStatusNotDetermined -> PermissionState.NotDetermined + AVAuthorizationStatusDenied -> PermissionState.DeniedAlways + AVAuthorizationStatusRestricted -> PermissionState.Granted + else -> error("unknown authorization status $status") + } + } + + private fun currentAuthorizationStatus(): AVAuthorizationStatus { + return AVCaptureDevice.authorizationStatusForMediaType(type) + } +} + +private fun AVCaptureDevice.Companion.requestAccess( + type: AVMediaType, + callback: (isGranted: Boolean) -> Unit +) { + this.requestAccessForMediaType(type, mainContinuation { isGranted: Boolean -> + callback(isGranted) + }) +} \ No newline at end of file diff --git a/samples/playground-app-shared/src/iosMain/kotlin/com/metacto/playground/permissions/BluetoothPermissionDelegate.kt b/samples/playground-app-shared/src/iosMain/kotlin/com/metacto/playground/permissions/BluetoothPermissionDelegate.kt new file mode 100644 index 00000000..877ebb9d --- /dev/null +++ b/samples/playground-app-shared/src/iosMain/kotlin/com/metacto/playground/permissions/BluetoothPermissionDelegate.kt @@ -0,0 +1,92 @@ +package com.metacto.playground.permissions + +import com.metacto.core.ui.permissions.enums.Permission +import com.metacto.core.ui.permissions.enums.PermissionState +import com.metacto.core.ui.permissions.exceptions.DeniedAlwaysException +import com.metacto.core.ui.permissions.exceptions.DeniedException +import com.metacto.core.ui.permissions.helpers.PermissionDelegate +import kotlinx.cinterop.ExperimentalForeignApi +import platform.CoreBluetooth.CBCentralManager +import platform.CoreBluetooth.CBCentralManagerDelegateProtocol +import platform.CoreBluetooth.CBManager +import platform.CoreBluetooth.CBManagerAuthorizationAllowedAlways +import platform.CoreBluetooth.CBManagerAuthorizationDenied +import platform.CoreBluetooth.CBManagerAuthorizationNotDetermined +import platform.CoreBluetooth.CBManagerAuthorizationRestricted +import platform.CoreBluetooth.CBManagerState +import platform.CoreBluetooth.CBManagerStatePoweredOff +import platform.CoreBluetooth.CBManagerStatePoweredOn +import platform.CoreBluetooth.CBManagerStateResetting +import platform.CoreBluetooth.CBManagerStateUnauthorized +import platform.CoreBluetooth.CBManagerStateUnknown +import platform.CoreBluetooth.CBManagerStateUnsupported +import platform.Foundation.NSSelectorFromString +import platform.darwin.NSObject +import kotlin.coroutines.resume +import kotlin.coroutines.suspendCoroutine + +internal class BluetoothPermissionDelegate( + private val permission: Permission +) : PermissionDelegate { + + @OptIn(ExperimentalForeignApi::class) + override suspend fun providePermission() { + val isNotDetermined: Boolean = + if (CBManager.resolveClassMethod(NSSelectorFromString("authorization"))) { + CBManager.authorization == CBManagerAuthorizationNotDetermined + } else { + CBCentralManager().state == CBManagerStateUnknown + } + + val state: CBManagerState = if (isNotDetermined) { + suspendCoroutine { continuation -> + CBCentralManager(object : NSObject(), CBCentralManagerDelegateProtocol { + override fun centralManagerDidUpdateState(central: CBCentralManager) { + continuation.resume(central.state) + } + }, null) + } + } else { + CBCentralManager().state + } + + when (state) { + CBManagerStatePoweredOn -> return + CBManagerStateUnauthorized -> throw DeniedAlwaysException(permission) + CBManagerStatePoweredOff -> + throw DeniedException(permission, "Bluetooth is powered off") + + CBManagerStateResetting -> + throw DeniedException(permission, "Bluetooth is restarting") + + CBManagerStateUnsupported -> + throw DeniedAlwaysException(permission, "Bluetooth is not supported on this device") + + CBManagerStateUnknown -> + error("Bluetooth state should be known at this point") + + else -> + error("Unknown state (Permissions library should be updated) : $state") + } + } + + @OptIn(ExperimentalForeignApi::class) + override suspend fun getPermissionState(): PermissionState { + if (CBManager.resolveClassMethod(NSSelectorFromString("authorization"))) { + return when (val state = CBManager.authorization) { + CBManagerAuthorizationNotDetermined -> PermissionState.NotDetermined + CBManagerAuthorizationAllowedAlways, CBManagerAuthorizationRestricted -> PermissionState.Granted + CBManagerAuthorizationDenied -> PermissionState.DeniedAlways + else -> error("unknown state $state") + } + } + return when (val state = CBCentralManager().state) { + CBManagerStatePoweredOn -> PermissionState.Granted + CBManagerStateUnauthorized, CBManagerStatePoweredOff, + CBManagerStateResetting, CBManagerStateUnsupported -> PermissionState.DeniedAlways + + CBManagerStateUnknown -> PermissionState.NotDetermined + else -> error("unknown state $state") + } + } +} diff --git a/samples/playground-app-shared/src/iosMain/kotlin/com/metacto/playground/permissions/ContactsPermissionDelegate.kt b/samples/playground-app-shared/src/iosMain/kotlin/com/metacto/playground/permissions/ContactsPermissionDelegate.kt new file mode 100644 index 00000000..c74725d5 --- /dev/null +++ b/samples/playground-app-shared/src/iosMain/kotlin/com/metacto/playground/permissions/ContactsPermissionDelegate.kt @@ -0,0 +1,66 @@ +package com.metacto.playground.permissions + +import com.metacto.core.ui.permissions.enums.Permission +import com.metacto.core.ui.permissions.enums.PermissionState +import com.metacto.core.ui.permissions.exceptions.DeniedAlwaysException +import com.metacto.core.ui.permissions.helpers.PermissionDelegate +import platform.Contacts.CNAuthorizationStatus +import platform.Contacts.CNAuthorizationStatusAuthorized +import platform.Contacts.CNAuthorizationStatusDenied +import platform.Contacts.CNAuthorizationStatusNotDetermined +import platform.Contacts.CNAuthorizationStatusRestricted +import platform.Contacts.CNContactStore +import platform.Contacts.CNEntityType +import kotlin.coroutines.resume +import kotlin.coroutines.suspendCoroutine + +internal class ContactsPermissionDelegate( + private val permission: Permission, + private val contactStore: CNContactStore +) : PermissionDelegate { + + override suspend fun providePermission() { + return provideLocationPermission( + CNContactStore.authorizationStatusForEntityType( + CNEntityType.CNEntityTypeContacts + ) + ) + } + + override suspend fun getPermissionState(): PermissionState { + val status: CNAuthorizationStatus = + CNContactStore.authorizationStatusForEntityType(CNEntityType.CNEntityTypeContacts) + return when (status) { + CNAuthorizationStatusAuthorized -> PermissionState.Granted + + CNAuthorizationStatusNotDetermined -> PermissionState.NotDetermined + CNAuthorizationStatusDenied, CNAuthorizationStatusRestricted -> PermissionState.DeniedAlways + else -> error("unknown contacts $status") + } + } + + private suspend fun provideLocationPermission( + status: CNAuthorizationStatus + ) { + when (status) { + CNAuthorizationStatusAuthorized, + CNAuthorizationStatusRestricted -> return + + CNAuthorizationStatusNotDetermined -> { + val newStatus = suspendCoroutine { continuation -> + contactStore.requestAccessForEntityType(CNEntityType.CNEntityTypeContacts) { flag, error -> + continuation.resume( + CNContactStore.authorizationStatusForEntityType( + CNEntityType.CNEntityTypeContacts + ) + ) + } + } + provideLocationPermission(newStatus) + } + + CNAuthorizationStatusDenied -> throw DeniedAlwaysException(permission) + else -> error("unknown location authorization status $status") + } + } +} diff --git a/samples/playground-app-shared/src/iosMain/kotlin/com/metacto/playground/permissions/GalleryPermissionDelegate.kt b/samples/playground-app-shared/src/iosMain/kotlin/com/metacto/playground/permissions/GalleryPermissionDelegate.kt new file mode 100644 index 00000000..85839f65 --- /dev/null +++ b/samples/playground-app-shared/src/iosMain/kotlin/com/metacto/playground/permissions/GalleryPermissionDelegate.kt @@ -0,0 +1,50 @@ +package com.metacto.playground.permissions + +import com.metacto.core.extensions.mainContinuation +import com.metacto.core.ui.permissions.enums.Permission +import com.metacto.core.ui.permissions.enums.PermissionState +import com.metacto.core.ui.permissions.exceptions.DeniedAlwaysException +import com.metacto.core.ui.permissions.helpers.PermissionDelegate +import platform.Photos.PHAuthorizationStatus +import platform.Photos.PHAuthorizationStatusAuthorized +import platform.Photos.PHAuthorizationStatusDenied +import platform.Photos.PHAuthorizationStatusNotDetermined +import platform.Photos.PHPhotoLibrary +import kotlin.coroutines.resume +import kotlin.coroutines.suspendCoroutine + +internal class GalleryPermissionDelegate : PermissionDelegate { + override suspend fun providePermission() { + providePermission(PHPhotoLibrary.authorizationStatus()) + } + + private suspend fun providePermission(status: PHAuthorizationStatus) { + return when (status) { + PHAuthorizationStatusAuthorized -> return + PHAuthorizationStatusNotDetermined -> { + val newStatus = suspendCoroutine { continuation -> + requestGalleryAccess { continuation.resume(it) } + } + providePermission(newStatus) + } + + PHAuthorizationStatusDenied -> throw DeniedAlwaysException(Permission.GALLERY) + else -> error("unknown gallery authorization status $status") + } + } + + override suspend fun getPermissionState(): PermissionState { + return when (val status = PHPhotoLibrary.authorizationStatus()) { + PHAuthorizationStatusAuthorized -> PermissionState.Granted + PHAuthorizationStatusNotDetermined -> PermissionState.NotDetermined + PHAuthorizationStatusDenied -> PermissionState.DeniedAlways + else -> error("unknown gallery authorization status $status") + } + } +} + +private fun requestGalleryAccess(callback: (PHAuthorizationStatus) -> Unit) { + PHPhotoLibrary.requestAuthorization(mainContinuation { status: PHAuthorizationStatus -> + callback(status) + }) +} diff --git a/samples/playground-app-shared/src/iosMain/kotlin/com/metacto/playground/permissions/LocationManagerDelegate.kt b/samples/playground-app-shared/src/iosMain/kotlin/com/metacto/playground/permissions/LocationManagerDelegate.kt new file mode 100644 index 00000000..dbc00bcb --- /dev/null +++ b/samples/playground-app-shared/src/iosMain/kotlin/com/metacto/playground/permissions/LocationManagerDelegate.kt @@ -0,0 +1,30 @@ +package com.metacto.playground.permissions + +import platform.CoreLocation.CLAuthorizationStatus +import platform.CoreLocation.CLLocationManager +import platform.CoreLocation.CLLocationManagerDelegateProtocol +import platform.darwin.NSObject + +internal class LocationManagerDelegate : NSObject(), CLLocationManagerDelegateProtocol { + private var callback: ((CLAuthorizationStatus) -> Unit)? = null + + private val locationManager = CLLocationManager() + + init { + locationManager.delegate = this + } + + fun requestLocationAccess(callback: (CLAuthorizationStatus) -> Unit) { + this.callback = callback + + locationManager.requestWhenInUseAuthorization() + } + + override fun locationManager( + manager: CLLocationManager, + didChangeAuthorizationStatus: CLAuthorizationStatus + ) { + callback?.invoke(didChangeAuthorizationStatus) + callback = null + } +} diff --git a/samples/playground-app-shared/src/iosMain/kotlin/com/metacto/playground/permissions/LocationPermissionDelegate.kt b/samples/playground-app-shared/src/iosMain/kotlin/com/metacto/playground/permissions/LocationPermissionDelegate.kt new file mode 100644 index 00000000..e5fb18ec --- /dev/null +++ b/samples/playground-app-shared/src/iosMain/kotlin/com/metacto/playground/permissions/LocationPermissionDelegate.kt @@ -0,0 +1,53 @@ +package com.metacto.playground.permissions + +import com.metacto.core.ui.permissions.enums.Permission +import com.metacto.core.ui.permissions.enums.PermissionState +import com.metacto.core.ui.permissions.exceptions.DeniedAlwaysException +import com.metacto.core.ui.permissions.helpers.PermissionDelegate +import platform.CoreLocation.CLAuthorizationStatus +import platform.CoreLocation.CLLocationManager +import platform.CoreLocation.kCLAuthorizationStatusAuthorizedAlways +import platform.CoreLocation.kCLAuthorizationStatusAuthorizedWhenInUse +import platform.CoreLocation.kCLAuthorizationStatusDenied +import platform.CoreLocation.kCLAuthorizationStatusNotDetermined +import kotlin.coroutines.resume +import kotlin.coroutines.suspendCoroutine + +internal class LocationPermissionDelegate( + private val locationManagerDelegate: LocationManagerDelegate, + private val permission: Permission +) : PermissionDelegate { + override suspend fun providePermission() { + return provideLocationPermission(CLLocationManager.authorizationStatus()) + } + + override suspend fun getPermissionState(): PermissionState { + return when (val status = CLLocationManager.authorizationStatus()) { + kCLAuthorizationStatusAuthorizedAlways, + kCLAuthorizationStatusAuthorizedWhenInUse -> PermissionState.Granted + + kCLAuthorizationStatusNotDetermined -> PermissionState.NotDetermined + kCLAuthorizationStatusDenied -> PermissionState.DeniedAlways + else -> error("unknown location authorization status $status") + } + } + + private suspend fun provideLocationPermission( + status: CLAuthorizationStatus + ) { + when (status) { + kCLAuthorizationStatusAuthorizedAlways, + kCLAuthorizationStatusAuthorizedWhenInUse -> return + + kCLAuthorizationStatusNotDetermined -> { + val newStatus = suspendCoroutine { continuation -> + locationManagerDelegate.requestLocationAccess { continuation.resume(it) } + } + provideLocationPermission(newStatus) + } + + kCLAuthorizationStatusDenied -> throw DeniedAlwaysException(permission) + else -> error("unknown location authorization status $status") + } + } +} \ No newline at end of file diff --git a/samples/playground-app-shared/src/iosMain/kotlin/com/metacto/playground/permissions/MotionPermissionDelegate.kt b/samples/playground-app-shared/src/iosMain/kotlin/com/metacto/playground/permissions/MotionPermissionDelegate.kt new file mode 100644 index 00000000..3478e91b --- /dev/null +++ b/samples/playground-app-shared/src/iosMain/kotlin/com/metacto/playground/permissions/MotionPermissionDelegate.kt @@ -0,0 +1,37 @@ +package com.metacto.playground.permissions + +import com.metacto.core.ui.permissions.enums.PermissionState +import com.metacto.core.ui.permissions.helpers.PermissionDelegate +import platform.CoreMotion.CMAuthorizationStatusAuthorized +import platform.CoreMotion.CMAuthorizationStatusDenied +import platform.CoreMotion.CMAuthorizationStatusNotDetermined +import platform.CoreMotion.CMAuthorizationStatusRestricted +import platform.CoreMotion.CMMotionActivityManager +import platform.Foundation.NSDate +import platform.Foundation.NSOperationQueue + +internal class MotionPermissionDelegate : PermissionDelegate { + override suspend fun providePermission() { + val cmActivityManager = CMMotionActivityManager() + val now = NSDate() + cmActivityManager.queryActivityStartingFromDate( + now, + now, + NSOperationQueue.mainQueue() + ) { _, _ -> } + } + + @Suppress("MoveVariableDeclarationIntoWhen") + override suspend fun getPermissionState(): PermissionState { + val status = CMMotionActivityManager.authorizationStatus() + return when (status) { + CMAuthorizationStatusAuthorized, + CMAuthorizationStatusRestricted, + -> PermissionState.Granted + + CMAuthorizationStatusDenied -> PermissionState.DeniedAlways + CMAuthorizationStatusNotDetermined -> PermissionState.NotDetermined + else -> error("unknown motion authorization status $status") + } + } +} diff --git a/samples/playground-app-shared/src/iosMain/kotlin/com/metacto/playground/permissions/PermissionDelegateFactory.kt b/samples/playground-app-shared/src/iosMain/kotlin/com/metacto/playground/permissions/PermissionDelegateFactory.kt new file mode 100644 index 00000000..7333f950 --- /dev/null +++ b/samples/playground-app-shared/src/iosMain/kotlin/com/metacto/playground/permissions/PermissionDelegateFactory.kt @@ -0,0 +1,54 @@ +package com.metacto.playground.permissions + +import com.metacto.core.ui.permissions.enums.Permission +import com.metacto.core.ui.permissions.helpers.AlwaysGrantedPermissionDelegate +import com.metacto.core.ui.permissions.helpers.IPermissionDelegateFactory +import com.metacto.core.ui.permissions.helpers.PermissionDelegate +import platform.AVFoundation.AVMediaTypeAudio +import platform.AVFoundation.AVMediaTypeVideo +import platform.Contacts.CNContactStore + +class PermissionDelegateFactory : IPermissionDelegateFactory { + private val locationManagerDelegate = LocationManagerDelegate() + private val contactStore = CNContactStore() + + override fun getDelegate(permission: Permission): PermissionDelegate { + return when (permission) { + Permission.CAMERA -> AVCapturePermissionDelegate( + type = AVMediaTypeVideo, + permission = permission + ) + + Permission.RECORD_AUDIO -> AVCapturePermissionDelegate( + type = AVMediaTypeAudio, + permission = permission + ) + + Permission.CONTACTS -> ContactsPermissionDelegate( + permission = permission, + contactStore = contactStore + ) + + Permission.LOCATION, + Permission.COARSE_LOCATION, + Permission.BACKGROUND_LOCATION -> LocationPermissionDelegate( + locationManagerDelegate = locationManagerDelegate, + permission = permission + ) + + Permission.BLUETOOTH_LE, + Permission.BLUETOOTH_SCAN, + Permission.BLUETOOTH_ADVERTISE, + Permission.BLUETOOTH_CONNECT -> BluetoothPermissionDelegate( + permission = permission + ) + + Permission.REMOTE_NOTIFICATION -> RemoteNotificationPermissionDelegate() + Permission.GALLERY -> GalleryPermissionDelegate() + Permission.MOTION -> MotionPermissionDelegate() + Permission.STORAGE, + Permission.WRITE_STORAGE, + Permission.CALENDER -> AlwaysGrantedPermissionDelegate() + } + } +} \ No newline at end of file diff --git a/samples/playground-app-shared/src/iosMain/kotlin/com/metacto/playground/permissions/RemoteNotificationPermissionDelegate.kt b/samples/playground-app-shared/src/iosMain/kotlin/com/metacto/playground/permissions/RemoteNotificationPermissionDelegate.kt new file mode 100644 index 00000000..4def700a --- /dev/null +++ b/samples/playground-app-shared/src/iosMain/kotlin/com/metacto/playground/permissions/RemoteNotificationPermissionDelegate.kt @@ -0,0 +1,89 @@ +package com.metacto.playground.permissions + +import com.metacto.core.extensions.mainContinuation +import com.metacto.core.ui.permissions.enums.Permission +import com.metacto.core.ui.permissions.enums.PermissionState +import com.metacto.core.ui.permissions.exceptions.DeniedAlwaysException +import com.metacto.core.ui.permissions.helpers.PermissionDelegate +import platform.UserNotifications.UNAuthorizationOptionAlert +import platform.UserNotifications.UNAuthorizationOptionBadge +import platform.UserNotifications.UNAuthorizationOptionSound +import platform.UserNotifications.UNAuthorizationStatus +import platform.UserNotifications.UNAuthorizationStatusAuthorized +import platform.UserNotifications.UNAuthorizationStatusDenied +import platform.UserNotifications.UNAuthorizationStatusEphemeral +import platform.UserNotifications.UNAuthorizationStatusNotDetermined +import platform.UserNotifications.UNAuthorizationStatusProvisional +import platform.UserNotifications.UNNotificationSettings +import platform.UserNotifications.UNUserNotificationCenter +import kotlin.coroutines.suspendCoroutine + +internal class RemoteNotificationPermissionDelegate : PermissionDelegate { + override suspend fun providePermission() { + val currentCenter: UNUserNotificationCenter = UNUserNotificationCenter + .currentNotificationCenter() + + val status: UNAuthorizationStatus = suspendCoroutine { continuation -> + currentCenter.getNotificationSettingsWithCompletionHandler( + mainContinuation { settings: UNNotificationSettings? -> + continuation.resumeWith( + Result.success( + settings?.authorizationStatus ?: UNAuthorizationStatusNotDetermined + ) + ) + } + ) + } + when (status) { + UNAuthorizationStatusAuthorized -> return + UNAuthorizationStatusNotDetermined -> { + val isSuccess = suspendCoroutine { continuation -> + UNUserNotificationCenter.currentNotificationCenter() + .requestAuthorizationWithOptions( + UNAuthorizationOptionSound + .or(UNAuthorizationOptionAlert) + .or(UNAuthorizationOptionBadge), + mainContinuation { isOk, error -> + if (isOk && error == null) { + continuation.resumeWith(Result.success(true)) + } else { + continuation.resumeWith(Result.success(false)) + } + } + ) + } + if (isSuccess) { + providePermission() + } else { + error("notifications permission failed") + } + } + + UNAuthorizationStatusDenied -> throw DeniedAlwaysException(Permission.REMOTE_NOTIFICATION) + else -> error("notifications permission status $status") + } + } + + override suspend fun getPermissionState(): PermissionState { + val currentCenter = UNUserNotificationCenter.currentNotificationCenter() + + val status = suspendCoroutine { continuation -> + currentCenter.getNotificationSettingsWithCompletionHandler( + mainContinuation { settings: UNNotificationSettings? -> + continuation.resumeWith( + Result.success( + settings?.authorizationStatus ?: UNAuthorizationStatusNotDetermined + ) + ) + }) + } + return when (status) { + UNAuthorizationStatusAuthorized, + UNAuthorizationStatusProvisional, + UNAuthorizationStatusEphemeral -> PermissionState.Granted + UNAuthorizationStatusNotDetermined -> PermissionState.NotDetermined + UNAuthorizationStatusDenied -> PermissionState.DeniedAlways + else -> error("unknown push authorization status $status") + } + } +} diff --git a/samples/playground-ios-app/Configurations/Dev.xcconfig b/samples/playground-ios-app/Configurations/Dev.xcconfig new file mode 100644 index 00000000..54eace71 --- /dev/null +++ b/samples/playground-ios-app/Configurations/Dev.xcconfig @@ -0,0 +1,13 @@ +// +// Dev.xcconfig +// iosApp +// +// Created by Karem on 11/15/23. +// Copyright © 2023 orgName. All rights reserved. +// + +// Configuration settings file format documentation can be found at: +// https://help.apple.com/xcode/#/dev745c5c974 + +DISPLAY_NAME = PlaygroundApp (Dev) +PRODUCT_BUNDLE_IDENTIFIER = com.metacto.playground.dev diff --git a/samples/playground-ios-app/Configurations/Prod.xcconfig b/samples/playground-ios-app/Configurations/Prod.xcconfig new file mode 100644 index 00000000..2e306d55 --- /dev/null +++ b/samples/playground-ios-app/Configurations/Prod.xcconfig @@ -0,0 +1,13 @@ +// +// Prod.xcconfig +// iosApp +// +// Created by Karem on 11/15/23. +// Copyright © 2023 orgName. All rights reserved. +// + +// Configuration settings file format documentation can be found at: +// https://help.apple.com/xcode/#/dev745c5c974 + +DISPLAY_NAME = PlaygroundApp +PRODUCT_BUNDLE_IDENTIFIER = com.metacto.playground.prod diff --git a/samples/playground-ios-app/apns_key.p8 b/samples/playground-ios-app/apns_key.p8 new file mode 100644 index 00000000..2cde4ed5 --- /dev/null +++ b/samples/playground-ios-app/apns_key.p8 @@ -0,0 +1,6 @@ +-----BEGIN PRIVATE KEY----- +MIGTAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBHkwdwIBAQQgRS2fJ0tDqVulBv0o +XkFPAS0qz4nR5ri3XH2MkaRVikegCgYIKoZIzj0DAQehRANCAAQzxDg3n4RF+C9d +38zli8eF9sunVpurhQhCgbEx8eEfGqV+fLrkrFgqTfHlgcgYrx9kHqXPizFy6juu +zCwv9Esw +-----END PRIVATE KEY----- \ No newline at end of file diff --git a/samples/playground-ios-app/ci_scripts/ci_post_clone.sh b/samples/playground-ios-app/ci_scripts/ci_post_clone.sh new file mode 100755 index 00000000..75fbe39a --- /dev/null +++ b/samples/playground-ios-app/ci_scripts/ci_post_clone.sh @@ -0,0 +1,7 @@ +#!/bin/sh +brew install cocoapods +brew install openjdk@17 +brew install gradle +echo 'export PATH="/usr/local/opt/openjdk@17/bin:$PATH"' >> ~/.zshrc +echo 'export CPPFLAGS="-I/usr/local/opt/openjdk@17/include"' >> ~/.zshrc +cd .. && cd .. && ./gradlew podinstall diff --git a/samples/playground-ios-app/ci_scripts/ci_post_xcodebuild.sh b/samples/playground-ios-app/ci_scripts/ci_post_xcodebuild.sh new file mode 100755 index 00000000..0a52dab6 --- /dev/null +++ b/samples/playground-ios-app/ci_scripts/ci_post_xcodebuild.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +brew install firebase-cli +firebase appdistribution:distribute "$CI_AD_HOC_SIGNED_APP_PATH/My Atlas - DEV.ipa" \ + --app "1:413144840663:ios:16bdffb6a23c75f05ff392" \ + --token "$FIREBASE_TOKEN" \ + --groups "metacto-testers" + +#!/bin/sh + +set -e +if [[ -n $CI_ARCHIVE_PATH ]]; then + echo "Found valid archive path, trying to upload dSYMs for config $GSERVICE_PLIST_NAME from $CI_ARCHIVE_PATH" + ../Pods/FirebaseCrashlytics/upload-symbols -gsp ../iosApp/Configuration/Dev/GoogleService-Info.plist -p ios $CI_ARCHIVE_PATH/dSYMs +fi diff --git a/iosApp/iosApp.xcodeproj/project.pbxproj b/samples/playground-ios-app/iosApp.xcodeproj/project.pbxproj similarity index 78% rename from iosApp/iosApp.xcodeproj/project.pbxproj rename to samples/playground-ios-app/iosApp.xcodeproj/project.pbxproj index b12e2bfd..dc1ccf19 100644 --- a/iosApp/iosApp.xcodeproj/project.pbxproj +++ b/samples/playground-ios-app/iosApp.xcodeproj/project.pbxproj @@ -3,26 +3,25 @@ archiveVersion = 1; classes = { }; - objectVersion = 54; + objectVersion = 50; objects = { /* Begin PBXBuildFile section */ 058557BB273AAA24004C7B11 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 058557BA273AAA24004C7B11 /* Assets.xcassets */; }; 058557D9273AAEEB004C7B11 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 058557D8273AAEEB004C7B11 /* Preview Assets.xcassets */; }; 2152FB042600AC8F00CF470E /* iOSApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2152FB032600AC8F00CF470E /* iOSApp.swift */; }; - 6BC0D9462C86593800E2682F /* DiProvider+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BC0D9452C86593800E2682F /* DiProvider+Extensions.swift */; }; - 6BC443182B5A7D560004E68C /* AvoidDisposeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BC443172B5A7D560004E68C /* AvoidDisposeViewController.swift */; }; + 6BB0E4E82DC4AFFC0065FAA2 /* DiProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BB0E4E72DC4AFF80065FAA2 /* DiProvider.swift */; }; + 6BFA2DB72DC49699004981FB /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BFA2DB62DC49697004981FB /* AppDelegate.swift */; }; 7555FF83242A565900829871 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7555FF82242A565900829871 /* ContentView.swift */; }; 8C78AE7D2B04F236003398E5 /* Launch Screen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8C78AE7C2B04F236003398E5 /* Launch Screen.storyboard */; }; - B2C1AB6DA9B489117E49E529 /* Pods_iosApp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B47ACE555717B23986187489 /* Pods_iosApp.framework */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ 058557BA273AAA24004C7B11 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 058557D8273AAEEB004C7B11 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; 2152FB032600AC8F00CF470E /* iOSApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = iOSApp.swift; sourceTree = ""; }; - 6BC0D9452C86593800E2682F /* DiProvider+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DiProvider+Extensions.swift"; sourceTree = ""; }; - 6BC443172B5A7D560004E68C /* AvoidDisposeViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AvoidDisposeViewController.swift; sourceTree = ""; }; + 6BB0E4E72DC4AFF80065FAA2 /* DiProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiProvider.swift; sourceTree = ""; }; + 6BFA2DB62DC49697004981FB /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7555FF7B242A565900829871 /* My Atlas - DEV.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "My Atlas - DEV.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 7555FF82242A565900829871 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; 7555FF8C242A565B00829871 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -31,10 +30,8 @@ 8C78AE7C2B04F236003398E5 /* Launch Screen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = "Launch Screen.storyboard"; sourceTree = ""; }; 8C7A86E52B04DBBE0037F3D8 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; 8C7A86E72B04DBF10037F3D8 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; - A18F9A90420A7E61B00DCA58 /* Pods-iosApp.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-iosApp.debug.xcconfig"; path = "Target Support Files/Pods-iosApp/Pods-iosApp.debug.xcconfig"; sourceTree = ""; }; B47ACE555717B23986187489 /* Pods_iosApp.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_iosApp.framework; sourceTree = BUILT_PRODUCTS_DIR; }; CBBF6BC32A71787F00A56862 /* iosApp.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = iosApp.entitlements; sourceTree = ""; }; - DC80F7A891192912D2E42FF3 /* Pods-iosApp.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-iosApp.release.xcconfig"; path = "Target Support Files/Pods-iosApp/Pods-iosApp.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -42,7 +39,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B2C1AB6DA9B489117E49E529 /* Pods_iosApp.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -57,30 +53,12 @@ path = "Preview Content"; sourceTree = ""; }; - 6BC0D9442C86592500E2682F /* Extensions */ = { - isa = PBXGroup; - children = ( - 6BC0D9452C86593800E2682F /* DiProvider+Extensions.swift */, - ); - path = Extensions; - sourceTree = ""; - }; - 6C1EB4A24C91304CD24EB11E /* Pods */ = { - isa = PBXGroup; - children = ( - A18F9A90420A7E61B00DCA58 /* Pods-iosApp.debug.xcconfig */, - DC80F7A891192912D2E42FF3 /* Pods-iosApp.release.xcconfig */, - ); - path = Pods; - sourceTree = ""; - }; 7555FF72242A565900829871 = { isa = PBXGroup; children = ( 8C29F3432B04D31800A67CB1 /* Configurations */, 7555FF7D242A565900829871 /* iosApp */, 7555FF7C242A565900829871 /* Products */, - 6C1EB4A24C91304CD24EB11E /* Pods */, 97ACDD949D232C2D6821387A /* Frameworks */, ); sourceTree = ""; @@ -96,14 +74,14 @@ 7555FF7D242A565900829871 /* iosApp */ = { isa = PBXGroup; children = ( - 6BC0D9442C86592500E2682F /* Extensions */, + 8C29F3442B04D32C00A67CB1 /* Configuration */, 8C78AE7B2B04F206003398E5 /* Resources */, CBBF6BC32A71787F00A56862 /* iosApp.entitlements */, - 8C29F3442B04D32C00A67CB1 /* Configuration */, - 7555FF82242A565900829871 /* ContentView.swift */, + 6BB0E4E72DC4AFF80065FAA2 /* DiProvider.swift */, + 6BFA2DB62DC49697004981FB /* AppDelegate.swift */, 2152FB032600AC8F00CF470E /* iOSApp.swift */, + 7555FF82242A565900829871 /* ContentView.swift */, 058557D7273AAEEB004C7B11 /* Preview Content */, - 6BC443172B5A7D560004E68C /* AvoidDisposeViewController.swift */, ); path = iosApp; sourceTree = ""; @@ -167,13 +145,11 @@ isa = PBXNativeTarget; buildConfigurationList = 7555FFA5242A565B00829871 /* Build configuration list for PBXNativeTarget "iosApp" */; buildPhases = ( - 2E8F8F0BBD2A9F289AF6E576 /* [CP] Check Pods Manifest.lock */, + 6BFA2DB52DC495A8004981FB /* Compile Kotlin Framework */, 7555FF77242A565900829871 /* Sources */, 8C7A86E92B04DCD90037F3D8 /* Google Analytics Run Script */, 7555FF79242A565900829871 /* Resources */, 93C54575B140DDC0BCCFD8F8 /* Frameworks */, - 98C6B866A1F5F8B8BE9530C9 /* [CP] Embed Pods Frameworks */, - 964FDDAF0CD314D60CB039DA /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -208,6 +184,8 @@ Base, ); mainGroup = 7555FF72242A565900829871; + packageReferences = ( + ); productRefGroup = 7555FF7C242A565900829871 /* Products */; projectDirPath = ""; projectRoot = ""; @@ -231,7 +209,7 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 2E8F8F0BBD2A9F289AF6E576 /* [CP] Check Pods Manifest.lock */ = { + 6BFA2DB52DC495A8004981FB /* Compile Kotlin Framework */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -239,19 +217,15 @@ inputFileListPaths = ( ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", ); - name = "[CP] Check Pods Manifest.lock"; + name = "Compile Kotlin Framework"; outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-iosApp-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "if [ \"YES\" = \"$OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED\" ]; then\n echo \"Skipping Gradle build task invocation due to OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED environment variable set to \\\"YES\\\"\"\n exit 0\nfi\ncd \"$SRCROOT/../..\"\n./gradlew :samples:playground-app-shared:embedAndSignAppleFrameworkForXcode\n"; }; 8C7A86E92B04DCD90037F3D8 /* Google Analytics Run Script */ = { isa = PBXShellScriptBuildPhase; @@ -271,40 +245,6 @@ shellPath = /bin/sh; shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n# Name of the resource to copy\nINFO_PLIST_FILE=GoogleService-Info.plist\n\n# Get references to debug and production versions of the plist file\nDEVELOPMENT_INFO_PLIST_FILE=${PROJECT_DIR}/${TARGET_NAME}/Configuration/Dev/${INFO_PLIST_FILE}\nPRODUCTION_INFO_PLIST_FILE=${PROJECT_DIR}/${TARGET_NAME}/Configuration/Prod/${INFO_PLIST_FILE}\n\n# Make sure the debug version exists\necho \"Looking for ${INFO_PLIST_FILE} in ${DEVELOPMENT_INFO_PLIST_FILE}\"\nif [ ! -f $DEVELOPMENT_INFO_PLIST_FILE ] ; then\n echo \"File GoogleService-Info.plist (development) not found.\"\n exit 1\nfi\n\n# Make sure the production version exists\necho \"Looking for ${INFO_PLIST_FILE} in ${PRODUCTION_INFO_PLIST_FILE}\"\nif [ ! -f $PRODUCTION_INFO_PLIST_FILE ] ; then\n echo \"File GoogleService-Info.plist (production) not found.\"\n exit 1\nfi\n\n# Get a reference to the destination location for the plist file\nPLIST_DESTINATION=${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app\necho \"Copying ${INFO_PLIST_FILE} to final destination: ${PLIST_DESTINATION}\"\n\n# Copy the appropiate file to app bundle\nif [ \"${CONFIGURATION}\" == \"Debug\" ] \nthen\n echo \"File ${DEVELOPMENT_INFO_PLIST_FILE} copied\"\n cp \"${DEVELOPMENT_INFO_PLIST_FILE}\" \"${PLIST_DESTINATION}\"\nelse\n echo \"File ${PRODUCTION_INFO_PLIST_FILE} copied\"\n cp \"${PRODUCTION_INFO_PLIST_FILE}\" \"${PLIST_DESTINATION}\"\nfi\n"; }; - 964FDDAF0CD314D60CB039DA /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-iosApp/Pods-iosApp-resources-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Copy Pods Resources"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-iosApp/Pods-iosApp-resources-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-iosApp/Pods-iosApp-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; - 98C6B866A1F5F8B8BE9530C9 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -312,10 +252,10 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 6BFA2DB72DC49699004981FB /* AppDelegate.swift in Sources */, 2152FB042600AC8F00CF470E /* iOSApp.swift in Sources */, - 6BC0D9462C86593800E2682F /* DiProvider+Extensions.swift in Sources */, 7555FF83242A565900829871 /* ContentView.swift in Sources */, - 6BC443182B5A7D560004E68C /* AvoidDisposeViewController.swift in Sources */, + 6BB0E4E82DC4AFFC0065FAA2 /* DiProvider.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -444,7 +384,6 @@ }; 7555FFA6242A565B00829871 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A18F9A90420A7E61B00DCA58 /* Pods-iosApp.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ENTITLEMENTS = iosApp/iosApp.entitlements; @@ -457,6 +396,7 @@ "$(inherited)", "@executable_path/Frameworks", ); + OTHER_LDFLAGS = "-Wl,-ld_classic"; PRODUCT_NAME = "My Atlas - DEV"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; @@ -465,7 +405,6 @@ }; 7555FFA7242A565B00829871 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DC80F7A891192912D2E42FF3 /* Pods-iosApp.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ENTITLEMENTS = iosApp/iosApp.entitlements; @@ -478,6 +417,7 @@ "$(inherited)", "@executable_path/Frameworks", ); + OTHER_LDFLAGS = "-Wl,-ld_classic"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; diff --git a/samples/playground-ios-app/iosApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/samples/playground-ios-app/iosApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..919434a6 --- /dev/null +++ b/samples/playground-ios-app/iosApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/samples/playground-ios-app/iosApp.xcodeproj/xcshareddata/xcschemes/My Atlas - Dev.xcscheme b/samples/playground-ios-app/iosApp.xcodeproj/xcshareddata/xcschemes/My Atlas - Dev.xcscheme new file mode 100644 index 00000000..e4e8b462 --- /dev/null +++ b/samples/playground-ios-app/iosApp.xcodeproj/xcshareddata/xcschemes/My Atlas - Dev.xcscheme @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/playground-ios-app/iosApp.xcodeproj/xcshareddata/xcschemes/My Atlas.xcscheme b/samples/playground-ios-app/iosApp.xcodeproj/xcshareddata/xcschemes/My Atlas.xcscheme new file mode 100644 index 00000000..6141f4d7 --- /dev/null +++ b/samples/playground-ios-app/iosApp.xcodeproj/xcshareddata/xcschemes/My Atlas.xcscheme @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/playground-ios-app/iosApp/AppDelegate.swift b/samples/playground-ios-app/iosApp/AppDelegate.swift new file mode 100644 index 00000000..31010a6f --- /dev/null +++ b/samples/playground-ios-app/iosApp/AppDelegate.swift @@ -0,0 +1,36 @@ +import SwiftUI +import AVFAudio +import appShared + +class AppDelegate: NSObject, UIApplicationDelegate { + + func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil + ) -> Bool { + requestPIPBackgroundMode() + return true + } + + private func requestPIPBackgroundMode() { + let session = AVAudioSession.sharedInstance() + do { + try session.setCategory(.playback, mode: .moviePlayback) + } catch let error { + print(error.localizedDescription) + } + } + + func application( + _ application: UIApplication, + didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data + ) { + } + + func application( + _ application: UIApplication, + didReceiveRemoteNotification userInfo: [AnyHashable : Any] + ) async -> UIBackgroundFetchResult { + return UIBackgroundFetchResult.newData + } +} diff --git a/iosApp/iosApp/Configuration/Prod/GoogleService-Info.plist b/samples/playground-ios-app/iosApp/Configuration/Dev/GoogleService-Info.plist similarity index 82% rename from iosApp/iosApp/Configuration/Prod/GoogleService-Info.plist rename to samples/playground-ios-app/iosApp/Configuration/Dev/GoogleService-Info.plist index 1aa6c971..654ba4a0 100644 --- a/iosApp/iosApp/Configuration/Prod/GoogleService-Info.plist +++ b/samples/playground-ios-app/iosApp/Configuration/Dev/GoogleService-Info.plist @@ -9,11 +9,11 @@ PLIST_VERSION 1 BUNDLE_ID - com.sampleApp.app + com.metacto.playground.dev PROJECT_ID metactosampleapp STORAGE_BUCKET - metactosampleapp.appspot.com + metactosampleapp.firebasestorage.app IS_ADS_ENABLED IS_ANALYTICS_ENABLED @@ -25,6 +25,6 @@ IS_SIGNIN_ENABLED GOOGLE_APP_ID - 1:211134116667:ios:e2fa608754304a9e827d1e + 1:211134116667:ios:16d1ef5f078104eb827d1e \ No newline at end of file diff --git a/samples/playground-ios-app/iosApp/Configuration/Info.plist b/samples/playground-ios-app/iosApp/Configuration/Info.plist new file mode 100644 index 00000000..edb30e37 --- /dev/null +++ b/samples/playground-ios-app/iosApp/Configuration/Info.plist @@ -0,0 +1,94 @@ + + + + + CADisableMinimumFrameDurationOnPhone + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + $(DISPLAY_NAME) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleLocalizations + + en + + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0 + CFBundleURLTypes + + + CFBundleTypeRole + Editor + CFBundleURLSchemes + + com.googleusercontent.apps.413144840663-uqhdt5hj8br1o78vf5eg94b61le65sqb + com.googleusercontent.apps.413144840663-3kv8r7fcte24r6h9nkuiprov6hf8ihe3 + + + + CFBundleVersion + 1 + FirebaseDynamicLinksCustomDomains + + https://links.myatlas-health.com + + ITSAppUsesNonExemptEncryption + + LSRequiresIPhoneOS + + NSCalendarsFullAccessUsageDescription + $(PRODUCT_NAME) wants to use your Calender to add events. + NSCalendarsUsageDescription + $(PRODUCT_NAME) wants to use your Calender to add events. + NSCameraUsageDescription + $(PRODUCT_NAME) wants to use your camera to change your image. + NSContactsUsageDescription + We are using the contacts to connect you with your friends. + NSMicrophoneUsageDescription + $(PRODUCT_NAME) wants to use your camera to record video. + NSPhotoLibraryUsageDescription + $(PRODUCT_NAME) wants to use your camera to record video. + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + + UIBackgroundModes + + audio + fetch + remote-notification + + UILaunchScreen + + UILaunchStoryboardName + Launch Screen.storyboard + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/samples/playground-ios-app/iosApp/Configuration/Prod/GoogleService-Info.plist b/samples/playground-ios-app/iosApp/Configuration/Prod/GoogleService-Info.plist new file mode 100644 index 00000000..290b05c9 --- /dev/null +++ b/samples/playground-ios-app/iosApp/Configuration/Prod/GoogleService-Info.plist @@ -0,0 +1,30 @@ + + + + + API_KEY + AIzaSyDajYri8haLIsgotDqfbWTX3IoTIQHCON4 + GCM_SENDER_ID + 211134116667 + PLIST_VERSION + 1 + BUNDLE_ID + com.metacto.playground.prod + PROJECT_ID + metactosampleapp + STORAGE_BUCKET + metactosampleapp.firebasestorage.app + IS_ADS_ENABLED + + IS_ANALYTICS_ENABLED + + IS_APPINVITE_ENABLED + + IS_GCM_ENABLED + + IS_SIGNIN_ENABLED + + GOOGLE_APP_ID + 1:211134116667:ios:8bfefacbf012a64c827d1e + + \ No newline at end of file diff --git a/samples/playground-ios-app/iosApp/ContentView.swift b/samples/playground-ios-app/iosApp/ContentView.swift new file mode 100644 index 00000000..be2d77a7 --- /dev/null +++ b/samples/playground-ios-app/iosApp/ContentView.swift @@ -0,0 +1,16 @@ +import SwiftUI +import appShared + +struct ComposeView: UIViewControllerRepresentable { + func makeUIViewController(context: Context) -> UIViewController { + MainViewControllerKt.MainViewController() + } + + func updateUIViewController(_ uiViewController: UIViewController, context: Context) {} +} + +struct ContentView: View { + var body: some View { + ComposeView().ignoresSafeArea(.all) + } +} diff --git a/samples/playground-ios-app/iosApp/DiProvider.swift b/samples/playground-ios-app/iosApp/DiProvider.swift new file mode 100644 index 00000000..e6682585 --- /dev/null +++ b/samples/playground-ios-app/iosApp/DiProvider.swift @@ -0,0 +1,11 @@ +// +// DiProvider.swift +// iosApp +// +// Created by Mahmoud Elshamy on 02/05/2025. +// Copyright © 2025 orgName. All rights reserved. +// + +import appShared + +let DiProvider = appShared.DiProvider.shared diff --git a/samples/playground-ios-app/iosApp/Preview Content/Preview Assets.xcassets/Contents.json b/samples/playground-ios-app/iosApp/Preview Content/Preview Assets.xcassets/Contents.json new file mode 100644 index 00000000..4aa7c535 --- /dev/null +++ b/samples/playground-ios-app/iosApp/Preview Content/Preview Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} \ No newline at end of file diff --git a/samples/playground-ios-app/iosApp/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon.png b/samples/playground-ios-app/iosApp/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon.png new file mode 100644 index 00000000..f6002054 Binary files /dev/null and b/samples/playground-ios-app/iosApp/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon.png differ diff --git a/samples/playground-ios-app/iosApp/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json b/samples/playground-ios-app/iosApp/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..cefcc878 --- /dev/null +++ b/samples/playground-ios-app/iosApp/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,14 @@ +{ + "images" : [ + { + "filename" : "AppIcon.png", + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/samples/playground-ios-app/iosApp/Resources/Assets.xcassets/Contents.json b/samples/playground-ios-app/iosApp/Resources/Assets.xcassets/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/samples/playground-ios-app/iosApp/Resources/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/samples/playground-ios-app/iosApp/Resources/Assets.xcassets/splashLogo.imageset/Contents.json b/samples/playground-ios-app/iosApp/Resources/Assets.xcassets/splashLogo.imageset/Contents.json new file mode 100644 index 00000000..bb0b2a8c --- /dev/null +++ b/samples/playground-ios-app/iosApp/Resources/Assets.xcassets/splashLogo.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "MicrosoftTeams-image (18).png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/samples/playground-ios-app/iosApp/Resources/Assets.xcassets/splashLogo.imageset/MicrosoftTeams-image (18).png b/samples/playground-ios-app/iosApp/Resources/Assets.xcassets/splashLogo.imageset/MicrosoftTeams-image (18).png new file mode 100644 index 00000000..f4db9a6d Binary files /dev/null and b/samples/playground-ios-app/iosApp/Resources/Assets.xcassets/splashLogo.imageset/MicrosoftTeams-image (18).png differ diff --git a/samples/playground-ios-app/iosApp/Resources/Launch Screen.storyboard b/samples/playground-ios-app/iosApp/Resources/Launch Screen.storyboard new file mode 100644 index 00000000..016500d7 --- /dev/null +++ b/samples/playground-ios-app/iosApp/Resources/Launch Screen.storyboard @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/playground-ios-app/iosApp/iOSApp.swift b/samples/playground-ios-app/iosApp/iOSApp.swift new file mode 100644 index 00000000..674afbc3 --- /dev/null +++ b/samples/playground-ios-app/iosApp/iOSApp.swift @@ -0,0 +1,33 @@ +import SwiftUI +import appShared + +@main +struct iOSApp: App { + @UIApplicationDelegateAdaptor(AppDelegate.self) private var appDelegate: AppDelegate + + init() { + // Prepare environment + var environment: AppEnvironment + #if DEBUG + environment = AppEnvironment.Dev() + #else + environment = AppEnvironment.Prod() + #endif + + KoinKt.doInitKoin( + environment: environment + ) + } + + var body: some Scene { + WindowGroup { + ContentView() + .onOpenURL { url in + + }.onContinueUserActivity(NSUserActivityTypeBrowsingWeb) { activity in + if let url = activity.webpageURL?.absoluteString { + } + } + } + } +} diff --git a/samples/playground-ios-app/iosApp/iosApp.entitlements b/samples/playground-ios-app/iosApp/iosApp.entitlements new file mode 100644 index 00000000..fe5f07d9 --- /dev/null +++ b/samples/playground-ios-app/iosApp/iosApp.entitlements @@ -0,0 +1,17 @@ + + + + + aps-environment + development + com.apple.developer.applesignin + + Default + + com.apple.developer.associated-domains + + applinks:mahmoudelshamy.com + applinks:www.mahmoudelshamy.com + + + diff --git a/generate_screen.sh b/scripts/new-screen.sh similarity index 83% rename from generate_screen.sh rename to scripts/new-screen.sh index df5e0da7..24eb505f 100755 --- a/generate_screen.sh +++ b/scripts/new-screen.sh @@ -2,9 +2,8 @@ # Paths current_path="$(pwd)" -app_folder_path="${current_path}/sampleAppShared/src/commonMain/kotlin/com/sampleApp/app" - -package_name="com.sampleApp.app" +app_folder_path="${current_path}/samples/catalog-app-shared/src/commonMain/kotlin/com/metacto/catalogapp" +package_name="com.metacto.catalogapp" # Check if both feature and screen arguments are provided if [ "$#" -ne 2 ]; then @@ -27,9 +26,9 @@ contract_file_name="${screen}Contract.kt" contract_file_path="${app_folder_path}/presentation/${feature}/${screen_lower}" contract_file_content="package ${package_name}.presentation.${feature}.${screen_lower} -import com.metacto.core.presentation.base.ViewEvent -import com.metacto.core.presentation.base.ViewSideEffect -import com.metacto.core.presentation.base.ViewState +import com.metacto.core.ui.base.ViewEvent +import com.metacto.core.ui.base.ViewSideEffect +import com.metacto.core.ui.base.ViewState class ${screen}Contract { @@ -102,18 +101,17 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import ${package_name}.presentation.${feature}.${screen_lower}.${screen}Contract.Event import ${package_name}.presentation.${feature}.${screen_lower}.components.${screen}Content -import com.metacto.core.presentation.base.BaseScreen -import com.metacto.core.presentation.base.SIDE_EFFECTS_KEY -import com.metacto.core.presentation.base.rememberViewModel +import ${package_name}.presentation.base.BaseScreen +import com.metacto.core.ui.base.rememberViewModel -internal object ${screen}Screen : BaseScreen<${screen}ViewModel>() { +internal class ${screen}Screen : BaseScreen<${screen}ViewModel>() { @Composable override fun Content() { // Get the view model val viewModel = rememberViewModel<${screen}ViewModel>() // Init view model - LaunchedEffect(SIDE_EFFECTS_KEY) { + LaunchedEffect(Unit) { viewModel.setEvent(Event.Init) } @@ -140,15 +138,14 @@ content_file_name="${screen}Content.kt" content_file_path="${app_folder_path}/presentation/${feature}/${screen_lower}/components" content_file_content="package ${package_name}.presentation.${feature}.${screen_lower}.components -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.material3.Text import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import com.metacto.core.presentation.components.containers.ScreenColumn -import ${package_name}.presentation.theme.AppTheme.colors -import ${package_name}.presentation.theme.AppTheme.typography -import ${package_name}.presentation.theme.AppTheme.shapes -import ${package_name}.presentation.theme.AppTheme.spacings +import com.metacto.core.ui.navigation.NavManager +import ${package_name}.presentation.components.containers.AppScreenColumn +import org.koin.compose.koinInject +import ${package_name}.presentation.theme.colors +import ${package_name}.presentation.theme.typography +import ${package_name}.presentation.theme.shapes +import ${package_name}.presentation.theme.spacings import ${package_name}.presentation.${feature}.${screen_lower}.${screen}Contract.State import ${package_name}.presentation.${feature}.${screen_lower}.${screen}Contract.Event @@ -157,14 +154,20 @@ internal fun ${screen}Content( state: State, onEvent: (Event) -> Unit ) { + // Di + val navManager = koinInject() + // Container column - ScreenColumn( - horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.Center + AppScreenColumn( + title = \"${screen}\", + isScrollable = true, + showToolbar = true, + showBack = true, + onBackClick = { + navManager.goBack() + }, ) { - Text( - text = \"${screen} Screen\" - ) + // TODO: Render content } }" diff --git a/settings.gradle.kts b/settings.gradle.kts index 8a572c20..44c09555 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,4 +1,20 @@ -rootProject.name = "CoreApp" -include(":sampleAppShared") -include(":coreapp") -include(":androidApp") \ No newline at end of file +rootProject.name = "CmpCore" + +include(":version-catalog") + +include(":core:core") +include(":core:sample") +include(":core:files") +include(":core:notifications") +include(":core:phone-core") + +include(":ui:core-ui") +include(":ui:sample") +include(":ui:media-players") +include(":ui:camera") +include(":ui:youtube") +include(":ui:phone-ui") +include(":ui:image-picker") + +include(":samples:catalog-app-shared") +include(":samples:playground-app-shared") \ No newline at end of file diff --git a/ui/camera/build.gradle.kts b/ui/camera/build.gradle.kts new file mode 100644 index 00000000..29284d48 --- /dev/null +++ b/ui/camera/build.gradle.kts @@ -0,0 +1,142 @@ +import com.android.build.gradle.internal.cxx.configure.gradleLocalProperties +import org.jetbrains.kotlin.gradle.plugin.mpp.apple.XCFramework +import org.jetbrains.kotlin.konan.properties.Properties +import java.io.FileInputStream +import java.io.FileOutputStream + +plugins { + alias(libs.plugins.multiplatform) + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.parcelize) + alias(libs.plugins.compose) + alias(libs.plugins.kotlin.compose) + alias(libs.plugins.maven.publish) + alias(libs.plugins.signing) +} + +private val versionProperties = Properties().apply { + load(FileInputStream(File(rootProject.rootDir, Configs.VERSIONS_PROPERTIES))) +} + +private val currentVersion = versionProperties.getProperty(Configs.PUBLISH_VERSION) as String +private val libName = "camera" +private val libNamespace = "com.metacto.core.ui.camera" + +version = currentVersion +group = Configs.GROUP_ID + +kotlin { + androidTarget { + compilerOptions { + freeCompilerArgs.addAll("-P", "plugin:org.jetbrains.kotlin.parcelize:additionalAnnotation=com.metacto.kmm.core.CommonParcelize") + } + compilations.all { + kotlinOptions { + jvmTarget = libs.versions.jvm.get() + } + } + publishLibraryVariants("debug", "release") + } + + val xcf = XCFramework() + listOf( + iosX64(), + iosArm64(), + iosSimulatorArm64() + ).forEach { + it.binaries.framework(libName) { + baseName = libName + xcf.add(this) + isStatic = true + } + } + + metadata { + compilations.matching { it.name == "iosMain" }.all { + compileTaskProvider.configure { enabled = false } + } + } + + sourceSets { + commonMain.dependencies { + // Core UI + implementation(project(":ui:core-ui")) + } + + androidMain.dependencies { + // Camera X + implementation(libs.camera.view) + implementation(libs.camera.camera2) + implementation(libs.camera.core) + implementation(libs.camera.lifecycle) + implementation(libs.camera.video) + } + + iosMain.dependencies { + // IOS DEPENDENCIES + } + } + + task("testClasses") +} + +android { + namespace = libNamespace + compileSdk = libs.versions.compileSdk.get().toInt() + + sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml") + sourceSets["main"].res.srcDirs("src/androidMain/res") + sourceSets["main"].resources.srcDirs("src/commonMain/resources") + sourceSets["main"].res.srcDirs("src/androidMain/res", "src/commonMain/resources") + + defaultConfig { + minSdk = libs.versions.minSdk.get().toInt() + targetSdk = libs.versions.targetSdk.get().toInt() + consumerProguardFiles("consumer-rules.pro") + } + compileOptions { + sourceCompatibility = JavaVersion.toVersion(libs.versions.jvm.get()) + targetCompatibility = JavaVersion.toVersion(libs.versions.jvm.get()) + } +} + +compose.resources { + publicResClass = false + packageOfResClass = "$libNamespace.resources" + generateResClass = always +} + +publishing { + repositories { + val localProperties = gradleLocalProperties(rootDir, providers) + var publishUserRepo = localProperties.getProperty(Configs.PUBLISH_REPO_USER) + var publishTokenRepo = localProperties.getProperty(Configs.PUBLISH_REPO_TOKEN) + + if (publishUserRepo.isNullOrEmpty()) { + publishUserRepo = "" + localProperties.setProperty(Configs.PUBLISH_REPO_USER, publishUserRepo) + } + + if (publishTokenRepo.isNullOrEmpty()) { + publishTokenRepo = "" + localProperties.setProperty(Configs.PUBLISH_REPO_TOKEN, publishTokenRepo) + } + + if (publishUserRepo.isEmpty() || publishTokenRepo.isEmpty()) { + localProperties.store( + FileOutputStream(File(rootDir, Configs.LOCAL_PROPERTIES)), null + ) + } + + repositories { + maven(Configs.MAVEN_URL) { + name = Configs.PUBLISH_MAVEN_REPO_NAME + credentials { + username = publishUserRepo + password = publishTokenRepo + } + } + } + } +} + diff --git a/coreapp/src/androidMain/AndroidManifest.xml b/ui/camera/src/androidMain/AndroidManifest.xml similarity index 53% rename from coreapp/src/androidMain/AndroidManifest.xml rename to ui/camera/src/androidMain/AndroidManifest.xml index 1ff38829..ae5f4319 100644 --- a/coreapp/src/androidMain/AndroidManifest.xml +++ b/ui/camera/src/androidMain/AndroidManifest.xml @@ -1,23 +1,9 @@ - - - - - - - - - - + val cameraEngine = com.metacto.core.ui.camera.CameraEngine( + context = androidContext(), + defaultCamera = defaultCamera ?: CameraLens.BACK + ) + CameraController( + permissionManager = get(), + cameraEngine = cameraEngine + ) + } +} \ No newline at end of file diff --git a/ui/camera/src/androidMain/res/xml/file_paths.xml b/ui/camera/src/androidMain/res/xml/file_paths.xml new file mode 100644 index 00000000..a35c4b1d --- /dev/null +++ b/ui/camera/src/androidMain/res/xml/file_paths.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/camera/CameraController.kt b/ui/camera/src/commonMain/kotlin/com/metacto/core/ui/camera/CameraController.kt similarity index 75% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/camera/CameraController.kt rename to ui/camera/src/commonMain/kotlin/com/metacto/core/ui/camera/CameraController.kt index cef26516..ddc306d5 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/camera/CameraController.kt +++ b/ui/camera/src/commonMain/kotlin/com/metacto/core/ui/camera/CameraController.kt @@ -1,10 +1,10 @@ -package com.metacto.core.presentation.camera +package com.metacto.core.ui.camera -import com.metacto.core.permissions.IPermissionManager -import com.metacto.core.permissions.enums.Permission -import com.metacto.core.presentation.camera.models.CameraLens -import com.metacto.core.presentation.camera.models.VideoRecordingParams -import com.metacto.core.presentation.camera.models.VideoRecordingResult +import com.metacto.core.ui.camera.models.CameraLens +import com.metacto.core.ui.camera.models.VideoRecordingParams +import com.metacto.core.ui.camera.models.VideoRecordingResult +import com.metacto.core.ui.permissions.IPermissionManager +import com.metacto.core.ui.permissions.enums.Permission class CameraController( private val permissionManager: IPermissionManager, diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/camera/CameraEngine.kt b/ui/camera/src/commonMain/kotlin/com/metacto/core/ui/camera/CameraEngine.kt similarity index 59% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/camera/CameraEngine.kt rename to ui/camera/src/commonMain/kotlin/com/metacto/core/ui/camera/CameraEngine.kt index f608c2b5..afc48882 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/camera/CameraEngine.kt +++ b/ui/camera/src/commonMain/kotlin/com/metacto/core/ui/camera/CameraEngine.kt @@ -1,8 +1,9 @@ -package com.metacto.core.presentation.camera +package com.metacto.core.ui.camera + +import com.metacto.core.ui.camera.models.CameraLens +import com.metacto.core.ui.camera.models.VideoRecordingParams +import com.metacto.core.ui.camera.models.VideoRecordingResult -import com.metacto.core.presentation.camera.models.CameraLens -import com.metacto.core.presentation.camera.models.VideoRecordingParams -import com.metacto.core.presentation.camera.models.VideoRecordingResult expect class CameraEngine { val defaultCamera: CameraLens diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/camera/CameraPreview.kt b/ui/camera/src/commonMain/kotlin/com/metacto/core/ui/camera/CameraPreview.kt similarity index 91% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/camera/CameraPreview.kt rename to ui/camera/src/commonMain/kotlin/com/metacto/core/ui/camera/CameraPreview.kt index 932a3ea9..f5831d35 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/camera/CameraPreview.kt +++ b/ui/camera/src/commonMain/kotlin/com/metacto/core/ui/camera/CameraPreview.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.camera +package com.metacto.core.ui.camera import androidx.compose.foundation.layout.Box import androidx.compose.runtime.Composable @@ -8,8 +8,8 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier -import com.metacto.core.permissions.IPermissionManager -import com.metacto.core.permissions.enums.Permission +import com.metacto.core.ui.permissions.IPermissionManager +import com.metacto.core.ui.permissions.enums.Permission import org.koin.compose.koinInject @Composable diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/camera/CameraPreviewView.kt b/ui/camera/src/commonMain/kotlin/com/metacto/core/ui/camera/CameraPreviewView.kt similarity index 81% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/camera/CameraPreviewView.kt rename to ui/camera/src/commonMain/kotlin/com/metacto/core/ui/camera/CameraPreviewView.kt index 2c076915..c7720b1b 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/camera/CameraPreviewView.kt +++ b/ui/camera/src/commonMain/kotlin/com/metacto/core/ui/camera/CameraPreviewView.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.camera +package com.metacto.core.ui.camera import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier diff --git a/ui/camera/src/commonMain/kotlin/com/metacto/core/ui/camera/di/Di.kt b/ui/camera/src/commonMain/kotlin/com/metacto/core/ui/camera/di/Di.kt new file mode 100644 index 00000000..5eaa5cc2 --- /dev/null +++ b/ui/camera/src/commonMain/kotlin/com/metacto/core/ui/camera/di/Di.kt @@ -0,0 +1,12 @@ +package com.metacto.core.ui.camera.di + +import org.koin.core.module.Module +import org.koin.dsl.module + +fun cameraModule() = module { + // Common dependencies can be added here + + includes(platformModule()) +} + +internal expect fun platformModule(): Module \ No newline at end of file diff --git a/ui/camera/src/commonMain/kotlin/com/metacto/core/ui/camera/models/CameraLens.kt b/ui/camera/src/commonMain/kotlin/com/metacto/core/ui/camera/models/CameraLens.kt new file mode 100644 index 00000000..6c1b3b70 --- /dev/null +++ b/ui/camera/src/commonMain/kotlin/com/metacto/core/ui/camera/models/CameraLens.kt @@ -0,0 +1,6 @@ +package com.metacto.core.ui.camera.models + +enum class CameraLens { + FRONT, + BACK +} \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/camera/models/VideoRecordingParams.kt b/ui/camera/src/commonMain/kotlin/com/metacto/core/ui/camera/models/VideoRecordingParams.kt similarity index 61% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/camera/models/VideoRecordingParams.kt rename to ui/camera/src/commonMain/kotlin/com/metacto/core/ui/camera/models/VideoRecordingParams.kt index 7647b53e..ce01ce28 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/camera/models/VideoRecordingParams.kt +++ b/ui/camera/src/commonMain/kotlin/com/metacto/core/ui/camera/models/VideoRecordingParams.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.camera.models +package com.metacto.core.ui.camera.models data class VideoRecordingParams( val fileName: String = "recorded_video.mov" diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/camera/models/VideoRecordingResult.kt b/ui/camera/src/commonMain/kotlin/com/metacto/core/ui/camera/models/VideoRecordingResult.kt similarity index 53% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/camera/models/VideoRecordingResult.kt rename to ui/camera/src/commonMain/kotlin/com/metacto/core/ui/camera/models/VideoRecordingResult.kt index 365a62b3..f8d0a217 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/camera/models/VideoRecordingResult.kt +++ b/ui/camera/src/commonMain/kotlin/com/metacto/core/ui/camera/models/VideoRecordingResult.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.camera.models +package com.metacto.core.ui.camera.models data class VideoRecordingResult( val videoPath: String diff --git a/coreapp/src/iosMain/kotlin/com/metacto/core/presentation/camera/CameraEngine.kt b/ui/camera/src/iosMain/kotlin/com/metacto/core/ui/camera/CameraEngine.kt similarity index 96% rename from coreapp/src/iosMain/kotlin/com/metacto/core/presentation/camera/CameraEngine.kt rename to ui/camera/src/iosMain/kotlin/com/metacto/core/ui/camera/CameraEngine.kt index 769e43d7..51306aa4 100644 --- a/coreapp/src/iosMain/kotlin/com/metacto/core/presentation/camera/CameraEngine.kt +++ b/ui/camera/src/iosMain/kotlin/com/metacto/core/ui/camera/CameraEngine.kt @@ -1,10 +1,10 @@ -package com.metacto.core.presentation.camera +package com.metacto.core.ui.camera -import com.metacto.core.presentation.camera.models.CameraLens -import com.metacto.core.presentation.camera.models.VideoRecordingParams -import com.metacto.core.presentation.camera.models.VideoRecordingResult -import com.metacto.core.utils.extensions.runOnIOThread -import com.metacto.strapikmm.util.resumeIfActive +import com.metacto.core.extensions.resumeIfActive +import com.metacto.core.extensions.runOnIOThread +import com.metacto.core.ui.camera.models.CameraLens +import com.metacto.core.ui.camera.models.VideoRecordingParams +import com.metacto.core.ui.camera.models.VideoRecordingResult import kotlinx.cinterop.ExperimentalForeignApi import kotlinx.coroutines.suspendCancellableCoroutine import platform.AVFoundation.AVCaptureDevice diff --git a/coreapp/src/iosMain/kotlin/com/metacto/core/presentation/camera/CameraPreviewView.kt b/ui/camera/src/iosMain/kotlin/com/metacto/core/ui/camera/CameraPreviewView.kt similarity index 60% rename from coreapp/src/iosMain/kotlin/com/metacto/core/presentation/camera/CameraPreviewView.kt rename to ui/camera/src/iosMain/kotlin/com/metacto/core/ui/camera/CameraPreviewView.kt index 4c1faea8..020f4ebd 100644 --- a/coreapp/src/iosMain/kotlin/com/metacto/core/presentation/camera/CameraPreviewView.kt +++ b/ui/camera/src/iosMain/kotlin/com/metacto/core/ui/camera/CameraPreviewView.kt @@ -1,11 +1,9 @@ -package com.metacto.core.presentation.camera +package com.metacto.core.ui.camera import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.compose.ui.interop.UIKitViewController -import kotlinx.cinterop.ExperimentalForeignApi +import androidx.compose.ui.viewinterop.UIKitViewController -@OptIn(ExperimentalForeignApi::class) @Composable internal actual fun CameraPreviewView( modifier: Modifier, diff --git a/ui/camera/src/iosMain/kotlin/com/metacto/core/ui/camera/di/Di.ios.kt b/ui/camera/src/iosMain/kotlin/com/metacto/core/ui/camera/di/Di.ios.kt new file mode 100644 index 00000000..a548e795 --- /dev/null +++ b/ui/camera/src/iosMain/kotlin/com/metacto/core/ui/camera/di/Di.ios.kt @@ -0,0 +1,20 @@ +package com.metacto.core.ui.camera.di + +import com.metacto.core.ui.camera.CameraController +import com.metacto.core.ui.camera.CameraEngine +import com.metacto.core.ui.camera.models.CameraLens +import org.koin.dsl.module + +internal actual fun platformModule() = module { + // Add iOS specific dependencies here + + factory { (defaultCamera: CameraLens?) -> + val cameraEngine = CameraEngine( + defaultCamera = defaultCamera ?: CameraLens.BACK + ) + CameraController( + permissionManager = get(), + cameraEngine = cameraEngine + ) + } +} \ No newline at end of file diff --git a/ui/core-ui/build.gradle.kts b/ui/core-ui/build.gradle.kts new file mode 100644 index 00000000..ff730587 --- /dev/null +++ b/ui/core-ui/build.gradle.kts @@ -0,0 +1,164 @@ +import com.android.build.gradle.internal.cxx.configure.gradleLocalProperties +import org.jetbrains.kotlin.gradle.plugin.mpp.apple.XCFramework +import org.jetbrains.kotlin.konan.properties.Properties +import java.io.FileInputStream +import java.io.FileOutputStream + +plugins { + alias(libs.plugins.multiplatform) + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.parcelize) + alias(libs.plugins.compose) + alias(libs.plugins.kotlin.compose) + alias(libs.plugins.maven.publish) + alias(libs.plugins.signing) +} + + +private val versionProperties = Properties().apply { + load(FileInputStream(File(rootProject.rootDir, Configs.VERSIONS_PROPERTIES))) +} + +private val currentVersion = versionProperties.getProperty(Configs.PUBLISH_VERSION) as String +private val libName = "core-ui" +private val libNamespace = "com.metacto.core.ui" + +version = currentVersion +group = Configs.GROUP_ID + +kotlin { + androidTarget { + compilerOptions { + freeCompilerArgs.addAll("-P", "plugin:org.jetbrains.kotlin.parcelize:additionalAnnotation=com.metacto.kmm.core.CommonParcelize") + } + compilations.all { + kotlinOptions { + jvmTarget = libs.versions.jvm.get() + } + } + publishLibraryVariants("debug", "release") + } + + val xcf = XCFramework() + listOf( + iosX64(), + iosArm64(), + iosSimulatorArm64() + ).forEach { + it.binaries.framework(libName) { + baseName = libName + xcf.add(this) + isStatic = true + } + } + + metadata { + compilations.matching { it.name == "iosMain" }.all { + compileTaskProvider.configure { enabled = false } + } + } + + sourceSets { + commonMain.dependencies { + // Core + api(project(":core:core")) + + // Compose + api(libs.compose.runtime) + api(libs.compose.foundation) + implementation(libs.compose.material) + api(libs.compose.material3) + api(libs.compose.animation) + api(libs.compose.animationgraphics) + api(libs.compose.icons) + api(libs.compose.resources) + + // Voyager + implementation(libs.voyager.navigator) + implementation(libs.voyager.bottomsheet) + api(libs.voyager.screenmodel) + + // Coil + implementation(libs.coil) + implementation(libs.coil.compose) + implementation(libs.coil.network) + implementation(libs.coil.svg) + + // Others + api(libs.compottie) + implementation(libs.shimmer) + } + + androidMain.dependencies { + // AndroidX + api(libs.android.appcompat) + api(libs.android.activitycompose) + api(libs.android.corektx) + api(libs.android.splashscreen) + + // Voyager + implementation(libs.voyager.koin) + } + + iosMain.dependencies { + implementation(libs.compose.material) + } + } + + task("testClasses") +} + +android { + namespace = libNamespace + compileSdk = libs.versions.compileSdk.get().toInt() + sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml") + defaultConfig { + minSdk = libs.versions.minSdk.get().toInt() + targetSdk = libs.versions.targetSdk.get().toInt() + consumerProguardFiles("consumer-rules.pro") + } + compileOptions { + sourceCompatibility = JavaVersion.toVersion(libs.versions.jvm.get()) + targetCompatibility = JavaVersion.toVersion(libs.versions.jvm.get()) + } +} + +compose.resources { + publicResClass = false + packageOfResClass = "$libNamespace.resources" + generateResClass = always +} + +publishing { + repositories { + val localProperties = gradleLocalProperties(rootDir, providers) + var publishUserRepo = localProperties.getProperty(Configs.PUBLISH_REPO_USER) + var publishTokenRepo = localProperties.getProperty(Configs.PUBLISH_REPO_TOKEN) + + if (publishUserRepo.isNullOrEmpty()) { + publishUserRepo = "" + localProperties.setProperty(Configs.PUBLISH_REPO_USER, publishUserRepo) + } + + if (publishTokenRepo.isNullOrEmpty()) { + publishTokenRepo = "" + localProperties.setProperty(Configs.PUBLISH_REPO_TOKEN, publishTokenRepo) + } + + if (publishUserRepo.isEmpty() || publishTokenRepo.isEmpty()) { + localProperties.store( + FileOutputStream(File(rootDir, Configs.LOCAL_PROPERTIES)), null + ) + } + + repositories { + maven(Configs.MAVEN_URL) { + name = Configs.PUBLISH_MAVEN_REPO_NAME + credentials { + username = publishUserRepo + password = publishTokenRepo + } + } + } + } +} \ No newline at end of file diff --git a/ui/core-ui/src/androidMain/AndroidManifest.xml b/ui/core-ui/src/androidMain/AndroidManifest.xml new file mode 100644 index 00000000..9e89e8c7 --- /dev/null +++ b/ui/core-ui/src/androidMain/AndroidManifest.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/presentation/base/CommonViewModel.kt b/ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/base/CommonViewModel.kt similarity index 66% rename from coreapp/src/androidMain/kotlin/com/metacto/core/presentation/base/CommonViewModel.kt rename to ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/base/CommonViewModel.kt index bb199d0d..e510d9ad 100644 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/presentation/base/CommonViewModel.kt +++ b/ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/base/CommonViewModel.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.base +package com.metacto.core.ui.base import androidx.lifecycle.ViewModel diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/presentation/components/dialog/FullScreenDialog.kt b/ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/components/dialog/FullScreenDialog.kt similarity index 85% rename from coreapp/src/androidMain/kotlin/com/metacto/core/presentation/components/dialog/FullScreenDialog.kt rename to ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/components/dialog/FullScreenDialog.kt index b6b61b13..8055c717 100644 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/presentation/components/dialog/FullScreenDialog.kt +++ b/ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/components/dialog/FullScreenDialog.kt @@ -1,6 +1,7 @@ -package com.metacto.core.presentation.components.dialog +package com.metacto.core.ui.components.dialog import android.app.Dialog +import android.content.DialogInterface import android.os.Bundle import android.view.ViewGroup import androidx.appcompat.app.AppCompatActivity @@ -21,6 +22,7 @@ private const val FULLSCREEN_DIALOG_TAG = "fullscreen-dialog" class FullScreenComposeDialog( val backgroundColor: Color, + val onDismissCallback: (() -> Unit)? = null, val content: @Composable BoxScope.() -> Unit ) : DialogFragment() { @@ -53,14 +55,21 @@ class FullScreenComposeDialog( return dialog } + + override fun onDismiss(dialog: DialogInterface) { + super.onDismiss(dialog) + onDismissCallback?.invoke() + } } -fun AppCompatActivity.showFullScreenDialog( +fun FragmentActivity.showFullScreenDialog( backgroundColor: Color = Color.Black, + onDismiss: (() -> Unit)? = null, content: @Composable BoxScope.() -> Unit ) { FullScreenComposeDialog( backgroundColor = backgroundColor, + onDismissCallback = onDismiss, content = content ).show(supportFragmentManager, FULLSCREEN_DIALOG_TAG) } diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/presentation/itemPicker/ItemPickerSheet.kt b/ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/components/itemPicker/ItemPickerSheet.kt similarity index 65% rename from coreapp/src/androidMain/kotlin/com/metacto/core/presentation/itemPicker/ItemPickerSheet.kt rename to ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/components/itemPicker/ItemPickerSheet.kt index d0d0c134..02a4cce9 100644 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/presentation/itemPicker/ItemPickerSheet.kt +++ b/ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/components/itemPicker/ItemPickerSheet.kt @@ -1,14 +1,13 @@ -package com.metacto.core.presentation.itemPicker +package com.metacto.core.ui.components.itemPicker import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect -import com.metacto.core.presentation.base.BaseSheet -import com.metacto.core.presentation.base.SIDE_EFFECTS_KEY -import com.metacto.core.presentation.base.rememberViewModel -import com.metacto.core.presentation.itemPicker.ItemPickerContract.Event -import com.metacto.core.presentation.itemPicker.components.ItemPickerContent -import com.metacto.core.presentation.itemPicker.models.PickerItem -import com.metacto.core.utils.PlatformType +import com.metacto.core.PlatformType +import com.metacto.core.ui.base.CoreSheet +import com.metacto.core.ui.base.rememberViewModel +import com.metacto.core.ui.components.itemPicker.ItemPickerContract.Event +import com.metacto.core.ui.components.itemPicker.components.ItemPickerContent +import com.metacto.core.ui.components.itemPicker.models.PickerItem actual class ItemPickerSheet actual constructor( actual val items: List, @@ -17,14 +16,14 @@ actual class ItemPickerSheet actual constructor( actual val visibleItemCount: Int, actual val canSearch: Boolean, actual val platform: PlatformType? -) : BaseSheet() { +) : CoreSheet() { @Composable override fun Content() { val viewModel = rememberViewModel() // Init view model - LaunchedEffect(SIDE_EFFECTS_KEY) { + LaunchedEffect(Unit) { viewModel.setEvent( Event.Init( items = items, diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/presentation/itemPicker/NativeItemPicker.kt b/ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/components/itemPicker/NativeItemPicker.kt similarity index 71% rename from coreapp/src/androidMain/kotlin/com/metacto/core/presentation/itemPicker/NativeItemPicker.kt rename to ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/components/itemPicker/NativeItemPicker.kt index a6b3752e..4e0e04f5 100644 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/presentation/itemPicker/NativeItemPicker.kt +++ b/ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/components/itemPicker/NativeItemPicker.kt @@ -1,6 +1,6 @@ -package com.metacto.core.presentation.itemPicker +package com.metacto.core.ui.components.itemPicker -import com.metacto.core.presentation.itemPicker.models.PickerItem +import com.metacto.core.ui.components.itemPicker.models.PickerItem internal actual class NativeItemPicker { actual fun display( diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/presentation/options/OptionsSheet.kt b/ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/components/options/OptionsSheet.kt similarity index 56% rename from coreapp/src/androidMain/kotlin/com/metacto/core/presentation/options/OptionsSheet.kt rename to ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/components/options/OptionsSheet.kt index 6a949f83..3d8eca30 100644 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/presentation/options/OptionsSheet.kt +++ b/ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/components/options/OptionsSheet.kt @@ -1,17 +1,16 @@ -package com.metacto.core.presentation.options +package com.metacto.core.ui.components.options import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect -import com.metacto.core.presentation.base.BaseSheet -import com.metacto.core.presentation.base.SIDE_EFFECTS_KEY -import com.metacto.core.presentation.base.rememberViewModel -import com.metacto.core.presentation.options.OptionsContract.Event -import com.metacto.core.presentation.options.components.OptionsContent -import com.metacto.core.presentation.options.models.OptionUIModel +import com.metacto.core.ui.base.CoreSheet +import com.metacto.core.ui.base.rememberViewModel +import com.metacto.core.ui.components.options.components.OptionsContent +import com.metacto.core.ui.components.options.models.OptionUIModel +import com.metacto.core.ui.components.options.OptionsContract.Event actual class OptionsSheet actual constructor( actual val options: List -) : BaseSheet() { +) : CoreSheet() { @Composable override fun Content() { @@ -19,7 +18,7 @@ actual class OptionsSheet actual constructor( val viewModel = rememberViewModel() // Init view model - LaunchedEffect(SIDE_EFFECTS_KEY) { + LaunchedEffect(Unit) { viewModel.setEvent( Event.Init( options = options diff --git a/ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/components/pickers/NativeDatePicker.kt b/ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/components/pickers/NativeDatePicker.kt new file mode 100644 index 00000000..a1f9afa7 --- /dev/null +++ b/ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/components/pickers/NativeDatePicker.kt @@ -0,0 +1,28 @@ +package com.metacto.core.ui.components.pickers + +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.unit.DpSize +import com.metacto.core.ui.components.wheelPicker.datetime.WheelDatePicker +import kotlinx.datetime.LocalDate + +@Composable +actual fun NativeDatePicker( + onSnappedDate: (LocalDate) -> Unit, + minDate: LocalDate, + maxDate: LocalDate, + startDate: LocalDate, + size: DpSize, + modifier: Modifier, + backgroundColor: Color +) { + WheelDatePicker( + onSnappedDate = onSnappedDate, + minDate = minDate, + maxDate = maxDate, + startDate = startDate, + size = size, + modifier = modifier + ) +} diff --git a/ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/di/Di.android.kt b/ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/di/Di.android.kt new file mode 100644 index 00000000..73e8c0ae --- /dev/null +++ b/ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/di/Di.android.kt @@ -0,0 +1,39 @@ +package com.metacto.core.ui.di + +import com.metacto.core.ui.components.itemPicker.NativeItemPicker +import com.metacto.core.ui.imagePreloader.IPreloader +import com.metacto.core.ui.imagePreloader.Preloader +import com.metacto.core.ui.launchers.IIntentLauncher +import com.metacto.core.ui.launchers.IntentLauncher +import com.metacto.core.ui.media.IMediaManager +import com.metacto.core.ui.media.MediaManager +import com.metacto.core.ui.permissions.IPermissionManager +import com.metacto.core.ui.permissions.PermissionManager +import org.koin.android.ext.koin.androidContext +import org.koin.dsl.module + +internal actual fun platformModule() = module { + // Add Android specific dependencies here + + single { + PermissionManager(androidContext()) + } + + single { + Preloader( + context = androidContext().applicationContext + ) + } + + single { + IntentLauncher(androidContext(), get()) + } + + single { + MediaManager(androidContext()) + } + + single { + NativeItemPicker() + } +} \ No newline at end of file diff --git a/ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/di/KoinExtensions.android.kt b/ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/di/KoinExtensions.android.kt new file mode 100644 index 00000000..d0413169 --- /dev/null +++ b/ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/di/KoinExtensions.android.kt @@ -0,0 +1,15 @@ +package com.metacto.core.ui.di + +import com.metacto.core.ui.base.CommonViewModel +import org.koin.androidx.viewmodel.dsl.viewModel +import org.koin.core.definition.Definition +import org.koin.core.definition.KoinDefinition +import org.koin.core.module.Module +import org.koin.core.qualifier.Qualifier + +actual inline fun Module.commonViewModel( + qualifier: Qualifier?, + noinline definition: Definition +): KoinDefinition { + return viewModel(qualifier, definition) +} \ No newline at end of file diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/extensions/ComposeExtensions.android.kt b/ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/extensions/ComposeExtensions.android.kt similarity index 91% rename from coreapp/src/androidMain/kotlin/com/metacto/core/utils/extensions/ComposeExtensions.android.kt rename to ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/extensions/ComposeExtensions.android.kt index 02a5f3ee..b0ea1e2a 100644 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/extensions/ComposeExtensions.android.kt +++ b/ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/extensions/ComposeExtensions.android.kt @@ -1,4 +1,4 @@ -package com.metacto.core.utils.extensions +package com.metacto.core.ui.extensions import android.annotation.SuppressLint import android.graphics.BitmapFactory @@ -18,13 +18,10 @@ import androidx.core.view.WindowInsetsControllerCompat import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleEventObserver import androidx.lifecycle.compose.LocalLifecycleOwner -import io.michaelrocks.libphonenumber.kotlin.MetadataLoader -import io.michaelrocks.libphonenumber.kotlin.metadata.source.AssetsMetadataLoader - -@Composable -actual fun defaultMetadataLoader(): MetadataLoader { - return AssetsMetadataLoader(LocalContext.current.applicationContext.assets) -} +import com.metacto.core.extensions.NAVIGATION_BAR_INTERACTION_MODE_GESTURE +import com.metacto.core.extensions.getActivity +import com.metacto.core.extensions.getNavigationBarInteractionMode +import com.metacto.core.extensions.openUrl @SuppressLint("ComposableNaming") @Composable diff --git a/ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/extensions/ImageExtensions.kt b/ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/extensions/ImageExtensions.kt new file mode 100644 index 00000000..f544faea --- /dev/null +++ b/ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/extensions/ImageExtensions.kt @@ -0,0 +1,96 @@ +package com.metacto.core.ui.extensions + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.BitmapFactory +import android.graphics.Matrix +import android.media.ExifInterface +import android.net.Uri +import coil3.ImageLoader +import coil3.request.ImageRequest +import coil3.request.SuccessResult +import coil3.request.allowHardware +import coil3.toBitmap +import java.io.ByteArrayOutputStream + +suspend fun String.downloadBitmap(context: Context): Bitmap? { + val loader = ImageLoader(context) + val request = ImageRequest.Builder(context) + .data(this) + .allowHardware(false) + .build() + + return when (val result = loader.execute(request)) { + is SuccessResult -> result.image.toBitmap() + else -> null + } +} + +/** + * Normalizes the image orientation based on EXIF data and returns the corrected byte array + */ +fun Uri.normalizeImageOrientation(context: Context): ByteArray? { + return try { + // Read the image bytes + val inputStream = context.contentResolver.openInputStream(this) ?: return null + val originalBytes = inputStream.use { it.readBytes() } + + // Decode the bitmap + val bitmap = BitmapFactory.decodeByteArray(originalBytes, 0, originalBytes.size) + ?: return originalBytes + + // Read EXIF orientation + val exif = context.contentResolver.openInputStream(this)?.use { stream -> + ExifInterface(stream) + } + + val orientation = exif?.getAttributeInt( + ExifInterface.TAG_ORIENTATION, + ExifInterface.ORIENTATION_NORMAL + ) ?: ExifInterface.ORIENTATION_NORMAL + + // Calculate rotation angle + val rotationAngle = when (orientation) { + ExifInterface.ORIENTATION_ROTATE_90 -> 90f + ExifInterface.ORIENTATION_ROTATE_180 -> 180f + ExifInterface.ORIENTATION_ROTATE_270 -> 270f + else -> 0f + } + + // If no rotation needed, return original bytes + if (rotationAngle == 0f) { + return originalBytes + } + + // Rotate the bitmap + val matrix = Matrix().apply { + postRotate(rotationAngle) + } + + val rotatedBitmap = Bitmap.createBitmap( + bitmap, + 0, + 0, + bitmap.width, + bitmap.height, + matrix, + true + ) + + // Convert back to byte array + val outputStream = ByteArrayOutputStream() + rotatedBitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream) + val result = outputStream.toByteArray() + + // Clean up + if (rotatedBitmap != bitmap) { + rotatedBitmap.recycle() + } + bitmap.recycle() + + result + } catch (e: Throwable) { + e.printStackTrace() + null + } +} \ No newline at end of file diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/extensions/ViewExtensions.kt b/ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/extensions/ViewExtensions.kt similarity index 87% rename from coreapp/src/androidMain/kotlin/com/metacto/core/utils/extensions/ViewExtensions.kt rename to ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/extensions/ViewExtensions.kt index b943b06d..6c792ee2 100644 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/extensions/ViewExtensions.kt +++ b/ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/extensions/ViewExtensions.kt @@ -1,4 +1,4 @@ -package com.metacto.core.utils.extensions +package com.metacto.core.ui.extensions import android.view.View import android.view.inputmethod.InputMethodManager diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/launchers/IntentLauncher.kt b/ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/launchers/IntentLauncher.kt similarity index 64% rename from coreapp/src/androidMain/kotlin/com/metacto/core/utils/launchers/IntentLauncher.kt rename to ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/launchers/IntentLauncher.kt index de876ae9..3a9a892d 100644 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/launchers/IntentLauncher.kt +++ b/ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/launchers/IntentLauncher.kt @@ -1,40 +1,53 @@ -package com.metacto.core.utils.launchers +package com.metacto.core.ui.launchers import android.content.ActivityNotFoundException import android.content.Context import android.content.Intent +import android.content.pm.PackageManager import android.net.Uri import android.provider.CalendarContract import android.provider.CalendarContract.Events import android.widget.Toast import androidx.core.content.ContextCompat import androidx.core.content.FileProvider -import com.metacto.core.utils.extensions.openAppSettings -import com.metacto.core.utils.resources.IResourceProvider -import com.metacto.coreApp.resources.Res -import com.metacto.coreApp.resources.no_browser_installed -import com.metacto.coreApp.resources.no_email_apps_found_on_your_device -import com.metacto.coreApp.resources.no_phone_apps_found_on_your_device -import com.metacto.strapikmm.util.toEpochMilliseconds +import com.metacto.core.extensions.openAppSettings +import com.metacto.core.ui.resources.IResourceProvider +import com.metacto.core.ui.resources.Res +import com.metacto.core.ui.resources.no_browser_installed +import com.metacto.core.ui.resources.no_email_apps_found_on_your_device +import com.metacto.core.ui.resources.no_phone_apps_found_on_your_device import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import kotlinx.datetime.LocalDateTime import java.io.File import java.net.URL import java.util.Locale +import androidx.core.net.toUri +import com.metacto.core.date.toMillis class IntentLauncher( private val context: Context, private val resourceProvider: IResourceProvider ) : IIntentLauncher { + private val browserPackages = listOf( + "com.android.chrome", + "com.chrome.beta", + "com.chrome.dev", + "org.mozilla.firefox", + "com.opera.browser", + "com.microsoft.emmx", + "com.brave.browser", + "com.samsung.android.app.sbrowser" + ) + override fun launchEmail( email: String, subject: String?, body: String? ) = try { val intent = Intent(Intent.ACTION_SENDTO).apply { - data = Uri.parse("mailto:") + data = "mailto:".toUri() flags = Intent.FLAG_ACTIVITY_NEW_TASK putExtra(Intent.EXTRA_EMAIL, arrayOf(email)) @@ -58,7 +71,7 @@ class IntentLauncher( override fun launchAppInStore(appId: String) { try { val intent = Intent(Intent.ACTION_VIEW).apply { - data = Uri.parse("market://details?id=$appId") + data = "market://details?id=$appId".toUri() flags = Intent.FLAG_ACTIVITY_NEW_TASK } context.startActivity( @@ -85,7 +98,7 @@ class IntentLauncher( override fun launchPhone(phone: String) = try { val intent = Intent(Intent.ACTION_DIAL).apply { - data = Uri.parse("tel:$phone") + data = "tel:$phone".toUri() flags = Intent.FLAG_ACTIVITY_NEW_TASK } context.startActivity(intent) @@ -97,13 +110,70 @@ class IntentLauncher( ).show() } - override fun launchBrowser(url: String) { + override fun launchBrowser(url: String, onError: (() -> Unit)?) { + val pm = context.packageManager + val uri = url.toUri() + tryKnownBrowsers(pm, uri, onError) + } + + private fun tryKnownBrowsers(pm: PackageManager, uri: Uri, onError: (() -> Unit)?) { + for (packageName in browserPackages) { + val intent = Intent(Intent.ACTION_VIEW, uri).apply { + setPackage(packageName) + addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + } + if (intent.resolveActivity(pm) != null) { + try { + context.startActivity(intent) + return // Success, stop + } catch (_: Throwable) { + // Try next browser + } + } + } + tryGenericBrowserIntent(pm, uri, onError) + } + + private fun tryGenericBrowserIntent(pm: PackageManager, uri: Uri, onError: (() -> Unit)?) { try { - val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url)).apply { - flags = Intent.FLAG_ACTIVITY_NEW_TASK + val intent = Intent(Intent.ACTION_VIEW, uri).apply { + addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) } context.startActivity(intent) } catch (_: Throwable) { + tryQueryIntentActivities(pm, uri, onError) + } + } + + private fun tryQueryIntentActivities(pm: PackageManager, uri: Uri, onError: (() -> Unit)?) { + try { + val intent = Intent(Intent.ACTION_VIEW, uri) + val resolveInfos = pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY) + + for (resolveInfo in resolveInfos) { + val browserIntent = Intent(Intent.ACTION_VIEW, uri).apply { + setPackage(resolveInfo.activityInfo.packageName) + addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + } + if (browserIntent.resolveActivity(pm) != null) { + try { + context.startActivity(browserIntent) + return // Success, stop + } catch (_: Throwable) { + // Try next resolveInfo + } + } + } + } catch (_: Throwable) { + // queryIntentActivities threw + } + handleBrowserLaunchError(onError) + } + + private fun handleBrowserLaunchError(onError: (() -> Unit)?) { + if (onError != null) { + onError() + } else { Toast.makeText( context, resourceProvider.getString(Res.string.no_browser_installed), @@ -119,15 +189,13 @@ class IntentLauncher( override fun launchMap(latitude: Double, longitude: Double, name: String?) { try { // Attempt to launch a geo intent - val mapIntentUri = Uri.parse( - String.format( - Locale.ENGLISH, - "geo:0,0?q=%f,%f(%s)", - latitude, - longitude, - Uri.encode(name) - ) - ) + val mapIntentUri = String.format( + Locale.ENGLISH, + "geo:0,0?q=%f,%f(%s)", + latitude, + longitude, + Uri.encode(name) + ).toUri() val intent = Intent(Intent.ACTION_VIEW, mapIntentUri).apply { flags = Intent.FLAG_ACTIVITY_NEW_TASK } @@ -161,7 +229,7 @@ class IntentLauncher( try { val linkIntent = Intent(Intent.ACTION_VIEW).apply { flags = Intent.FLAG_ACTIVITY_NEW_TASK - data = Uri.parse(link) + data = link.toUri() } context.startActivity(linkIntent) return true @@ -217,15 +285,15 @@ class IntentLauncher( eventEndTime: LocalDateTime ) { val intent = Intent(Intent.ACTION_INSERT).apply { - data = Uri.parse("content://com.android.calendar/events") + data = "content://com.android.calendar/events".toUri() putExtra(Events.TITLE, eventTitle) putExtra(Events.DESCRIPTION, eventDescription) - putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, eventStartTime.toEpochMilliseconds()) - putExtra(CalendarContract.EXTRA_EVENT_END_TIME, eventEndTime.toEpochMilliseconds()) + putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, eventStartTime.toMillis()) + putExtra(CalendarContract.EXTRA_EVENT_END_TIME, eventEndTime.toMillis()) putExtra(Events.ALL_DAY, false) flags = Intent.FLAG_ACTIVITY_NEW_TASK } context.startActivity(intent) } -} \ No newline at end of file +} diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/media/MediaManager.kt b/ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/media/MediaManager.kt similarity index 64% rename from coreapp/src/androidMain/kotlin/com/metacto/core/utils/media/MediaManager.kt rename to ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/media/MediaManager.kt index ef5b7318..9f2db3cd 100644 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/media/MediaManager.kt +++ b/ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/media/MediaManager.kt @@ -1,13 +1,15 @@ -package com.metacto.core.utils.media +package com.metacto.core.ui.media +import android.content.Context import android.graphics.Bitmap import android.media.MediaMetadataRetriever +import androidx.core.net.toUri import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import java.io.ByteArrayOutputStream import kotlin.time.Duration.Companion.seconds -class MediaManager : IMediaManager { +class MediaManager(private val context: Context) : IMediaManager { override suspend fun getVideoPreview(videoPath: String): ByteArray? { return withContext(Dispatchers.IO) { @@ -18,7 +20,19 @@ class MediaManager : IMediaManager { private fun getVideoFrame(videoPath: String, timeInSeconds: Long): ByteArray? { val retriever = MediaMetadataRetriever() return try { - retriever.setDataSource(videoPath) + when { + // Handle content URIs + videoPath.startsWith("content://") -> { + val uri = videoPath.toUri() + retriever.setDataSource(context, uri) + } + + // Handle regular file paths + else -> { + retriever.setDataSource(videoPath) + } + } + val bitmap = retriever.getFrameAtTime(timeInSeconds.seconds.inWholeMicroseconds) bitmap?.let { val stream = ByteArrayOutputStream() diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/permissions/BindEffect.kt b/ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/permissions/BindEffect.kt similarity index 94% rename from coreapp/src/androidMain/kotlin/com/metacto/core/permissions/BindEffect.kt rename to ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/permissions/BindEffect.kt index 0168bdb5..c9f31f41 100644 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/permissions/BindEffect.kt +++ b/ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/permissions/BindEffect.kt @@ -1,4 +1,4 @@ -package com.metacto.core.permissions +package com.metacto.core.ui.permissions import androidx.activity.ComponentActivity import androidx.compose.runtime.Composable diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/permissions/IPermissionManager.kt b/ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/permissions/IPermissionManager.kt similarity index 72% rename from coreapp/src/androidMain/kotlin/com/metacto/core/permissions/IPermissionManager.kt rename to ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/permissions/IPermissionManager.kt index c3eeca8d..55e586eb 100644 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/permissions/IPermissionManager.kt +++ b/ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/permissions/IPermissionManager.kt @@ -1,8 +1,8 @@ -package com.metacto.core.permissions +package com.metacto.core.ui.permissions import androidx.activity.ComponentActivity -import com.metacto.core.permissions.enums.Permission -import com.metacto.core.permissions.enums.PermissionState +import com.metacto.core.ui.permissions.enums.Permission +import com.metacto.core.ui.permissions.enums.PermissionState actual interface IPermissionManager { actual suspend fun requestPermission( diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/permissions/PermissionManager.kt b/ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/permissions/PermissionManager.kt similarity index 91% rename from coreapp/src/androidMain/kotlin/com/metacto/core/permissions/PermissionManager.kt rename to ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/permissions/PermissionManager.kt index c051ceea..a3293fe6 100644 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/permissions/PermissionManager.kt +++ b/ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/permissions/PermissionManager.kt @@ -1,4 +1,4 @@ -package com.metacto.core.permissions +package com.metacto.core.ui.permissions import android.app.Activity import android.content.Context @@ -13,13 +13,11 @@ import androidx.core.app.NotificationManagerCompat import androidx.core.content.ContextCompat import androidx.lifecycle.DefaultLifecycleObserver import androidx.lifecycle.LifecycleOwner -import com.metacto.core.permissions.enums.Permission -import com.metacto.core.permissions.enums.PermissionState -import com.metacto.core.permissions.exceptions.DeniedAlwaysException -import com.metacto.core.permissions.exceptions.DeniedException -import com.metacto.core.permissions.exceptions.RequestCanceledException -import com.metacto.core.permissions.helpers.toPlatformPermission -import com.metacto.core.utils.extensions.openAppSettings +import com.metacto.core.extensions.openAppSettings +import com.metacto.core.ui.permissions.enums.Permission +import com.metacto.core.ui.permissions.enums.PermissionState +import com.metacto.core.ui.permissions.exceptions.DeniedAlwaysException +import com.metacto.core.ui.permissions.helpers.toPlatformPermission import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.filterNotNull import kotlinx.coroutines.flow.first @@ -88,7 +86,11 @@ internal class PermissionManager(private val context: Context) : IPermissionMana when { permissions.isEmpty() -> { - callback.callback(Result.failure(RequestCanceledException(callback.permission))) + callback.callback(Result.failure( + com.metacto.core.ui.permissions.exceptions.RequestCanceledException( + callback.permission + ) + )) } permissions.values.all { it } -> { callback.callback(Result.success(Unit)) @@ -102,7 +104,7 @@ internal class PermissionManager(private val context: Context) : IPermissionMana private fun handlePermissionDenial(callback: PermissionCallback, permission: String) { val activity = activityHolder.value ?: return val exception = if (shouldShowRequestPermissionRationale(activity, permission)) { - DeniedException(callback.permission) + com.metacto.core.ui.permissions.exceptions.DeniedException(callback.permission) } else { DeniedAlwaysException(callback.permission) } diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/permissions/helpers/PermissionsMap.kt b/ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/permissions/helpers/PermissionsMap.kt similarity index 97% rename from coreapp/src/androidMain/kotlin/com/metacto/core/permissions/helpers/PermissionsMap.kt rename to ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/permissions/helpers/PermissionsMap.kt index eca8a45b..c83a74cb 100644 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/permissions/helpers/PermissionsMap.kt +++ b/ui/core-ui/src/androidMain/kotlin/com/metacto/core/ui/permissions/helpers/PermissionsMap.kt @@ -1,8 +1,8 @@ -package com.metacto.core.permissions.helpers +package com.metacto.core.ui.permissions.helpers import android.Manifest import android.os.Build -import com.metacto.core.permissions.enums.Permission +import com.metacto.core.ui.permissions.enums.Permission @Suppress("CyclomaticComplexMethod") internal fun Permission.toPlatformPermission(): List { diff --git a/ui/core-ui/src/androidMain/res/drawable/ic_default_notifications_icon.xml b/ui/core-ui/src/androidMain/res/drawable/ic_default_notifications_icon.xml new file mode 100644 index 00000000..57f8fe49 --- /dev/null +++ b/ui/core-ui/src/androidMain/res/drawable/ic_default_notifications_icon.xml @@ -0,0 +1,17 @@ + + + + + diff --git a/coreapp/src/androidMain/res/drawable/no_image.png b/ui/core-ui/src/androidMain/res/drawable/no_image.png similarity index 100% rename from coreapp/src/androidMain/res/drawable/no_image.png rename to ui/core-ui/src/androidMain/res/drawable/no_image.png diff --git a/coreapp/src/androidMain/res/xml/file_paths.xml b/ui/core-ui/src/androidMain/res/xml/file_paths.xml similarity index 100% rename from coreapp/src/androidMain/res/xml/file_paths.xml rename to ui/core-ui/src/androidMain/res/xml/file_paths.xml diff --git a/coreapp/src/commonMain/composeResources/drawable/ic_upgrade.xml b/ui/core-ui/src/commonMain/composeResources/drawable/ic_upgrade.xml similarity index 100% rename from coreapp/src/commonMain/composeResources/drawable/ic_upgrade.xml rename to ui/core-ui/src/commonMain/composeResources/drawable/ic_upgrade.xml diff --git a/coreapp/src/commonMain/composeResources/drawable/img_gray_placeholder.xml b/ui/core-ui/src/commonMain/composeResources/drawable/img_gray_placeholder.xml similarity index 100% rename from coreapp/src/commonMain/composeResources/drawable/img_gray_placeholder.xml rename to ui/core-ui/src/commonMain/composeResources/drawable/img_gray_placeholder.xml diff --git a/coreapp/src/commonMain/composeResources/drawable/img_white_placeholder.xml b/ui/core-ui/src/commonMain/composeResources/drawable/img_white_placeholder.xml similarity index 100% rename from coreapp/src/commonMain/composeResources/drawable/img_white_placeholder.xml rename to ui/core-ui/src/commonMain/composeResources/drawable/img_white_placeholder.xml diff --git a/coreapp/src/commonMain/composeResources/files/loading_indicator_anim.json b/ui/core-ui/src/commonMain/composeResources/files/loading_indicator_anim.json similarity index 100% rename from coreapp/src/commonMain/composeResources/files/loading_indicator_anim.json rename to ui/core-ui/src/commonMain/composeResources/files/loading_indicator_anim.json diff --git a/coreapp/src/commonMain/composeResources/values-ar/strings.xml b/ui/core-ui/src/commonMain/composeResources/values-ar/strings.xml similarity index 92% rename from coreapp/src/commonMain/composeResources/values-ar/strings.xml rename to ui/core-ui/src/commonMain/composeResources/values-ar/strings.xml index 8610372f..f56b71aa 100644 --- a/coreapp/src/commonMain/composeResources/values-ar/strings.xml +++ b/ui/core-ui/src/commonMain/composeResources/values-ar/strings.xml @@ -17,9 +17,6 @@ أقصى تاريخ مسموح به هو: %1$s أدنى وقت مسموح به هو: %1$s أقصى وقت مسموح به هو: %1$s - اختر من المعرض - التقاط صورة - إزالة الصورة الحالية لا يوجد متصفح مثبت تجاوز المستخدم الحالي يرجى إدخال معرف المستخدم الذي ترغب في تجاوزه. diff --git a/coreapp/src/commonMain/composeResources/values-de/strings.xml b/ui/core-ui/src/commonMain/composeResources/values-de/strings.xml similarity index 89% rename from coreapp/src/commonMain/composeResources/values-de/strings.xml rename to ui/core-ui/src/commonMain/composeResources/values-de/strings.xml index 88d415c3..cbc73c31 100644 --- a/coreapp/src/commonMain/composeResources/values-de/strings.xml +++ b/ui/core-ui/src/commonMain/composeResources/values-de/strings.xml @@ -17,9 +17,6 @@ Das erlaubte Höchstdatum ist: %1$s Die erlaubte Mindestzeit ist: %1$s Die erlaubte Höchstzeit ist: %1$s - Aus der Bibliothek wählen - Foto machen - Aktuelles Foto entfernen Kein Browser installiert Hier suchen... diff --git a/coreapp/src/commonMain/composeResources/values-es/strings.xml b/ui/core-ui/src/commonMain/composeResources/values-es/strings.xml similarity index 90% rename from coreapp/src/commonMain/composeResources/values-es/strings.xml rename to ui/core-ui/src/commonMain/composeResources/values-es/strings.xml index 344e4700..537b91ce 100644 --- a/coreapp/src/commonMain/composeResources/values-es/strings.xml +++ b/ui/core-ui/src/commonMain/composeResources/values-es/strings.xml @@ -17,9 +17,6 @@ La fecha máxima permitida es: %1$s La hora mínima permitida es: %1$s La hora máxima permitida es: %1$s - Elegir de la biblioteca - Tomar foto - Eliminar foto actual No hay navegador instalado Buscar aquí... diff --git a/coreapp/src/commonMain/composeResources/values-fr/strings.xml b/ui/core-ui/src/commonMain/composeResources/values-fr/strings.xml similarity index 89% rename from coreapp/src/commonMain/composeResources/values-fr/strings.xml rename to ui/core-ui/src/commonMain/composeResources/values-fr/strings.xml index 2c34c6e8..9fec1a32 100644 --- a/coreapp/src/commonMain/composeResources/values-fr/strings.xml +++ b/ui/core-ui/src/commonMain/composeResources/values-fr/strings.xml @@ -17,9 +17,6 @@ La date maximale autorisée est : %1$s L\'heure minimale autorisée est : %1$s L\'heure maximale autorisée est : %1$s - Choisir depuis la bibliothèque - Prendre une photo - Supprimer la photo actuelle Aucun navigateur installé mita disinoë... diff --git a/coreapp/src/commonMain/composeResources/values-it/strings.xml b/ui/core-ui/src/commonMain/composeResources/values-it/strings.xml similarity index 90% rename from coreapp/src/commonMain/composeResources/values-it/strings.xml rename to ui/core-ui/src/commonMain/composeResources/values-it/strings.xml index 292ee7ba..55dbe7a5 100644 --- a/coreapp/src/commonMain/composeResources/values-it/strings.xml +++ b/ui/core-ui/src/commonMain/composeResources/values-it/strings.xml @@ -17,9 +17,6 @@ La data massima consentita è: %1$s L\'orario minimo consentito è: %1$s L\'orario massimo consentito è: %1$s - Scegli dalla libreria - Scatta foto - Rimuovi foto attuale Nessun browser installato Cerca qui... diff --git a/coreapp/src/commonMain/composeResources/values-pt-rBR/strings.xml b/ui/core-ui/src/commonMain/composeResources/values-pt-rBR/strings.xml similarity index 90% rename from coreapp/src/commonMain/composeResources/values-pt-rBR/strings.xml rename to ui/core-ui/src/commonMain/composeResources/values-pt-rBR/strings.xml index 3069cb1f..538d6409 100644 --- a/coreapp/src/commonMain/composeResources/values-pt-rBR/strings.xml +++ b/ui/core-ui/src/commonMain/composeResources/values-pt-rBR/strings.xml @@ -17,9 +17,6 @@ A data máxima permitida é: %1$s O horário mínimo permitido é: %1$s O horário máximo permitido é: %1$s - Escolher da biblioteca - Tirar foto - Remover foto atual Nenhum navegador instalado Pesquise aqui... diff --git a/coreapp/src/commonMain/composeResources/values/strings.xml b/ui/core-ui/src/commonMain/composeResources/values/strings.xml similarity index 92% rename from coreapp/src/commonMain/composeResources/values/strings.xml rename to ui/core-ui/src/commonMain/composeResources/values/strings.xml index 2eafbce1..4cca9c89 100644 --- a/coreapp/src/commonMain/composeResources/values/strings.xml +++ b/ui/core-ui/src/commonMain/composeResources/values/strings.xml @@ -18,9 +18,6 @@ Maximum allowed date is: %1$s Minimum allowed time is: %1$s Maximum allowed time is: %1$s - Choose from library - Take photo - Remove current photo No browser installed Override Current User Please enter the user ID you want to override. diff --git a/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/CoreUIConfigs.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/CoreUIConfigs.kt new file mode 100644 index 00000000..4f709918 --- /dev/null +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/CoreUIConfigs.kt @@ -0,0 +1,5 @@ +package com.metacto.core.ui + +class CoreUIConfigs( + val enableSwipeToGoBack: Boolean = false +) diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/app/CoreAppContainer.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/app/CoreAppContainer.kt similarity index 93% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/app/CoreAppContainer.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/app/CoreAppContainer.kt index 3283df72..820b08df 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/app/CoreAppContainer.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/app/CoreAppContainer.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.app +package com.metacto.core.ui.app import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.BoxScope @@ -8,7 +8,7 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.layout.Layout -import com.metacto.core.utils.extensions.setScreenSize +import com.metacto.core.ui.extensions.setScreenSize @Composable internal fun CoreAppContainer( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/app/CoreAppContent.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/app/CoreAppContent.kt similarity index 77% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/app/CoreAppContent.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/app/CoreAppContent.kt index dfa97e78..06009371 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/app/CoreAppContent.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/app/CoreAppContent.kt @@ -1,41 +1,43 @@ -package com.metacto.core.presentation.app +package com.metacto.core.ui.app import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import cafe.adriel.voyager.core.screen.Screen -import com.metacto.core.navigation.CoreAppNavigator -import com.metacto.core.navigation.NavManager -import com.metacto.core.permissions.BindEffect -import com.metacto.core.permissions.IPermissionManager -import com.metacto.core.presentation.components.dialogs.ChoicesDialog -import com.metacto.core.presentation.components.dialogs.ConfirmationDialog -import com.metacto.core.presentation.components.dialogs.ForceUpdateDialog -import com.metacto.core.presentation.components.dialogs.MessageDialog -import com.metacto.core.presentation.components.dialogs.OverrideUserDialog -import com.metacto.core.presentation.components.dialogs.SuccessDialog -import com.metacto.core.presentation.components.dialogs.datePicker.DatePickerDialog -import com.metacto.core.presentation.components.dialogs.timePicker.TimePickerDialog -import com.metacto.core.presentation.components.progress.LottieProgressIndicator -import com.metacto.core.presentation.components.progress.PrimaryProgressIndicator -import com.metacto.core.presentation.components.progress.ProgressIndicator -import com.metacto.core.presentation.components.progress.SecondaryProgressIndicator -import com.metacto.core.presentation.components.snackBar.ErrorSnackBar -import com.metacto.core.presentation.components.snackBar.SuccessSnackBar -import com.metacto.core.presentation.components.visibilities.TopSlideVisibility -import com.metacto.core.presentation.globalState.ICoreGlobalState -import com.metacto.core.presentation.globalState.models.LoadingType -import com.metacto.core.presentation.globalState.models.SnackBarType -import com.metacto.core.presentation.theme.CoreTheme -import com.metacto.core.resources.file -import com.metacto.core.utils.extensions.dismissKeyboard -import com.metacto.core.utils.extensions.setNavigationBarColor -import com.metacto.core.utils.extensions.setStatusBarColor -import com.metacto.core.utils.extensions.showKeyboard -import com.metacto.coreApp.resources.* +import com.metacto.core.ui.components.dialogs.ChoicesDialog +import com.metacto.core.ui.components.dialogs.ConfirmationDialog +import com.metacto.core.ui.components.dialogs.CustomDialog +import com.metacto.core.ui.components.dialogs.ForceUpdateDialog +import com.metacto.core.ui.components.dialogs.MessageDialog +import com.metacto.core.ui.components.dialogs.OverrideUserDialog +import com.metacto.core.ui.components.dialogs.SuccessDialog +import com.metacto.core.ui.components.dialogs.datePicker.DatePickerDialog +import com.metacto.core.ui.components.dialogs.timePicker.TimePickerDialog +import com.metacto.core.ui.components.progress.LottieProgressIndicator +import com.metacto.core.ui.components.progress.PrimaryProgressIndicator +import com.metacto.core.ui.components.progress.ProgressIndicator +import com.metacto.core.ui.components.progress.SecondaryProgressIndicator +import com.metacto.core.ui.components.snackBar.ErrorSnackBar +import com.metacto.core.ui.components.snackBar.SuccessSnackBar +import com.metacto.core.ui.components.visibilities.TopSlideVisibility +import com.metacto.core.ui.extensions.dismissKeyboard +import com.metacto.core.ui.extensions.setNavigationBarColor +import com.metacto.core.ui.extensions.setStatusBarColor +import com.metacto.core.ui.extensions.showKeyboard +import com.metacto.core.ui.globalState.ICoreGlobalState +import com.metacto.core.ui.globalState.models.LoadingType +import com.metacto.core.ui.globalState.models.SnackBarType +import com.metacto.core.ui.navigation.CoreAppNavigator +import com.metacto.core.ui.navigation.NavManager +import com.metacto.core.ui.permissions.BindEffect +import com.metacto.core.ui.permissions.IPermissionManager +import com.metacto.core.ui.resources.Res +import com.metacto.core.ui.resources.file +import com.metacto.core.ui.theme.CoreTheme import org.koin.compose.koinInject @Composable @@ -52,6 +54,7 @@ fun CoreAppContent( val confirmationParams by globalState.confirmationPopupState val forceUpdateParams by globalState.forceUpdatePopupState val choicesParams by globalState.choicesPopupState + val customParams by globalState.customPopupState val datePickerParams by globalState.datePickerState val timePickerParams by globalState.timePickerState val loadingType by globalState.loadingState @@ -198,6 +201,29 @@ fun CoreAppContent( ) } + // Handle custom popup + customParams?.let { params -> + CustomDialog( + isCancellable = params.isCancellable, + showToolbar = params.showToolbar, + title = params.title, + showPositiveButton = params.showPositiveButton, + positiveButtonText = params.positiveButtonText, + onPositiveClick = { + globalState.idle() + params.onPositiveClick?.invoke() + }, + onDismiss = { + globalState.idle() + params.onDismiss?.invoke() + }, + contentPadding = params.contentPadding + ?: PaddingValues(CoreTheme.spacings.appDialog.contentPadding), + shape = params.shape ?: CoreTheme.shapes.appDialog.shape, + content = params.content + ) + } + // Handle date picker popup datePickerParams?.let { params -> DatePickerDialog( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/base/BaseScreen.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/base/CoreScreen.kt similarity index 56% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/base/BaseScreen.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/base/CoreScreen.kt index a5c3b0a3..9bb69a86 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/base/BaseScreen.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/base/CoreScreen.kt @@ -1,36 +1,52 @@ -package com.metacto.core.presentation.base +package com.metacto.core.ui.base import androidx.compose.runtime.Composable import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.core.screen.Screen import cafe.adriel.voyager.core.screen.ScreenKey -import com.metacto.core.navigation.NavManager -import com.metacto.core.utils.extensions.randomUUID +import com.metacto.core.extensions.randomUUID +import com.metacto.core.ui.extensions.OnLifecycleEvent +import com.metacto.core.ui.navigation.NavManager import org.koin.core.component.KoinComponent import org.koin.core.component.inject -abstract class BaseScreen> : Screen, KoinComponent { +abstract class CoreScreen> : Screen, KoinComponent { override val key: ScreenKey = randomUUID() open val viewModelTag: String = randomUUID() open val screenTag: String = randomUUID() open val enableSwipeToGoBack: Boolean = true + @Suppress("ComposableNaming") + @Composable + internal open fun trackLifecycle() { + OnLifecycleEvent( + onResume = ::onDisplayed, + onPause = ::onHidden, + ) + } + protected fun getNavManager(): NavManager { return inject().value } + open fun onDisplayed() { + } + + open fun onHidden() { + } + open fun onBackPressed() { getNavManager().goBack() } } @Composable -inline fun > BaseScreen<*>.rememberViewModel(): VM { +inline fun > CoreScreen<*>.rememberViewModel(): VM { return rememberScreenModel(viewModelTag) { inject().value } } -inline fun > BaseScreen<*>.getViewModel(): VM { +inline fun > CoreScreen<*>.getViewModel(): VM { return inject().value } \ No newline at end of file diff --git a/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/base/CoreSheet.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/base/CoreSheet.kt new file mode 100644 index 00000000..7d2b06aa --- /dev/null +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/base/CoreSheet.kt @@ -0,0 +1,36 @@ +package com.metacto.core.ui.base + +import androidx.compose.runtime.Composable +import cafe.adriel.voyager.core.model.rememberScreenModel +import cafe.adriel.voyager.core.screen.Screen +import cafe.adriel.voyager.core.screen.ScreenKey +import com.metacto.core.extensions.randomUUID +import org.koin.core.component.KoinComponent +import org.koin.core.component.inject + +abstract class CoreSheet> : Screen, KoinComponent { + override val key: ScreenKey = randomUUID() + open val viewModelTag: String = randomUUID() + open val screenTag: String = randomUUID() + + open fun onDisplayed() { + } + + open fun onHidden() { + } + + @Composable + override fun Content() { + } +} + +@Composable +inline fun > CoreSheet<*>.rememberViewModel(): VM { + return rememberScreenModel(viewModelTag) { + inject().value + } +} + +inline fun > CoreSheet<*>.getViewModel(): VM { + return inject().value +} \ No newline at end of file diff --git a/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/base/CoreTab.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/base/CoreTab.kt new file mode 100644 index 00000000..8a624df6 --- /dev/null +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/base/CoreTab.kt @@ -0,0 +1,35 @@ +package com.metacto.core.ui.base + +import androidx.compose.runtime.Composable +import cafe.adriel.voyager.core.model.rememberScreenModel +import cafe.adriel.voyager.core.screen.Screen +import cafe.adriel.voyager.core.screen.ScreenKey +import com.metacto.core.extensions.randomUUID +import org.koin.core.component.KoinComponent +import org.koin.core.component.inject + +abstract class CoreTab> : Screen, KoinComponent { + override val key: ScreenKey = randomUUID() + open val viewModelTag: String = randomUUID() + open val screenTag: String = randomUUID() + + open fun onDisplayed() { + } + + open fun onHidden() { + } + + open fun onNavBarTabClicked() { + } +} + +@Composable +inline fun > CoreTab<*>.rememberViewModel(): VM { + return rememberScreenModel(viewModelTag) { + inject().value + } +} + +inline fun > CoreTab<*>.getViewModel(): VM { + return inject().value +} \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/base/CoreViewModel.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/base/CoreViewModel.kt similarity index 68% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/base/CoreViewModel.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/base/CoreViewModel.kt index 70b6c119..ad425ce6 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/base/CoreViewModel.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/base/CoreViewModel.kt @@ -1,47 +1,38 @@ -package com.metacto.core.presentation.base +package com.metacto.core.ui.base import androidx.compose.runtime.MutableState import androidx.compose.runtime.State import androidx.compose.runtime.mutableStateOf import cafe.adriel.voyager.core.model.ScreenModel import cafe.adriel.voyager.core.model.screenModelScope -import com.metacto.core.CoreEnvironment -import com.metacto.core.domain.repos.forceUpdate.AppUpdateSource -import com.metacto.core.domain.repos.forceUpdate.ForceUpdateRepository -import com.metacto.core.navigation.NavManager -import com.metacto.core.permissions.IPermissionManager -import com.metacto.core.presentation.globalState.ICoreGlobalState -import com.metacto.core.presentation.globalState.models.ConfirmationPopupParams -import com.metacto.core.presentation.globalState.models.ForceUpdatePopupParams -import com.metacto.core.presentation.globalState.models.LoadingType -import com.metacto.core.presentation.globalState.models.MessagePopupParams -import com.metacto.core.presentation.globalState.models.SnackBarParams -import com.metacto.core.presentation.globalState.models.SnackBarType -import com.metacto.core.presentation.itemPicker.ItemPickerSheet -import com.metacto.core.presentation.itemPicker.NativeItemPicker -import com.metacto.core.presentation.itemPicker.models.PickerItem -import com.metacto.core.utils.PlatformType -import com.metacto.core.utils.extensions.getPlatformType -import com.metacto.core.utils.extensions.isConnectionLostError -import com.metacto.core.utils.extensions.isInternetConnectionError -import com.metacto.core.utils.extensions.isInternetInterruptedError -import com.metacto.core.utils.extensions.isNetworkConnectionLostError -import com.metacto.core.utils.launchers.IIntentLauncher -import com.metacto.core.utils.resources.IResourceProvider -import com.metacto.coreApp.resources.Res -import com.metacto.coreApp.resources.error -import com.metacto.coreApp.resources.force_update_title -import com.metacto.coreApp.resources.ic_upgrade -import com.metacto.coreApp.resources.sorry_there_was_problem_connecting -import com.metacto.coreApp.resources.ok -import com.metacto.coreApp.resources.server_taking_too_long -import com.metacto.coreApp.resources.session_expired -import com.metacto.coreApp.resources.skip_update_button -import com.metacto.coreApp.resources.update_button -import com.metacto.coreApp.resources.your_session_expired_login_again -import com.metacto.strapikmm.datasource.network.services.strapi.JsonWithIgnoredUnknownKeys -import com.metacto.strapikmm.errorhandling.AppException -import com.metacto.strapikmm.util.Logger +import com.metacto.core.PlatformType +import com.metacto.core.extensions.getPlatformType +import com.metacto.core.extensions.isConnectionLostError +import com.metacto.core.extensions.isInternetConnectionError +import com.metacto.core.extensions.isInternetInterruptedError +import com.metacto.core.extensions.isNetworkConnectionLostError +import com.metacto.core.ui.globalState.ICoreGlobalState +import com.metacto.core.ui.globalState.models.ConfirmationPopupParams +import com.metacto.core.ui.globalState.models.LoadingType +import com.metacto.core.ui.globalState.models.MessagePopupParams +import com.metacto.core.ui.globalState.models.SnackBarParams +import com.metacto.core.ui.globalState.models.SnackBarType +import com.metacto.core.ui.components.itemPicker.ItemPickerSheet +import com.metacto.core.ui.components.itemPicker.NativeItemPicker +import com.metacto.core.ui.components.itemPicker.models.PickerItem +import com.metacto.core.ui.launchers.IIntentLauncher +import com.metacto.core.ui.navigation.NavManager +import com.metacto.core.ui.permissions.IPermissionManager +import com.metacto.core.ui.resources.IResourceProvider +import com.metacto.core.ui.resources.Res +import com.metacto.core.ui.resources.error +import com.metacto.core.ui.resources.ok +import com.metacto.core.ui.resources.server_taking_too_long +import com.metacto.core.ui.resources.session_expired +import com.metacto.core.ui.resources.sorry_there_was_problem_connecting +import com.metacto.core.ui.resources.your_session_expired_login_again +import com.metacto.kmm.logger. Logger +import com.metacto.kmm.network.errorhandling.ApiFailure import io.ktor.client.network.sockets.ConnectTimeoutException import io.ktor.client.network.sockets.SocketTimeoutException import io.ktor.client.plugins.HttpRequestTimeoutException @@ -55,11 +46,9 @@ import kotlinx.coroutines.delay import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.receiveAsFlow import kotlinx.coroutines.launch +import kotlinx.coroutines.runBlocking import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock -import kotlinx.serialization.json.JsonObject -import kotlinx.serialization.json.jsonPrimitive -import org.jetbrains.compose.resources.DrawableResource import org.jetbrains.compose.resources.StringResource import org.koin.core.component.KoinComponent import org.koin.core.component.inject @@ -71,8 +60,6 @@ interface ViewState interface ViewSideEffect -const val SIDE_EFFECTS_KEY = "side-effects_key" - expect open class CommonViewModel() abstract class CoreViewModel : @@ -83,7 +70,6 @@ abstract class CoreViewModel protected val navManager by inject() protected val resourceProvider by inject() protected val logger by inject() - protected val forceUpdateRepository by inject() protected val intentLauncher by inject() val permissionManager by inject() private val nativeItemPicker by inject() @@ -114,6 +100,7 @@ abstract class CoreViewModel private fun subscribeToEvents() { screenModelScope.launch { _event.collect { + onReceiveEvent(it) handleEvents(it) } } @@ -124,20 +111,18 @@ abstract class CoreViewModel } protected fun setState(reducer: S.() -> S) { - val newState = viewState.value.reducer() - _viewState.value = newState - } - - protected fun setStateLocked(reducer: S.() -> S) { - screenModelScope.launch { + runBlocking(Dispatchers.Main.immediate) { mutex.withLock { - setState { reducer() } + val newState = viewState.value.reducer() + onChangeState(newState) + _viewState.value = newState } } } protected fun setEffect(builder: () -> SF) { val effectValue = builder() + onSendSideEffect(effectValue) screenModelScope.launch { _effect.send(effectValue) } } @@ -209,8 +194,8 @@ abstract class CoreViewModel // Handle other errors val errorMessage = when (throwable) { - is AppException -> { - throwable.getErrorMessage().orEmpty() + is ApiFailure -> { + throwable.displayMessage.orEmpty() } is SocketTimeoutException, @@ -282,7 +267,7 @@ abstract class CoreViewModel } private fun isAuthError(throwable: Throwable): Boolean { - return throwable is AppException && throwable.getHttpErrorCode() == 401 + return throwable is ApiFailure && throwable.httpStatus == 401 } open suspend fun logout() {} @@ -378,53 +363,6 @@ abstract class CoreViewModel }) } - suspend fun checkAppUpdates( - appUpdateSource: AppUpdateSource, - showTitle: Boolean = true, - title: String? = null, - image: DrawableResource? = null, - onUpdateClick: (() -> Unit)? = null, - onSkipUpdateClick: (() -> Unit)? = null, - onProceedAction: () -> Unit - ) { - // check if the title is enabled and handle the title - val forceUpdateTitle = if (showTitle) title - ?: resourceProvider.getString(Res.string.force_update_title) else null - - // check for app updates first - val response = forceUpdateRepository.checkForceUpdate(appUpdateSource = appUpdateSource) - - if (response != null) { - coreGlobalState.forceUpdatePopup( - params = ForceUpdatePopupParams( - isRequired = response.isRequired, - title = forceUpdateTitle, - body = response.message, - image = image ?: Res.drawable.ic_upgrade, - updateButtonText = resourceProvider.getString(Res.string.update_button), - skipUpdateButtonText = resourceProvider.getString(Res.string.skip_update_button), - onDismiss = { - if (response.isRequired.not()) { - onProceedAction.invoke() - } - }, - onUpdateClick = { - if (onUpdateClick != null) { - onUpdateClick.invoke() - } else { - intentLauncher.launchAppInStore(response.appId) - } - }, - onSkipUpdateClicked = { - onSkipUpdateClick?.invoke() - } - ) - ) - } else { - onProceedAction() - } - } - protected fun nativeItemPicker( items: List, selectedItem: PickerItem? = null, @@ -502,30 +440,13 @@ abstract class CoreViewModel open val defaultErrorType: ErrorType = ErrorType.Popup open val defaultDispatcher: CoroutineContext = Dispatchers.Default -} -private fun extractErrorCodeAndMessage(jsonString: String): Pair { - if (jsonString.trim().isEmpty()) return "" to -1 - try { - // Parse the JSON string safely - val jsonObject = JsonWithIgnoredUnknownKeys.parseToJsonElement(jsonString).let { - // Ensure the parsed element is a JsonObject - it as? JsonObject ?: return jsonString to -1 - } + open fun onReceiveEvent(event: E) { + } - // Extract the message and code, with default values if not found or in the wrong format - val message = jsonObject["message"]?.jsonPrimitive?.content.orEmpty() - val code = jsonObject["code"]?.jsonPrimitive?.content?.toIntOrNull() ?: 0 + open fun onChangeState(newState: S) { + } - return message to code - } catch (throwable: Throwable) { - // Handle parsing errors gracefully - return jsonString to -1 + open fun onSendSideEffect(effect: SF) { } } - -expect fun AppException.getHttpErrorCode(): Int? -expect fun AppException.getErrorCode(): Int? -expect fun AppException.getErrorMessage(): String? -expect fun AppException.getErrorBody(): String? -expect fun CoreEnvironment.getStoreId(): String \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/base/ErrorType.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/base/ErrorType.kt similarity index 59% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/base/ErrorType.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/base/ErrorType.kt index 2a23dc0e..2f4a487b 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/base/ErrorType.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/base/ErrorType.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.base +package com.metacto.core.ui.base enum class ErrorType { Popup, diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/animatedList/AnimatedList.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/animatedList/AnimatedList.kt similarity index 95% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/animatedList/AnimatedList.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/animatedList/AnimatedList.kt index a01a79a4..948ae0ee 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/animatedList/AnimatedList.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/animatedList/AnimatedList.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.animatedList +package com.metacto.core.ui.components.animatedList import androidx.compose.animation.core.AnimationSpec import androidx.compose.animation.core.FastOutSlowInEasing @@ -16,7 +16,7 @@ import androidx.compose.ui.draw.alpha import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.dp -import com.metacto.core.utils.extensions.half +import com.metacto.core.extensions.half import kotlin.time.Duration import kotlin.time.Duration.Companion.milliseconds diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/bottomSheets/BottomSheetContainer.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/bottomSheets/BottomSheetContainer.kt similarity index 95% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/bottomSheets/BottomSheetContainer.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/bottomSheets/BottomSheetContainer.kt index b68e7c13..9e38f3f5 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/bottomSheets/BottomSheetContainer.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/bottomSheets/BottomSheetContainer.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.bottomSheets +package com.metacto.core.ui.components.bottomSheets import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column @@ -13,7 +13,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.text.TextStyle -import com.metacto.core.presentation.theme.CoreTheme +import com.metacto.core.ui.theme.CoreTheme @Composable fun BottomSheetContainer( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/bottomSheets/BottomSheetDoneContainer.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/bottomSheets/BottomSheetDoneContainer.kt similarity index 92% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/bottomSheets/BottomSheetDoneContainer.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/bottomSheets/BottomSheetDoneContainer.kt index 01c8c921..442aeeb1 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/bottomSheets/BottomSheetDoneContainer.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/bottomSheets/BottomSheetDoneContainer.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.bottomSheets +package com.metacto.core.ui.components.bottomSheets import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement @@ -10,8 +10,8 @@ import androidx.compose.foundation.layout.padding import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import com.metacto.core.presentation.theme.CoreTheme -import com.metacto.core.utils.PlatformType +import com.metacto.core.PlatformType +import com.metacto.core.ui.theme.CoreTheme @Composable fun BottomSheetDoneContainer( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/bottomSheets/BottomSheetDoneToolbar.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/bottomSheets/BottomSheetDoneToolbar.kt similarity index 88% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/bottomSheets/BottomSheetDoneToolbar.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/bottomSheets/BottomSheetDoneToolbar.kt index 8acee839..d0b4819f 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/bottomSheets/BottomSheetDoneToolbar.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/bottomSheets/BottomSheetDoneToolbar.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.bottomSheets +package com.metacto.core.ui.components.bottomSheets import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box @@ -12,11 +12,12 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.text.style.TextAlign -import com.metacto.core.presentation.components.buttons.PrimaryTextButton -import com.metacto.core.presentation.components.dividers.VerticalDivider -import com.metacto.core.presentation.theme.CoreTheme -import com.metacto.core.utils.PlatformType -import com.metacto.coreApp.resources.* +import com.metacto.core.PlatformType +import com.metacto.core.ui.components.buttons.PrimaryTextButton +import com.metacto.core.ui.components.dividers.VerticalDivider +import com.metacto.core.ui.resources.Res +import com.metacto.core.ui.resources.action_done +import com.metacto.core.ui.theme.CoreTheme import org.jetbrains.compose.resources.stringResource @Composable diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/bottomSheets/BottomSheetInsetsContainer.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/bottomSheets/BottomSheetInsetsContainer.kt similarity index 85% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/bottomSheets/BottomSheetInsetsContainer.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/bottomSheets/BottomSheetInsetsContainer.kt index db2202de..69fd7d48 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/bottomSheets/BottomSheetInsetsContainer.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/bottomSheets/BottomSheetInsetsContainer.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.bottomSheets +package com.metacto.core.ui.components.bottomSheets import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.WindowInsets @@ -8,8 +8,8 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.windowInsetsPadding import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import com.metacto.core.utils.extensions.getBottomHandleHeight -import com.metacto.core.utils.extensions.isGesturesNavBarEnabled +import com.metacto.core.ui.extensions.getBottomHandleHeight +import com.metacto.core.ui.extensions.isGesturesNavBarEnabled @Composable fun BottomSheetInsetsContainer( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/bottomSheets/BottomSheetToolbar.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/bottomSheets/BottomSheetToolbar.kt similarity index 93% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/bottomSheets/BottomSheetToolbar.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/bottomSheets/BottomSheetToolbar.kt index 084e361b..e2cec0eb 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/bottomSheets/BottomSheetToolbar.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/bottomSheets/BottomSheetToolbar.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.bottomSheets +package com.metacto.core.ui.components.bottomSheets import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Box @@ -17,9 +17,9 @@ import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.components.dividers.VerticalDivider -import com.metacto.core.presentation.theme.CoreTheme -import com.metacto.core.utils.extensions.noRippleClickable +import com.metacto.core.ui.components.dividers.VerticalDivider +import com.metacto.core.ui.extensions.noRippleClickable +import com.metacto.core.ui.theme.CoreTheme @Composable fun BottomSheetToolbar( diff --git a/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/BaseButton.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/BaseButton.kt new file mode 100644 index 00000000..17289dbe --- /dev/null +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/BaseButton.kt @@ -0,0 +1,181 @@ +package com.metacto.core.ui.components.buttons + +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.heightIn +import androidx.compose.foundation.layout.size +import androidx.compose.material3.Button +import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.LocalMinimumInteractiveComponentSize +import androidx.compose.material3.ProgressIndicatorDefaults +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.Shape +import androidx.compose.ui.graphics.painter.Painter +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import com.metacto.core.ui.components.visibilities.FadeVisibility +import com.metacto.core.ui.extensions.tintIfNotNull +import com.metacto.core.ui.theme.CoreTheme.shapes +import com.metacto.core.ui.theme.CoreTheme.spacings +import com.metacto.core.ui.theme.CoreTheme.typography + +@Composable +fun BaseButton( + modifier: Modifier = Modifier, + text: String? = null, + textStyle: TextStyle = typography.btnLabelMedium, + textColor: Color, + shape: Shape = shapes.small, + minHeight: Dp = spacings.btnMinHeightNormal, + backgroundColor: Color, + disabledBackgroundColor: Color = backgroundColor.copy(alpha = 0.3f), + border: BorderStroke? = null, + iconSize: Dp = spacings.iconLarge, + iconColor: Color?, + startIconPainter: Painter? = null, + startIconVector: ImageVector? = null, + endIconPainter: Painter? = null, + endIconVector: ImageVector? = null, + isEnabled: Boolean = true, + isDimmed: Boolean = false, + isLoading: Boolean = false, + loadingColor: Color = ProgressIndicatorDefaults.circularColor, + contentSpacing: Dp = spacings.paddingXLarge, + elevation: Dp = spacings.btnElevation, + contentAlignment: Alignment.Horizontal = Alignment.CenterHorizontally, + padding: PaddingValues = PaddingValues( + vertical = spacings.btnPaddingVertical, + horizontal = spacings.btnPaddingHorizontal + ), + onClick: () -> Unit = {} +) { + // Prepare real values + val realIsEnabled = isEnabled && isLoading.not() + val realDisabledBgColor = if (isLoading) backgroundColor else disabledBackgroundColor + val realBgColor = if (isDimmed) disabledBackgroundColor else backgroundColor + + val heightAvailableToContent = ( + minHeight - padding.calculateTopPadding() - padding.calculateBottomPadding() + ).coerceAtLeast(0.dp) + val realLoadingSize = spacings.btnLoadingSize.coerceAtMost(heightAvailableToContent) + + // Render button + WithoutMaterialTouchTargetPadding { + Button( + modifier = modifier.heightIn(min = minHeight), + shape = shape, + border = border, + enabled = realIsEnabled, + onClick = onClick, + colors = ButtonDefaults.buttonColors( + containerColor = realBgColor, + disabledContainerColor = realDisabledBgColor + ), + elevation = ButtonDefaults.buttonElevation( + defaultElevation = elevation, + pressedElevation = elevation, + hoveredElevation = elevation + ), + contentPadding = padding + ) { + // Container box + Box( + contentAlignment = Alignment.Center + ) { + // Loading indicator + FadeVisibility(visible = isLoading) { + CircularProgressIndicator( + color = loadingColor, + strokeWidth = spacings.btnLoadingStroke, + modifier = Modifier.size(realLoadingSize) + ) + } + + // Content row + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy( + space = contentSpacing, + alignment = contentAlignment + ) + ) { + // Render start icon if required + if (startIconVector != null) { + Image( + imageVector = startIconVector, + colorFilter = tintIfNotNull(iconColor), + contentDescription = null, + contentScale = ContentScale.Fit, + modifier = Modifier.size(iconSize) + ) + } else if (startIconPainter != null) { + Image( + painter = startIconPainter, + colorFilter = tintIfNotNull(iconColor), + contentDescription = null, + contentScale = ContentScale.Fit, + modifier = Modifier.size(iconSize) + ) + } + + // Render text + FadeVisibility( + visible = isLoading.not(), + modifier = Modifier.weight( + weight = 1f, + fill = false + ) + ) { + Text( + text = text.orEmpty(), + textAlign = TextAlign.Center, + color = textColor, + style = textStyle + ) + } + + // Render end icon if required + if (endIconVector != null) { + Image( + imageVector = endIconVector, + colorFilter = tintIfNotNull(iconColor), + contentDescription = null, + contentScale = ContentScale.Fit, + modifier = Modifier.size(iconSize) + ) + } else if (endIconPainter != null) { + Image( + painter = endIconPainter, + colorFilter = tintIfNotNull(iconColor), + contentDescription = null, + contentScale = ContentScale.Fit, + modifier = Modifier.size(iconSize) + ) + } + } + } + } + } +} + +@Composable +private fun WithoutMaterialTouchTargetPadding(content: @Composable () -> Unit) { + CompositionLocalProvider( + LocalMinimumInteractiveComponentSize provides Dp.Unspecified, + content = content + ) +} \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/BaseTextButton.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/BaseTextButton.kt similarity index 95% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/BaseTextButton.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/BaseTextButton.kt index 208865e1..b7f3a281 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/BaseTextButton.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/BaseTextButton.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.buttons +package com.metacto.core.ui.components.buttons import androidx.compose.animation.animateColorAsState import androidx.compose.foundation.Image @@ -19,8 +19,8 @@ import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.Dp -import com.metacto.core.utils.extensions.noRippleClickable -import com.metacto.core.utils.extensions.tintIfNotNull +import com.metacto.core.ui.extensions.noRippleClickable +import com.metacto.core.ui.extensions.tintIfNotNull @Composable fun BaseTextButton( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/DangerFilledButton.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/DangerFilledButton.kt similarity index 96% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/DangerFilledButton.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/DangerFilledButton.kt index 705b39b4..e4af75c5 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/DangerFilledButton.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/DangerFilledButton.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.buttons +package com.metacto.core.ui.components.buttons import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.shape.RoundedCornerShape @@ -9,7 +9,7 @@ import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.text.TextStyle import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.theme.CoreTheme +import com.metacto.core.ui.theme.CoreTheme @Composable fun DangerFilledButton( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/FloatingButton.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/FloatingButton.kt similarity index 95% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/FloatingButton.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/FloatingButton.kt index e0a44bc0..37ac923f 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/FloatingButton.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/FloatingButton.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.buttons +package com.metacto.core.ui.components.buttons import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.runtime.Composable @@ -8,7 +8,7 @@ import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.text.TextStyle import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.theme.CoreTheme +import com.metacto.core.ui.theme.CoreTheme @Composable fun FloatingButton( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/OnSecondaryTransparentFilledButton.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/OnSecondaryTransparentFilledButton.kt similarity index 96% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/OnSecondaryTransparentFilledButton.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/OnSecondaryTransparentFilledButton.kt index 71ae40fc..5474031b 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/OnSecondaryTransparentFilledButton.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/OnSecondaryTransparentFilledButton.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.buttons +package com.metacto.core.ui.components.buttons import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.shape.RoundedCornerShape @@ -9,7 +9,7 @@ import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.text.TextStyle import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.theme.CoreTheme +import com.metacto.core.ui.theme.CoreTheme @Composable fun OnSecondaryTransparentFilledButton( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/PrimaryCheckableButton.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/PrimaryCheckableButton.kt similarity index 94% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/PrimaryCheckableButton.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/PrimaryCheckableButton.kt index 1eb40e46..7cfbb09b 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/PrimaryCheckableButton.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/PrimaryCheckableButton.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.buttons +package com.metacto.core.ui.components.buttons import androidx.compose.animation.animateColorAsState import androidx.compose.foundation.background @@ -13,7 +13,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.TextStyle -import com.metacto.core.presentation.theme.CoreTheme +import com.metacto.core.ui.theme.CoreTheme @Composable fun PrimaryCheckableButton( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/PrimaryFilledButton.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/PrimaryFilledButton.kt similarity index 96% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/PrimaryFilledButton.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/PrimaryFilledButton.kt index c3b54287..18333b19 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/PrimaryFilledButton.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/PrimaryFilledButton.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.buttons +package com.metacto.core.ui.components.buttons import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.shape.RoundedCornerShape @@ -9,7 +9,7 @@ import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.text.TextStyle import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.theme.CoreTheme +import com.metacto.core.ui.theme.CoreTheme @Composable fun PrimaryFilledButton( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/PrimaryStrokedButton.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/PrimaryStrokedButton.kt similarity index 96% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/PrimaryStrokedButton.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/PrimaryStrokedButton.kt index 7d375547..a2d653d4 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/PrimaryStrokedButton.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/PrimaryStrokedButton.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.buttons +package com.metacto.core.ui.components.buttons import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.layout.PaddingValues @@ -10,7 +10,7 @@ import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.text.TextStyle import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.theme.CoreTheme +import com.metacto.core.ui.theme.CoreTheme @Composable fun PrimaryStrokedButton( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/PrimaryTextButton.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/PrimaryTextButton.kt similarity index 93% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/PrimaryTextButton.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/PrimaryTextButton.kt index a045643a..7ae87afa 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/PrimaryTextButton.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/PrimaryTextButton.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.buttons +package com.metacto.core.ui.components.buttons import androidx.compose.foundation.layout.PaddingValues import androidx.compose.runtime.Composable @@ -8,7 +8,7 @@ import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.text.TextStyle import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.theme.CoreTheme +import com.metacto.core.ui.theme.CoreTheme @Composable fun PrimaryTextButton( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/SecondaryFilledButton.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/SecondaryFilledButton.kt similarity index 93% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/SecondaryFilledButton.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/SecondaryFilledButton.kt index e8b7a273..22a596e0 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/SecondaryFilledButton.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/SecondaryFilledButton.kt @@ -1,5 +1,6 @@ -package com.metacto.core.presentation.components.buttons +package com.metacto.core.ui.components.buttons +import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.runtime.Composable @@ -9,7 +10,7 @@ import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.text.TextStyle import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.theme.CoreTheme +import com.metacto.core.ui.theme.CoreTheme @Composable fun SecondaryFilledButton( @@ -40,6 +41,7 @@ fun SecondaryFilledButton( minHeightNormal: Dp = CoreTheme.spacings.secondaryFilledButton.minHeightNormal, shapeSmall: RoundedCornerShape = CoreTheme.shapes.secondaryFilledButton.shapeSmall, shapeNormal: RoundedCornerShape = CoreTheme.shapes.secondaryFilledButton.shapeNormal, + border: BorderStroke? = null, onClick: () -> Unit = {} ) { BaseButton( @@ -64,6 +66,7 @@ fun SecondaryFilledButton( onClick = onClick, minHeight = if (isSmall) minHeightSmall else minHeightNormal, shape = if (isSmall) shapeSmall else shapeNormal, + border = border, padding = padding ) } diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/SecondaryStrokedButton.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/SecondaryStrokedButton.kt similarity index 96% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/SecondaryStrokedButton.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/SecondaryStrokedButton.kt index 2c93d947..0194e47a 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/SecondaryStrokedButton.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/SecondaryStrokedButton.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.buttons +package com.metacto.core.ui.components.buttons import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.layout.PaddingValues @@ -10,7 +10,7 @@ import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.text.TextStyle import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.theme.CoreTheme +import com.metacto.core.ui.theme.CoreTheme @Composable fun SecondaryStrokedButton( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/SecondaryTextButton.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/SecondaryTextButton.kt similarity index 93% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/SecondaryTextButton.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/SecondaryTextButton.kt index dde5b5e8..f37e2974 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/SecondaryTextButton.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/SecondaryTextButton.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.buttons +package com.metacto.core.ui.components.buttons import androidx.compose.foundation.layout.PaddingValues import androidx.compose.runtime.Composable @@ -8,7 +8,7 @@ import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.text.TextStyle import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.theme.CoreTheme +import com.metacto.core.ui.theme.CoreTheme @Composable fun SecondaryTextButton( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/SocialButton.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/SocialButton.kt similarity index 95% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/SocialButton.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/SocialButton.kt index 0e1c3e3b..fcceb8a7 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/SocialButton.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/SocialButton.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.buttons +package com.metacto.core.ui.components.buttons import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.layout.PaddingValues @@ -11,7 +11,7 @@ import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.text.TextStyle import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.theme.CoreTheme +import com.metacto.core.ui.theme.CoreTheme @Composable fun SocialButton( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/SwitchButton.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/SwitchButton.kt similarity index 92% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/SwitchButton.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/SwitchButton.kt index 604f264e..a5310a0e 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/SwitchButton.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/SwitchButton.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.buttons +package com.metacto.core.ui.components.buttons import androidx.compose.animation.animateColorAsState import androidx.compose.foundation.background @@ -18,9 +18,9 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.shadow import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.theme.CoreTheme -import com.metacto.core.utils.extensions.animateAlignmentAsState -import com.metacto.core.utils.extensions.noRippleClickable +import com.metacto.core.ui.extensions.animateAlignmentAsState +import com.metacto.core.ui.extensions.noRippleClickable +import com.metacto.core.ui.theme.CoreTheme @Composable fun SwitchButton( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/TertiaryFilledButton.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/TertiaryFilledButton.kt similarity index 96% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/TertiaryFilledButton.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/TertiaryFilledButton.kt index 5a4fdf43..3784397b 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/TertiaryFilledButton.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/TertiaryFilledButton.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.buttons +package com.metacto.core.ui.components.buttons import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.shape.RoundedCornerShape @@ -9,7 +9,7 @@ import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.text.TextStyle import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.theme.CoreTheme +import com.metacto.core.ui.theme.CoreTheme @Composable fun TertiaryFilledButton( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/TertiaryStrokedButton.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/TertiaryStrokedButton.kt similarity index 96% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/TertiaryStrokedButton.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/TertiaryStrokedButton.kt index a4a5b2ac..cbe2ec2d 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/TertiaryStrokedButton.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/TertiaryStrokedButton.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.buttons +package com.metacto.core.ui.components.buttons import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.layout.PaddingValues @@ -10,7 +10,7 @@ import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.text.TextStyle import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.theme.CoreTheme +import com.metacto.core.ui.theme.CoreTheme @Composable fun TertiaryStrokedButton( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/TertiaryTextButton.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/TertiaryTextButton.kt similarity index 93% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/TertiaryTextButton.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/TertiaryTextButton.kt index a045865e..c45e2396 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/TertiaryTextButton.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/TertiaryTextButton.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.buttons +package com.metacto.core.ui.components.buttons import androidx.compose.foundation.layout.PaddingValues import androidx.compose.runtime.Composable @@ -8,7 +8,7 @@ import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.text.TextStyle import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.theme.CoreTheme +import com.metacto.core.ui.theme.CoreTheme @Composable fun TertiaryTextButton( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/TransparentStrokedButton.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/TransparentStrokedButton.kt similarity index 96% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/TransparentStrokedButton.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/TransparentStrokedButton.kt index fe45908d..81fe7511 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/buttons/TransparentStrokedButton.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/buttons/TransparentStrokedButton.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.buttons +package com.metacto.core.ui.components.buttons import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.layout.PaddingValues @@ -11,7 +11,7 @@ import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.text.TextStyle import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.theme.CoreTheme +import com.metacto.core.ui.theme.CoreTheme @Composable fun TransparentStrokedButton( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/containers/CoreColumn.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/containers/CoreColumn.kt similarity index 88% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/containers/CoreColumn.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/containers/CoreColumn.kt index b592b280..5ce5588b 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/containers/CoreColumn.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/containers/CoreColumn.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.containers +package com.metacto.core.ui.components.containers import androidx.compose.foundation.ScrollState import androidx.compose.foundation.layout.Arrangement @@ -13,11 +13,11 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import com.metacto.core.presentation.theme.CoreTheme -import com.metacto.core.utils.extensions.onScroll -import com.metacto.core.utils.extensions.pullRefreshIf -import com.metacto.core.utils.extensions.rememberPullRefreshStateIf -import com.metacto.core.utils.extensions.verticalScrollIf +import com.metacto.core.ui.extensions.onScroll +import com.metacto.core.ui.theme.CoreTheme +import com.metacto.core.ui.extensions.pullRefreshIf +import com.metacto.core.ui.extensions.rememberPullRefreshStateIf +import com.metacto.core.ui.extensions.verticalScrollIf @OptIn(ExperimentalMaterialApi::class) @Composable diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/containers/CoreLazyColumn.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/containers/CoreLazyColumn.kt similarity index 85% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/containers/CoreLazyColumn.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/containers/CoreLazyColumn.kt index 601569d6..f85bbb83 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/containers/CoreLazyColumn.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/containers/CoreLazyColumn.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.containers +package com.metacto.core.ui.components.containers import androidx.compose.foundation.gestures.FlingBehavior import androidx.compose.foundation.gestures.ScrollableDefaults @@ -15,11 +15,10 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalSoftwareKeyboardController import androidx.compose.ui.unit.dp -import com.metacto.core.presentation.globalState.ICoreGlobalState -import com.metacto.core.utils.extensions.isKeyboardVisible -import com.metacto.core.utils.extensions.rememberPrevious -import org.koin.compose.koinInject +import com.metacto.core.ui.extensions.isKeyboardVisible +import com.metacto.core.ui.extensions.rememberPrevious @Composable fun CoreLazyColumn( @@ -34,15 +33,16 @@ fun CoreLazyColumn( dismissKeyboardWhenScrolled: Boolean = true, content: LazyListScope.() -> Unit ) { + val keyboardController = LocalSoftwareKeyboardController.current + if (dismissKeyboardWhenScrolled) { val currentPosition by remember { derivedStateOf { state.firstVisibleItemIndex } } val prevPosition = rememberPrevious(currentPosition) ?: -1 - val globalState = koinInject() val isKeyboardVisible by isKeyboardVisible() LaunchedEffect(currentPosition, prevPosition, isKeyboardVisible) { if (prevPosition > currentPosition && isKeyboardVisible) { - globalState.dismissKeyboard() + keyboardController?.hide() } } } diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/containers/InfiniteScrollLazyRow.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/containers/InfiniteScrollLazyRow.kt similarity index 98% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/containers/InfiniteScrollLazyRow.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/containers/InfiniteScrollLazyRow.kt index a5c635f3..84517a39 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/containers/InfiniteScrollLazyRow.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/containers/InfiniteScrollLazyRow.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.containers +package com.metacto.core.ui.components.containers import androidx.compose.foundation.gestures.FlingBehavior import androidx.compose.foundation.gestures.ScrollableDefaults diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/containers/SafeInsetsColumn.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/containers/SafeInsetsColumn.kt similarity index 88% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/containers/SafeInsetsColumn.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/containers/SafeInsetsColumn.kt index f06f8b63..1597b8fb 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/containers/SafeInsetsColumn.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/containers/SafeInsetsColumn.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.containers +package com.metacto.core.ui.components.containers import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -9,8 +9,8 @@ import androidx.compose.foundation.layout.safeDrawingPadding import androidx.compose.foundation.layout.statusBarsPadding import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import com.metacto.core.utils.extensions.isGesturesNavBarEnabled -import com.metacto.core.utils.extensions.modifyIf +import com.metacto.core.ui.extensions.isGesturesNavBarEnabled +import com.metacto.core.ui.extensions.modifyIf @Composable fun SafeInsetsColumn( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/containers/ScreenColumn.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/containers/ScreenColumn.kt similarity index 96% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/containers/ScreenColumn.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/containers/ScreenColumn.kt index 1053eae1..89fcb949 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/containers/ScreenColumn.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/containers/ScreenColumn.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.containers +package com.metacto.core.ui.components.containers import androidx.compose.foundation.ScrollState import androidx.compose.foundation.layout.Arrangement @@ -14,7 +14,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.theme.CoreTheme +import com.metacto.core.ui.theme.CoreTheme @Composable fun ScreenColumn( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/dialogs/AppDialog.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/dialogs/AppDialog.kt similarity index 95% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/dialogs/AppDialog.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/dialogs/AppDialog.kt index 679bfd4e..e42d103f 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/dialogs/AppDialog.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/dialogs/AppDialog.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.dialogs +package com.metacto.core.ui.components.dialogs import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box @@ -13,7 +13,7 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.window.Dialog import androidx.compose.ui.window.DialogProperties -import com.metacto.core.presentation.theme.CoreTheme +import com.metacto.core.ui.theme.CoreTheme @Composable fun AppDialog( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/dialogs/ChoicesDialog.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/dialogs/ChoicesDialog.kt similarity index 91% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/dialogs/ChoicesDialog.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/dialogs/ChoicesDialog.kt index f3b86883..cb3a3421 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/dialogs/ChoicesDialog.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/dialogs/ChoicesDialog.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.dialogs +package com.metacto.core.ui.components.dialogs import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.fillMaxWidth @@ -10,8 +10,8 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.TextStyle import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.components.buttons.PrimaryFilledButton -import com.metacto.core.presentation.theme.CoreTheme +import com.metacto.core.ui.components.buttons.PrimaryFilledButton +import com.metacto.core.ui.theme.CoreTheme @Composable fun ChoicesDialog( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/dialogs/ConfirmationDialog.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/dialogs/ConfirmationDialog.kt similarity index 92% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/dialogs/ConfirmationDialog.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/dialogs/ConfirmationDialog.kt index 2cb2323a..1a4519b8 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/dialogs/ConfirmationDialog.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/dialogs/ConfirmationDialog.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.dialogs +package com.metacto.core.ui.components.dialogs import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column @@ -14,10 +14,12 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.Dp -import com.metacto.coreApp.resources.* -import com.metacto.core.presentation.components.buttons.PrimaryFilledButton -import com.metacto.core.presentation.components.buttons.PrimaryStrokedButton -import com.metacto.core.presentation.theme.CoreTheme +import com.metacto.core.ui.components.buttons.PrimaryFilledButton +import com.metacto.core.ui.components.buttons.PrimaryStrokedButton +import com.metacto.core.ui.resources.Res +import com.metacto.core.ui.resources.cancel +import com.metacto.core.ui.resources.confirm +import com.metacto.core.ui.theme.CoreTheme import org.jetbrains.compose.resources.stringResource @Composable diff --git a/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/dialogs/CustomDialog.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/dialogs/CustomDialog.kt new file mode 100644 index 00000000..2f510ebe --- /dev/null +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/dialogs/CustomDialog.kt @@ -0,0 +1,73 @@ +package com.metacto.core.ui.components.dialogs + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.text.TextStyle +import com.metacto.core.ui.components.buttons.PrimaryFilledButton +import com.metacto.core.ui.resources.Res +import com.metacto.core.ui.resources.ok +import com.metacto.core.ui.theme.CoreTheme +import org.jetbrains.compose.resources.stringResource + +@Composable +fun CustomDialog( + modifier: Modifier = Modifier, + isCancellable: Boolean = true, + showToolbar: Boolean = false, + title: String? = null, + showPositiveButton: Boolean = false, + positiveButtonText: String? = null, + onPositiveClick: (() -> Unit)? = null, + onDismiss: (() -> Unit)? = null, + buttonPadding: PaddingValues = PaddingValues(top = CoreTheme.spacings.customDialog.btnPaddingTop), + btnTextStyle: TextStyle = CoreTheme.typography.customDialog.btnTextStyle, + btnBgColor: Color = CoreTheme.colors.customDialog.btnBgColor, + btnTextColor: Color = CoreTheme.colors.customDialog.btnTextColor, + contentPadding: PaddingValues = PaddingValues(CoreTheme.spacings.appDialog.contentPadding), + shape: RoundedCornerShape = CoreTheme.shapes.appDialog.shape, + content: @Composable () -> Unit +) { + // Render app dialog + AppDialog( + modifier = modifier, + title = title, + showToolbar = showToolbar, + onDismiss = onDismiss, + isCancellable = isCancellable, + contentPadding = contentPadding, + shape = shape, + ) { + // Container column + Column( + horizontalAlignment = Alignment.End, + modifier = Modifier.fillMaxWidth() + ) { + // Render custom content + content() + + // Render optional positive button + if (showPositiveButton) { + PrimaryFilledButton( + text = positiveButtonText ?: stringResource(Res.string.ok), + textColor = btnTextColor, + textStyle = btnTextStyle, + backgroundColor = btnBgColor, + isSmall = true, + onClick = { + onPositiveClick?.invoke() + }, + modifier = Modifier + .fillMaxWidth() + .padding(buttonPadding) + ) + } + } + } +} diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/dialogs/DialogToolbar.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/dialogs/DialogToolbar.kt similarity index 93% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/dialogs/DialogToolbar.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/dialogs/DialogToolbar.kt index c0e2a348..20aff733 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/dialogs/DialogToolbar.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/dialogs/DialogToolbar.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.dialogs +package com.metacto.core.ui.components.dialogs import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Box @@ -17,8 +17,8 @@ import androidx.compose.ui.graphics.ColorFilter import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.theme.CoreTheme -import com.metacto.core.utils.extensions.noRippleClickable +import com.metacto.core.ui.theme.CoreTheme +import com.metacto.core.ui.extensions.noRippleClickable @Composable fun DialogToolbar( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/dialogs/ForceUpdateDialog.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/dialogs/ForceUpdateDialog.kt similarity index 82% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/dialogs/ForceUpdateDialog.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/dialogs/ForceUpdateDialog.kt index 8167f7d8..09695da1 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/dialogs/ForceUpdateDialog.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/dialogs/ForceUpdateDialog.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.dialogs +package com.metacto.core.ui.components.dialogs import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Arrangement @@ -17,10 +17,13 @@ import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp -import com.metacto.core.presentation.components.buttons.PrimaryFilledButton -import com.metacto.core.presentation.components.buttons.PrimaryTextButton -import com.metacto.core.presentation.theme.CoreTheme -import com.metacto.coreApp.resources.* +import com.metacto.core.ui.components.buttons.PrimaryFilledButton +import com.metacto.core.ui.components.buttons.PrimaryTextButton +import com.metacto.core.ui.resources.Res +import com.metacto.core.ui.resources.confirm +import com.metacto.core.ui.resources.ic_upgrade +import com.metacto.core.ui.resources.skip_update_button +import com.metacto.core.ui.theme.CoreTheme import org.jetbrains.compose.resources.DrawableResource import org.jetbrains.compose.resources.painterResource import org.jetbrains.compose.resources.stringResource @@ -36,7 +39,7 @@ fun ForceUpdateDialog( onUpdateClick: (() -> Unit)? = null, onSkipUpdateClicked: (() -> Unit)? = null, onDismiss: (() -> Unit)? = null, - image: DrawableResource = Res.drawable.ic_upgrade, + image: DrawableResource? = Res.drawable.ic_upgrade, bodyTextStyle: TextStyle = CoreTheme.typography.forceUpdateDialog.textStyle, bodyTextColor: Color = CoreTheme.colors.forceUpdateDialog.bodyTextColor, textPadding: Dp = CoreTheme.spacings.forceUpdateDialog.textPadding, @@ -66,14 +69,16 @@ fun ForceUpdateDialog( .padding(dialogPadding) ) { - // top image - Image( - painter = painterResource(image), - contentDescription = "force update", - modifier = Modifier - .size(CoreTheme.spacings.forceUpdateDialog.imageSize) - .padding(top = msgSpacing) - ) + // top image - only show if image is not null + image?.let { + Image( + painter = painterResource(it), + contentDescription = "force update", + modifier = Modifier + .size(CoreTheme.spacings.forceUpdateDialog.imageSize) + .padding(top = msgSpacing) + ) + } // Render body text Text( @@ -120,4 +125,4 @@ fun ForceUpdateDialog( } } } -} \ No newline at end of file +} diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/dialogs/MessageDialog.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/dialogs/MessageDialog.kt similarity index 94% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/dialogs/MessageDialog.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/dialogs/MessageDialog.kt index 8c66fdd5..96ffe87b 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/dialogs/MessageDialog.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/dialogs/MessageDialog.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.dialogs +package com.metacto.core.ui.components.dialogs import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues @@ -12,9 +12,10 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.components.buttons.PrimaryFilledButton -import com.metacto.core.presentation.theme.CoreTheme -import com.metacto.coreApp.resources.* +import com.metacto.core.ui.components.buttons.PrimaryFilledButton +import com.metacto.core.ui.resources.Res +import com.metacto.core.ui.resources.ok +import com.metacto.core.ui.theme.CoreTheme import org.jetbrains.compose.resources.stringResource @Composable diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/dialogs/OverrideUserDialog.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/dialogs/OverrideUserDialog.kt similarity index 90% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/dialogs/OverrideUserDialog.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/dialogs/OverrideUserDialog.kt index d8df44d1..08388e69 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/dialogs/OverrideUserDialog.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/dialogs/OverrideUserDialog.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.dialogs +package com.metacto.core.ui.components.dialogs import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues @@ -16,10 +16,14 @@ import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.components.buttons.PrimaryFilledButton -import com.metacto.core.presentation.components.inputFields.TertiaryTextInputField -import com.metacto.core.presentation.theme.CoreTheme -import com.metacto.coreApp.resources.* +import com.metacto.core.ui.components.buttons.PrimaryFilledButton +import com.metacto.core.ui.components.inputFields.TertiaryTextInputField +import com.metacto.core.ui.resources.Res +import com.metacto.core.ui.resources.override +import com.metacto.core.ui.resources.override_current_user +import com.metacto.core.ui.resources.override_current_user_message +import com.metacto.core.ui.resources.reset_current_user +import com.metacto.core.ui.theme.CoreTheme import org.jetbrains.compose.resources.stringResource @Composable diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/dialogs/SuccessDialog.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/dialogs/SuccessDialog.kt similarity index 93% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/dialogs/SuccessDialog.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/dialogs/SuccessDialog.kt index 77d49f90..fd4da0c9 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/dialogs/SuccessDialog.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/dialogs/SuccessDialog.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.dialogs +package com.metacto.core.ui.components.dialogs import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Column @@ -18,9 +18,10 @@ import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.components.buttons.PrimaryFilledButton -import com.metacto.core.presentation.theme.CoreTheme -import com.metacto.coreApp.resources.* +import com.metacto.core.ui.components.buttons.PrimaryFilledButton +import com.metacto.core.ui.resources.Res +import com.metacto.core.ui.resources.ok +import com.metacto.core.ui.theme.CoreTheme import org.jetbrains.compose.resources.stringResource @Composable diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/dialogs/datePicker/DatePickerDialog.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/dialogs/datePicker/DatePickerDialog.kt similarity index 83% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/dialogs/datePicker/DatePickerDialog.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/dialogs/datePicker/DatePickerDialog.kt index 852ba710..b8959a3f 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/dialogs/datePicker/DatePickerDialog.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/dialogs/datePicker/DatePickerDialog.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.dialogs.datePicker +package com.metacto.core.ui.components.dialogs.datePicker import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.layout.Column @@ -16,18 +16,19 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.TextStyle import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.DpSize -import com.metacto.core.presentation.components.buttons.PrimaryFilledButton -import com.metacto.core.presentation.components.dialogs.AppDialog -import com.metacto.core.presentation.components.wheelPicker.SelectorProperties -import com.metacto.core.presentation.components.wheelPicker.WheelPickerDefaults -import com.metacto.core.presentation.components.wheelPicker.datetime.CYBER_ERA -import com.metacto.core.presentation.components.wheelPicker.datetime.EPOCH -import com.metacto.core.presentation.components.wheelPicker.datetime.WheelDatePicker -import com.metacto.core.presentation.components.wheelPicker.datetime.now -import com.metacto.core.presentation.theme.CoreTheme -import com.metacto.core.utils.extensions.getScreenSize -import com.metacto.core.utils.extensions.toDp -import com.metacto.coreApp.resources.* +import com.metacto.core.date.now +import com.metacto.core.ui.components.buttons.PrimaryFilledButton +import com.metacto.core.ui.components.dialogs.AppDialog +import com.metacto.core.ui.components.wheelPicker.SelectorProperties +import com.metacto.core.ui.components.wheelPicker.WheelPickerDefaults +import com.metacto.core.ui.components.wheelPicker.datetime.CYBER_ERA +import com.metacto.core.ui.components.wheelPicker.datetime.EPOCH +import com.metacto.core.ui.components.wheelPicker.datetime.WheelDatePicker +import com.metacto.core.ui.theme.CoreTheme +import com.metacto.core.ui.extensions.getScreenSize +import com.metacto.core.ui.extensions.toDp +import com.metacto.core.ui.resources.Res +import com.metacto.core.ui.resources.ok import org.jetbrains.compose.resources.stringResource import kotlinx.datetime.LocalDate diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/dialogs/timePicker/TimePickerDialog.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/dialogs/timePicker/TimePickerDialog.kt similarity index 82% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/dialogs/timePicker/TimePickerDialog.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/dialogs/timePicker/TimePickerDialog.kt index ccb07399..cf6baa27 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/dialogs/timePicker/TimePickerDialog.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/dialogs/timePicker/TimePickerDialog.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.dialogs.timePicker +package com.metacto.core.ui.components.dialogs.timePicker import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.layout.Column @@ -16,22 +16,25 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.TextStyle import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.DpSize -import com.metacto.core.presentation.components.buttons.PrimaryFilledButton -import com.metacto.core.presentation.components.dialogs.AppDialog -import com.metacto.core.presentation.components.wheelPicker.SelectorProperties -import com.metacto.core.presentation.components.wheelPicker.WheelPickerDefaults -import com.metacto.core.presentation.components.wheelPicker.datetime.MAX -import com.metacto.core.presentation.components.wheelPicker.datetime.MIN -import com.metacto.core.presentation.components.wheelPicker.datetime.WheelTimePicker -import com.metacto.core.presentation.globalState.ICoreGlobalState -import com.metacto.core.presentation.globalState.models.SnackBarParams -import com.metacto.core.presentation.globalState.models.SnackBarType -import com.metacto.core.presentation.theme.CoreTheme -import com.metacto.core.utils.resources.IResourceProvider -import com.metacto.core.utils.extensions.getScreenSize -import com.metacto.core.utils.extensions.toDp -import com.metacto.core.utils.getCurrentTime -import com.metacto.coreApp.resources.* +import com.metacto.core.ui.components.buttons.PrimaryFilledButton +import com.metacto.core.ui.components.dialogs.AppDialog +import com.metacto.core.ui.components.wheelPicker.SelectorProperties +import com.metacto.core.ui.components.wheelPicker.WheelPickerDefaults +import com.metacto.core.ui.components.wheelPicker.datetime.MAX +import com.metacto.core.ui.components.wheelPicker.datetime.MIN +import com.metacto.core.ui.components.wheelPicker.datetime.WheelTimePicker +import com.metacto.core.ui.components.wheelPicker.datetime.now +import com.metacto.core.ui.theme.CoreTheme +import com.metacto.core.ui.extensions.getScreenSize +import com.metacto.core.ui.extensions.toDp +import com.metacto.core.ui.globalState.ICoreGlobalState +import com.metacto.core.ui.globalState.models.SnackBarParams +import com.metacto.core.ui.globalState.models.SnackBarType +import com.metacto.core.ui.resources.IResourceProvider +import com.metacto.core.ui.resources.Res +import com.metacto.core.ui.resources.maximum_allowed_time_is_s +import com.metacto.core.ui.resources.minimum_allowed_time_is_s +import com.metacto.core.ui.resources.ok import org.jetbrains.compose.resources.stringResource import kotlinx.datetime.LocalTime import org.koin.compose.koinInject @@ -71,7 +74,7 @@ internal fun TimePickerDialog( val resourceProvider = koinInject() // Config times - val selectedTime = selectedTime ?: getCurrentTime() + val selectedTime = selectedTime ?: LocalTime.now() val minTime = minTime ?: LocalTime.MIN val maxTime = maxTime ?: LocalTime.MAX diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/dividers/HorizontalDivider.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/dividers/HorizontalDivider.kt similarity index 80% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/dividers/HorizontalDivider.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/dividers/HorizontalDivider.kt index 04a66c05..04316e29 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/dividers/HorizontalDivider.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/dividers/HorizontalDivider.kt @@ -1,11 +1,11 @@ -package com.metacto.core.presentation.components.dividers +package com.metacto.core.ui.components.dividers import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.material3.Divider import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import com.metacto.core.presentation.theme.CoreTheme +import com.metacto.core.ui.theme.CoreTheme @Composable fun HorizontalDivider( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/dividers/VerticalDivider.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/dividers/VerticalDivider.kt similarity index 79% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/dividers/VerticalDivider.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/dividers/VerticalDivider.kt index f7afb81a..b0f7784a 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/dividers/VerticalDivider.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/dividers/VerticalDivider.kt @@ -1,11 +1,11 @@ -package com.metacto.core.presentation.components.dividers +package com.metacto.core.ui.components.dividers import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.material3.Divider import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import com.metacto.core.presentation.theme.CoreTheme +import com.metacto.core.ui.theme.CoreTheme @Composable fun VerticalDivider( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/grids/NonLazyGrid.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/grids/NonLazyGrid.kt similarity index 95% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/grids/NonLazyGrid.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/grids/NonLazyGrid.kt index 40a0efe8..fe89eb19 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/grids/NonLazyGrid.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/grids/NonLazyGrid.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.grids +package com.metacto.core.ui.components.grids import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box @@ -13,7 +13,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.theme.CoreTheme +import com.metacto.core.ui.theme.CoreTheme @Composable fun NonLazyGrid( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/images/AppImage.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/images/AppImage.kt similarity index 88% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/images/AppImage.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/images/AppImage.kt index 83650343..1f9df1e3 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/images/AppImage.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/images/AppImage.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.images +package com.metacto.core.ui.components.images import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.background @@ -28,14 +28,14 @@ import coil3.request.ErrorResult import coil3.request.ImageRequest import coil3.request.crossfade import coil3.svg.SvgDecoder -import com.metacto.core.presentation.models.ImageUIModel -import com.metacto.core.presentation.theme.CoreTheme -import com.metacto.core.utils.extensions.backgroundIfNotNull -import com.metacto.core.utils.extensions.borderIfNotNull -import com.metacto.core.utils.extensions.clipIfNotNull -import com.metacto.core.utils.extensions.shadowIfNotNull -import com.metacto.core.utils.extensions.shimmerIf -import com.metacto.strapikmm.util.applyIf +import com.metacto.core.extensions.applyIf +import com.metacto.core.ui.extensions.backgroundIfNotNull +import com.metacto.core.ui.extensions.borderIfNotNull +import com.metacto.core.ui.extensions.clipIfNotNull +import com.metacto.core.ui.extensions.shadowIfNotNull +import com.metacto.core.ui.extensions.shimmerIf +import com.metacto.core.ui.models.ImageUIModel +import com.metacto.core.ui.theme.CoreTheme internal const val DEFAULT_IMAGE_CROSS_FADE_DURATION = 200 @@ -82,7 +82,9 @@ fun AppImage( val context = LocalPlatformContext.current val model = remember(url, image?.getData()) { ImageRequest.Builder(context) - .decoderFactory(SvgDecoder.Factory()) + .applyIf(url?.contains(".svg", true) == true) { + decoderFactory(SvgDecoder.Factory()) + } .data(url ?: image?.getData()) .httpHeaders(networkHeaders) .diskCachePolicy(CachePolicy.ENABLED) diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/images/ColorImage.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/images/ColorImage.kt similarity index 86% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/images/ColorImage.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/images/ColorImage.kt index e1001123..2a4a29a2 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/images/ColorImage.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/images/ColorImage.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.images +package com.metacto.core.ui.components.images import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/images/GrayAppImage.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/images/GrayAppImage.kt similarity index 91% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/images/GrayAppImage.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/images/GrayAppImage.kt index 6b3b9e49..b0e9d0ad 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/images/GrayAppImage.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/images/GrayAppImage.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.images +package com.metacto.core.ui.components.images import androidx.compose.foundation.BorderStroke import androidx.compose.runtime.Composable @@ -13,9 +13,10 @@ import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.models.ImageUIModel -import com.metacto.core.presentation.theme.CoreTheme -import com.metacto.coreApp.resources.* +import com.metacto.core.ui.models.ImageUIModel +import com.metacto.core.ui.resources.Res +import com.metacto.core.ui.resources.img_gray_placeholder +import com.metacto.core.ui.theme.CoreTheme import org.jetbrains.compose.resources.painterResource @Composable diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/images/WhiteAppImage.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/images/WhiteAppImage.kt similarity index 91% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/images/WhiteAppImage.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/images/WhiteAppImage.kt index c2c76714..584073f4 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/images/WhiteAppImage.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/images/WhiteAppImage.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.images +package com.metacto.core.ui.components.images import androidx.compose.foundation.BorderStroke import androidx.compose.runtime.Composable @@ -13,9 +13,10 @@ import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.models.ImageUIModel -import com.metacto.core.presentation.theme.CoreTheme -import com.metacto.coreApp.resources.* +import com.metacto.core.ui.models.ImageUIModel +import com.metacto.core.ui.resources.Res +import com.metacto.core.ui.resources.img_white_placeholder +import com.metacto.core.ui.theme.CoreTheme import org.jetbrains.compose.resources.painterResource @Composable diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/images/ZoomState.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/images/ZoomState.kt similarity index 99% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/images/ZoomState.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/images/ZoomState.kt index 531eb787..1dbd7944 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/images/ZoomState.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/images/ZoomState.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.images +package com.metacto.core.ui.components.images import androidx.compose.animation.core.Animatable import androidx.compose.animation.core.AnimationSpec diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/images/Zoomable.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/images/Zoomable.kt similarity index 99% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/images/Zoomable.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/images/Zoomable.kt index 77b24f5f..bf7ac4dc 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/images/Zoomable.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/images/Zoomable.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.images +package com.metacto.core.ui.components.images import androidx.compose.animation.core.AnimationSpec import androidx.compose.animation.core.spring diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/inputFields/BaseTextInputField.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/inputFields/BaseTextInputField.kt similarity index 95% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/inputFields/BaseTextInputField.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/inputFields/BaseTextInputField.kt index a664aa15..0c6b4eee 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/inputFields/BaseTextInputField.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/inputFields/BaseTextInputField.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.inputFields +package com.metacto.core.ui.components.inputFields import androidx.compose.animation.AnimatedVisibility import androidx.compose.foundation.Image @@ -34,6 +34,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.shadow import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.graphics.takeOrElse import androidx.compose.ui.graphics.vector.ImageVector @@ -51,15 +52,15 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.IntSize -import com.metacto.core.presentation.theme.CoreTheme -import com.metacto.core.presentation.theme.CoreTheme.spacings -import com.metacto.core.utils.extensions.DelayedLaunchedEffect -import com.metacto.core.utils.extensions.focusRequesterIfNotNull -import com.metacto.core.utils.extensions.noRippleClickable -import com.metacto.core.utils.extensions.rememberFocusRequester -import com.metacto.core.utils.extensions.removeAllNonNumeric -import com.metacto.core.utils.extensions.tintIfNotNull -import com.metacto.core.utils.extensions.toDp +import com.metacto.core.extensions.removeAllNonNumeric +import com.metacto.core.ui.theme.CoreTheme +import com.metacto.core.ui.theme.CoreTheme.spacings +import com.metacto.core.ui.extensions.DelayedLaunchedEffect +import com.metacto.core.ui.extensions.focusRequesterIfNotNull +import com.metacto.core.ui.extensions.noRippleClickable +import com.metacto.core.ui.extensions.rememberFocusRequester +import com.metacto.core.ui.extensions.tintIfNotNull +import com.metacto.core.ui.extensions.toDp import kotlin.time.Duration import kotlin.time.Duration.Companion.milliseconds @@ -268,7 +269,7 @@ fun BaseTextInputField( unfocusedContainerColor = backgroundColor, disabledContainerColor = backgroundColor.copy(alpha = 0.38f), errorContainerColor = backgroundColor, - cursorColor = Color.Unspecified, + cursorColor = textColor, errorCursorColor = CoreTheme.colors.danger, errorPlaceholderColor = CoreTheme.colors.danger, focusedIndicatorColor = focusedBorderColor, @@ -351,6 +352,7 @@ fun BaseTextInputField( imeAction = imeAction, capitalization = capitalization ), + cursorBrush = SolidColor(textColor), interactionSource = interactionSource, singleLine = singleLine, maxLines = maxLines, diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/inputFields/CurrencyAmountInputVisualTransformation.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/inputFields/CurrencyAmountInputVisualTransformation.kt similarity index 88% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/inputFields/CurrencyAmountInputVisualTransformation.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/inputFields/CurrencyAmountInputVisualTransformation.kt index b339e392..2c3b0a78 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/inputFields/CurrencyAmountInputVisualTransformation.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/inputFields/CurrencyAmountInputVisualTransformation.kt @@ -1,14 +1,14 @@ -package com.metacto.core.presentation.components.inputFields +package com.metacto.core.ui.components.inputFields import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.SpanStyle import androidx.compose.ui.text.input.OffsetMapping import androidx.compose.ui.text.input.TransformedText import androidx.compose.ui.text.input.VisualTransformation -import com.metacto.core.utils.extensions.addList -import com.metacto.core.utils.extensions.formatNumber -import com.metacto.core.utils.extensions.formatToCurrency -import com.metacto.core.utils.extensions.orZero +import com.metacto.core.extensions.addList +import com.metacto.core.extensions.formatNumber +import com.metacto.core.extensions.formatToCurrency +import com.metacto.core.extensions.orZero class CurrencyAmountInputVisualTransformation( private val style: SpanStyle? = null, diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/inputFields/InlineInputField.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/inputFields/InlineInputField.kt similarity index 98% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/inputFields/InlineInputField.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/inputFields/InlineInputField.kt index 851aefa6..39600640 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/inputFields/InlineInputField.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/inputFields/InlineInputField.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.inputFields +package com.metacto.core.ui.components.inputFields import androidx.compose.foundation.ScrollState import androidx.compose.foundation.background @@ -38,7 +38,7 @@ import androidx.compose.ui.text.input.TransformedText import androidx.compose.ui.text.input.VisualTransformation import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.withStyle -import com.metacto.core.presentation.theme.CoreTheme +import com.metacto.core.ui.theme.CoreTheme import kotlinx.coroutines.launch @Composable diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/inputFields/LinedOtpInputField.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/inputFields/LinedOtpInputField.kt similarity index 93% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/inputFields/LinedOtpInputField.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/inputFields/LinedOtpInputField.kt index 75b4a35a..0fcb9d1e 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/inputFields/LinedOtpInputField.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/inputFields/LinedOtpInputField.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.inputFields +package com.metacto.core.ui.components.inputFields import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement @@ -25,11 +25,11 @@ import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.theme.CoreTheme -import com.metacto.core.utils.extensions.DelayedLaunchedEffect -import com.metacto.core.utils.extensions.focusRequesterIfNotNull -import com.metacto.core.utils.extensions.rememberFocusRequester -import com.metacto.core.utils.extensions.removeAllNonNumeric +import com.metacto.core.extensions.removeAllNonNumeric +import com.metacto.core.ui.theme.CoreTheme +import com.metacto.core.ui.extensions.DelayedLaunchedEffect +import com.metacto.core.ui.extensions.focusRequesterIfNotNull +import com.metacto.core.ui.extensions.rememberFocusRequester private const val DEF_REQUEST_FOCUS_DELAY = 250L diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/inputFields/MaskVisualTransformation.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/inputFields/MaskVisualTransformation.kt similarity index 93% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/inputFields/MaskVisualTransformation.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/inputFields/MaskVisualTransformation.kt index 483c0adc..b90a8989 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/inputFields/MaskVisualTransformation.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/inputFields/MaskVisualTransformation.kt @@ -1,10 +1,10 @@ -package com.metacto.core.presentation.components.inputFields +package com.metacto.core.ui.components.inputFields import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.input.OffsetMapping import androidx.compose.ui.text.input.TransformedText import androidx.compose.ui.text.input.VisualTransformation -import com.metacto.core.utils.extensions.formatWithMask +import com.metacto.core.ui.extensions.formatWithMask open class MaskVisualTransformation( private val mask: String, diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/inputFields/OutlinedOtpInputField.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/inputFields/OutlinedOtpInputField.kt similarity index 94% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/inputFields/OutlinedOtpInputField.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/inputFields/OutlinedOtpInputField.kt index fb74f5fd..9211ebf4 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/inputFields/OutlinedOtpInputField.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/inputFields/OutlinedOtpInputField.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.inputFields +package com.metacto.core.ui.components.inputFields import androidx.compose.animation.animateColorAsState import androidx.compose.foundation.background @@ -30,11 +30,11 @@ import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.theme.CoreTheme -import com.metacto.core.utils.extensions.DelayedLaunchedEffect -import com.metacto.core.utils.extensions.focusRequesterIfNotNull -import com.metacto.core.utils.extensions.rememberFocusRequester -import com.metacto.core.utils.extensions.removeAllNonNumeric +import com.metacto.core.extensions.removeAllNonNumeric +import com.metacto.core.ui.theme.CoreTheme +import com.metacto.core.ui.extensions.DelayedLaunchedEffect +import com.metacto.core.ui.extensions.focusRequesterIfNotNull +import com.metacto.core.ui.extensions.rememberFocusRequester private const val DEF_REQUEST_FOCUS_DELAY = 250L diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/inputFields/PasswordTextInputField.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/inputFields/PasswordTextInputField.kt similarity index 95% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/inputFields/PasswordTextInputField.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/inputFields/PasswordTextInputField.kt index 78f825fb..cb5921e4 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/inputFields/PasswordTextInputField.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/inputFields/PasswordTextInputField.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.inputFields +package com.metacto.core.ui.components.inputFields import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.shape.RoundedCornerShape @@ -23,11 +23,11 @@ import androidx.compose.ui.text.input.PasswordVisualTransformation import androidx.compose.ui.text.input.VisualTransformation import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.theme.CoreTheme -import com.metacto.core.presentation.theme.CoreTheme.colors -import com.metacto.core.presentation.theme.CoreTheme.typography -import com.metacto.core.presentation.theme.CoreTheme.spacings -import com.metacto.core.presentation.theme.CoreTheme.shapes +import com.metacto.core.ui.theme.CoreTheme +import com.metacto.core.ui.theme.CoreTheme.colors +import com.metacto.core.ui.theme.CoreTheme.typography +import com.metacto.core.ui.theme.CoreTheme.spacings +import com.metacto.core.ui.theme.CoreTheme.shapes import kotlin.time.Duration @Composable diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/inputFields/PickerInputField.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/inputFields/PickerInputField.kt similarity index 90% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/inputFields/PickerInputField.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/inputFields/PickerInputField.kt index 9a2ddfc4..04ea6418 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/inputFields/PickerInputField.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/inputFields/PickerInputField.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.inputFields +package com.metacto.core.ui.components.inputFields import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.shape.RoundedCornerShape @@ -11,10 +11,10 @@ import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.text.TextStyle import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.theme.CoreTheme.colors -import com.metacto.core.presentation.theme.CoreTheme.shapes -import com.metacto.core.presentation.theme.CoreTheme.spacings -import com.metacto.core.presentation.theme.CoreTheme.typography +import com.metacto.core.ui.theme.CoreTheme.colors +import com.metacto.core.ui.theme.CoreTheme.shapes +import com.metacto.core.ui.theme.CoreTheme.spacings +import com.metacto.core.ui.theme.CoreTheme.typography @Composable fun PickerInputField( @@ -52,6 +52,7 @@ fun PickerInputField( focusedBorderThickness: Dp = spacings.pickerInputField.focusedBorderThickness, unfocusedBorderThickness: Dp = spacings.pickerInputField.unfocusedBorderThickness, minWidth: Dp = spacings.pickerInputField.minWidth, + backgroundColor: Color = colors.tertiaryTextInputField.bgColor, ) { TertiaryTextInputField( text = text, @@ -78,6 +79,7 @@ fun PickerInputField( labelTextColor = labelTextColor, errorTextStyle = errorTextStyle, errorTextColor = errorTextColor, + backgroundColor = backgroundColor, onClick = onClick, maxLines = maxLines, singleLine = singleLine, diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/inputFields/PriceTextInputField.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/inputFields/PriceTextInputField.kt similarity index 92% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/inputFields/PriceTextInputField.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/inputFields/PriceTextInputField.kt index e4100811..ecaa6dc4 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/inputFields/PriceTextInputField.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/inputFields/PriceTextInputField.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.inputFields +package com.metacto.core.ui.components.inputFields import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.shape.RoundedCornerShape @@ -15,13 +15,13 @@ import androidx.compose.ui.text.input.KeyboardCapitalization import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.theme.CoreTheme.colors -import com.metacto.core.presentation.theme.CoreTheme.shapes -import com.metacto.core.presentation.theme.CoreTheme.spacings -import com.metacto.core.presentation.theme.CoreTheme.typography -import com.metacto.core.utils.extensions.formatToMaxDecimals -import com.metacto.core.utils.extensions.orZero -import com.metacto.core.utils.extensions.removeAllNonDecimal +import com.metacto.core.extensions.formatToMaxDecimals +import com.metacto.core.extensions.orZero +import com.metacto.core.extensions.removeAllNonDecimal +import com.metacto.core.ui.theme.CoreTheme.colors +import com.metacto.core.ui.theme.CoreTheme.shapes +import com.metacto.core.ui.theme.CoreTheme.spacings +import com.metacto.core.ui.theme.CoreTheme.typography import kotlin.time.Duration @Composable diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/inputFields/PrimaryTextInputField.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/inputFields/PrimaryTextInputField.kt similarity index 94% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/inputFields/PrimaryTextInputField.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/inputFields/PrimaryTextInputField.kt index be6ab06d..4db54e34 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/inputFields/PrimaryTextInputField.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/inputFields/PrimaryTextInputField.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.inputFields +package com.metacto.core.ui.components.inputFields import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.shape.RoundedCornerShape @@ -15,10 +15,10 @@ import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.input.VisualTransformation import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.theme.CoreTheme.colors -import com.metacto.core.presentation.theme.CoreTheme.typography -import com.metacto.core.presentation.theme.CoreTheme.spacings -import com.metacto.core.presentation.theme.CoreTheme.shapes +import com.metacto.core.ui.theme.CoreTheme.colors +import com.metacto.core.ui.theme.CoreTheme.typography +import com.metacto.core.ui.theme.CoreTheme.spacings +import com.metacto.core.ui.theme.CoreTheme.shapes import kotlin.time.Duration @Composable diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/inputFields/SecondaryTextInputField.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/inputFields/SecondaryTextInputField.kt similarity index 95% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/inputFields/SecondaryTextInputField.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/inputFields/SecondaryTextInputField.kt index da4d6b30..d8f6389f 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/inputFields/SecondaryTextInputField.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/inputFields/SecondaryTextInputField.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.inputFields +package com.metacto.core.ui.components.inputFields import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.shape.RoundedCornerShape @@ -15,10 +15,10 @@ import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.input.VisualTransformation import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.theme.CoreTheme.colors -import com.metacto.core.presentation.theme.CoreTheme.spacings -import com.metacto.core.presentation.theme.CoreTheme.shapes -import com.metacto.core.presentation.theme.CoreTheme.typography +import com.metacto.core.ui.theme.CoreTheme.colors +import com.metacto.core.ui.theme.CoreTheme.spacings +import com.metacto.core.ui.theme.CoreTheme.shapes +import com.metacto.core.ui.theme.CoreTheme.typography import kotlin.time.Duration @Composable diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/inputFields/TertiaryTextInputField.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/inputFields/TertiaryTextInputField.kt similarity index 94% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/inputFields/TertiaryTextInputField.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/inputFields/TertiaryTextInputField.kt index a4d34a32..283b7244 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/inputFields/TertiaryTextInputField.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/inputFields/TertiaryTextInputField.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.inputFields +package com.metacto.core.ui.components.inputFields import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.shape.RoundedCornerShape @@ -15,10 +15,10 @@ import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.input.VisualTransformation import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.theme.CoreTheme.colors -import com.metacto.core.presentation.theme.CoreTheme.shapes -import com.metacto.core.presentation.theme.CoreTheme.spacings -import com.metacto.core.presentation.theme.CoreTheme.typography +import com.metacto.core.ui.theme.CoreTheme.colors +import com.metacto.core.ui.theme.CoreTheme.shapes +import com.metacto.core.ui.theme.CoreTheme.spacings +import com.metacto.core.ui.theme.CoreTheme.typography import kotlin.time.Duration @Composable diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/itemPicker/ItemPickerContract.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/itemPicker/ItemPickerContract.kt similarity index 78% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/itemPicker/ItemPickerContract.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/itemPicker/ItemPickerContract.kt index 997ca610..fed6aa45 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/itemPicker/ItemPickerContract.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/itemPicker/ItemPickerContract.kt @@ -1,10 +1,10 @@ -package com.metacto.core.presentation.itemPicker +package com.metacto.core.ui.components.itemPicker -import com.metacto.core.presentation.base.ViewEvent -import com.metacto.core.presentation.base.ViewSideEffect -import com.metacto.core.presentation.base.ViewState -import com.metacto.core.presentation.itemPicker.models.PickerItem -import com.metacto.core.utils.PlatformType +import com.metacto.core.PlatformType +import com.metacto.core.ui.base.ViewEvent +import com.metacto.core.ui.base.ViewSideEffect +import com.metacto.core.ui.base.ViewState +import com.metacto.core.ui.components.itemPicker.models.PickerItem class ItemPickerContract { diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/itemPicker/ItemPickerSheet.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/itemPicker/ItemPickerSheet.kt similarity index 62% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/itemPicker/ItemPickerSheet.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/itemPicker/ItemPickerSheet.kt index ad209ae6..9a77204c 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/itemPicker/ItemPickerSheet.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/itemPicker/ItemPickerSheet.kt @@ -1,8 +1,8 @@ -package com.metacto.core.presentation.itemPicker +package com.metacto.core.ui.components.itemPicker -import com.metacto.core.presentation.base.BaseSheet -import com.metacto.core.presentation.itemPicker.models.PickerItem -import com.metacto.core.utils.PlatformType +import com.metacto.core.PlatformType +import com.metacto.core.ui.base.CoreSheet +import com.metacto.core.ui.components.itemPicker.models.PickerItem expect class ItemPickerSheet( items: List, @@ -11,7 +11,7 @@ expect class ItemPickerSheet( visibleItemCount: Int = 5, canSearch: Boolean = false, platform: PlatformType? = null -) : BaseSheet { +) : CoreSheet { val items: List val selectedItem: PickerItem? diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/itemPicker/ItemPickerViewModel.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/itemPicker/ItemPickerViewModel.kt similarity index 86% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/itemPicker/ItemPickerViewModel.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/itemPicker/ItemPickerViewModel.kt index 0b49c779..1dced0a7 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/itemPicker/ItemPickerViewModel.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/itemPicker/ItemPickerViewModel.kt @@ -1,13 +1,12 @@ -package com.metacto.core.presentation.itemPicker - -import com.metacto.core.presentation.base.CoreViewModel -import com.metacto.core.presentation.itemPicker.ItemPickerContract.Effect -import com.metacto.core.presentation.itemPicker.ItemPickerContract.Event -import com.metacto.core.presentation.itemPicker.ItemPickerContract.State -import com.metacto.core.presentation.itemPicker.models.PickerItem -import com.metacto.core.utils.PlatformType -import com.metacto.core.utils.extensions.orZero +package com.metacto.core.ui.components.itemPicker +import com.metacto.core.PlatformType +import com.metacto.core.extensions.orZero +import com.metacto.core.ui.base.CoreViewModel +import com.metacto.core.ui.components.itemPicker.ItemPickerContract.Effect +import com.metacto.core.ui.components.itemPicker.ItemPickerContract.Event +import com.metacto.core.ui.components.itemPicker.ItemPickerContract.State +import com.metacto.core.ui.components.itemPicker.models.PickerItem class ItemPickerViewModel : CoreViewModel() { @@ -134,7 +133,8 @@ class ItemPickerViewModel : CoreViewModel() { } private fun emitSelectedItemAsResult() { - val selectedItem = currentState.displayedItems.getOrNull(currentState.currentItemIndex) ?: return + val selectedItem = + currentState.displayedItems.getOrNull(currentState.currentItemIndex) ?: return navManager.sendResult( source = ItemPickerSheet::class.simpleName, result = selectedItem diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/itemPicker/NativeItemPicker.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/itemPicker/NativeItemPicker.kt similarity index 61% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/itemPicker/NativeItemPicker.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/itemPicker/NativeItemPicker.kt index eb5e04a6..249ac6ce 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/itemPicker/NativeItemPicker.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/itemPicker/NativeItemPicker.kt @@ -1,6 +1,6 @@ -package com.metacto.core.presentation.itemPicker +package com.metacto.core.ui.components.itemPicker -import com.metacto.core.presentation.itemPicker.models.PickerItem +import com.metacto.core.ui.components.itemPicker.models.PickerItem internal expect class NativeItemPicker { fun display( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/itemPicker/components/ItemPickerContent.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/itemPicker/components/ItemPickerContent.kt similarity index 82% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/itemPicker/components/ItemPickerContent.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/itemPicker/components/ItemPickerContent.kt index 32cef717..a9270f88 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/itemPicker/components/ItemPickerContent.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/itemPicker/components/ItemPickerContent.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.itemPicker.components +package com.metacto.core.ui.components.itemPicker.components import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.layout.fillMaxWidth @@ -18,19 +18,19 @@ import androidx.compose.ui.layout.onSizeChanged import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.unit.DpSize import androidx.compose.ui.unit.IntSize -import com.metacto.core.presentation.components.bottomSheets.BottomSheetDoneContainer -import com.metacto.core.presentation.components.inputFields.PrimaryTextInputField -import com.metacto.core.presentation.components.wheelPicker.WheelPickerDefaults -import com.metacto.core.presentation.components.wheelPicker.WheelTextPicker -import com.metacto.core.presentation.itemPicker.ItemPickerContract.Event -import com.metacto.core.presentation.itemPicker.ItemPickerContract.State -import com.metacto.core.presentation.theme.CoreTheme -import com.metacto.core.utils.PlatformType -import com.metacto.core.utils.extensions.getPlatformType -import com.metacto.core.utils.extensions.getScreenSize -import com.metacto.core.utils.extensions.toDp -import com.metacto.coreApp.resources.Res -import com.metacto.coreApp.resources.search_here +import com.metacto.core.PlatformType +import com.metacto.core.extensions.getPlatformType +import com.metacto.core.ui.components.bottomSheets.BottomSheetDoneContainer +import com.metacto.core.ui.components.inputFields.PrimaryTextInputField +import com.metacto.core.ui.components.itemPicker.ItemPickerContract.Event +import com.metacto.core.ui.components.itemPicker.ItemPickerContract.State +import com.metacto.core.ui.components.wheelPicker.WheelPickerDefaults +import com.metacto.core.ui.components.wheelPicker.WheelTextPicker +import com.metacto.core.ui.extensions.getScreenSize +import com.metacto.core.ui.extensions.toDp +import com.metacto.core.ui.resources.Res +import com.metacto.core.ui.resources.search_here +import com.metacto.core.ui.theme.CoreTheme import org.jetbrains.compose.resources.stringResource @Composable diff --git a/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/itemPicker/models/PickerItem.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/itemPicker/models/PickerItem.kt new file mode 100644 index 00000000..785e93e2 --- /dev/null +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/itemPicker/models/PickerItem.kt @@ -0,0 +1,9 @@ +package com.metacto.core.ui.components.itemPicker.models + +import com.metacto.kmm.core.CommonParcelable +import com.metacto.kmm.core.CommonSerializable + +interface PickerItem : CommonParcelable, CommonSerializable { + val key: String + val title: String +} \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/itemPicker/models/PickerItemUIModel.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/itemPicker/models/PickerItemUIModel.kt similarity index 55% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/itemPicker/models/PickerItemUIModel.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/itemPicker/models/PickerItemUIModel.kt index 0fb5ff88..cae3f4ae 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/itemPicker/models/PickerItemUIModel.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/itemPicker/models/PickerItemUIModel.kt @@ -1,6 +1,6 @@ -package com.metacto.core.presentation.itemPicker.models +package com.metacto.core.ui.components.itemPicker.models -import com.metacto.core.utils.CommonParcelize +import com.metacto.kmm.core.CommonParcelize @CommonParcelize data class PickerItemUIModel( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/loadMore/LoadingMoreProgress.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/loadMore/LoadingMoreProgress.kt similarity index 89% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/loadMore/LoadingMoreProgress.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/loadMore/LoadingMoreProgress.kt index 7d6c68dc..33fae05b 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/loadMore/LoadingMoreProgress.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/loadMore/LoadingMoreProgress.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.loadMore +package com.metacto.core.ui.components.loadMore import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxWidth @@ -9,7 +9,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.theme.CoreTheme +import com.metacto.core.ui.theme.CoreTheme @Composable fun LoadingMoreProgress( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/numberSelector/NumberItem.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/numberSelector/NumberItem.kt similarity index 94% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/numberSelector/NumberItem.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/numberSelector/NumberItem.kt index 09b97291..8cc27f2a 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/numberSelector/NumberItem.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/numberSelector/NumberItem.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.numberSelector +package com.metacto.core.ui.components.numberSelector import androidx.compose.animation.animateColorAsState import androidx.compose.foundation.background @@ -16,7 +16,7 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.theme.CoreTheme +import com.metacto.core.ui.theme.CoreTheme @Composable internal fun NumberItem( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/numberSelector/PrimaryNumberItem.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/numberSelector/PrimaryNumberItem.kt similarity index 83% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/numberSelector/PrimaryNumberItem.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/numberSelector/PrimaryNumberItem.kt index 93d7821f..d02e38cc 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/numberSelector/PrimaryNumberItem.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/numberSelector/PrimaryNumberItem.kt @@ -1,8 +1,8 @@ -package com.metacto.core.presentation.components.numberSelector +package com.metacto.core.ui.components.numberSelector import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import com.metacto.core.presentation.theme.CoreTheme +import com.metacto.core.ui.theme.CoreTheme @Composable fun PrimaryNumberItem( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/numberSelector/PrimaryNumberSelector.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/numberSelector/PrimaryNumberSelector.kt similarity index 92% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/numberSelector/PrimaryNumberSelector.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/numberSelector/PrimaryNumberSelector.kt index f31bb2af..94edb15e 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/numberSelector/PrimaryNumberSelector.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/numberSelector/PrimaryNumberSelector.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.numberSelector +package com.metacto.core.ui.components.numberSelector import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Row diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/numberSelector/SecondaryNumberItem.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/numberSelector/SecondaryNumberItem.kt similarity index 89% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/numberSelector/SecondaryNumberItem.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/numberSelector/SecondaryNumberItem.kt index dd6221e8..d83b6bfe 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/numberSelector/SecondaryNumberItem.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/numberSelector/SecondaryNumberItem.kt @@ -1,9 +1,9 @@ -package com.metacto.core.presentation.components.numberSelector +package com.metacto.core.ui.components.numberSelector import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import com.metacto.core.presentation.theme.CoreTheme +import com.metacto.core.ui.theme.CoreTheme @Composable fun SecondaryNumberItem( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/numberSelector/SecondaryNumberSelector.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/numberSelector/SecondaryNumberSelector.kt similarity index 92% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/numberSelector/SecondaryNumberSelector.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/numberSelector/SecondaryNumberSelector.kt index c3b12062..c091379d 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/numberSelector/SecondaryNumberSelector.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/numberSelector/SecondaryNumberSelector.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.numberSelector +package com.metacto.core.ui.components.numberSelector import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Row diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/options/OptionItem.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/options/OptionItem.kt similarity index 92% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/options/OptionItem.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/options/OptionItem.kt index 6c08c596..d7f671c7 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/options/OptionItem.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/options/OptionItem.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.options +package com.metacto.core.ui.components.options import androidx.compose.foundation.Image import androidx.compose.foundation.clickable @@ -18,9 +18,9 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.ColorFilter import androidx.compose.ui.text.TextStyle import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.options.models.OptionUIModel -import com.metacto.core.presentation.theme.CoreTheme -import com.metacto.core.utils.extensions.toColor +import com.metacto.core.ui.components.options.models.OptionUIModel +import com.metacto.core.ui.theme.CoreTheme +import com.metacto.core.ui.extensions.toColor import org.jetbrains.compose.resources.painterResource @Composable diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/options/OptionsContract.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/options/OptionsContract.kt similarity index 61% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/options/OptionsContract.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/options/OptionsContract.kt index f5403feb..3b5781b8 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/options/OptionsContract.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/options/OptionsContract.kt @@ -1,9 +1,9 @@ -package com.metacto.core.presentation.options +package com.metacto.core.ui.components.options -import com.metacto.core.presentation.base.ViewEvent -import com.metacto.core.presentation.base.ViewSideEffect -import com.metacto.core.presentation.base.ViewState -import com.metacto.core.presentation.options.models.OptionUIModel +import com.metacto.core.ui.base.ViewEvent +import com.metacto.core.ui.base.ViewSideEffect +import com.metacto.core.ui.base.ViewState +import com.metacto.core.ui.components.options.models.OptionUIModel class OptionsContract { diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/options/OptionsList.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/options/OptionsList.kt similarity index 85% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/options/OptionsList.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/options/OptionsList.kt index ab10c07d..1daf5849 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/options/OptionsList.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/options/OptionsList.kt @@ -1,11 +1,11 @@ -package com.metacto.core.presentation.components.options +package com.metacto.core.ui.components.options import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import com.metacto.core.presentation.options.models.OptionUIModel +import com.metacto.core.ui.components.options.models.OptionUIModel @Composable fun OptionsList( diff --git a/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/options/OptionsSheet.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/options/OptionsSheet.kt new file mode 100644 index 00000000..9f3edc5e --- /dev/null +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/options/OptionsSheet.kt @@ -0,0 +1,11 @@ +package com.metacto.core.ui.components.options + +import com.metacto.core.ui.base.CoreSheet +import com.metacto.core.ui.components.options.models.OptionUIModel + +expect class OptionsSheet( + options: List +) : CoreSheet { + + val options: List +} \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/options/OptionsViewModel.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/options/OptionsViewModel.kt similarity index 69% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/options/OptionsViewModel.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/options/OptionsViewModel.kt index 1e2a0dcd..5140dc8f 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/options/OptionsViewModel.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/options/OptionsViewModel.kt @@ -1,10 +1,10 @@ -package com.metacto.core.presentation.options +package com.metacto.core.ui.components.options -import com.metacto.core.presentation.base.CoreViewModel -import com.metacto.core.presentation.options.OptionsContract.Effect -import com.metacto.core.presentation.options.OptionsContract.Event -import com.metacto.core.presentation.options.OptionsContract.State -import com.metacto.core.presentation.options.models.OptionUIModel +import com.metacto.core.ui.base.CoreViewModel +import com.metacto.core.ui.components.options.OptionsContract.Effect +import com.metacto.core.ui.components.options.OptionsContract.Event +import com.metacto.core.ui.components.options.OptionsContract.State +import com.metacto.core.ui.components.options.models.OptionUIModel class OptionsViewModel : CoreViewModel() { diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/options/components/OptionsContent.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/options/components/OptionsContent.kt similarity index 67% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/options/components/OptionsContent.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/options/components/OptionsContent.kt index 60357378..b8de5f7a 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/options/components/OptionsContent.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/options/components/OptionsContent.kt @@ -1,14 +1,14 @@ -package com.metacto.core.presentation.options.components +package com.metacto.core.ui.components.options.components import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Close import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import com.metacto.core.presentation.components.bottomSheets.BottomSheetContainer -import com.metacto.core.presentation.components.options.OptionsList -import com.metacto.core.presentation.options.OptionsContract.Event -import com.metacto.core.presentation.options.OptionsContract.State +import com.metacto.core.ui.components.bottomSheets.BottomSheetContainer +import com.metacto.core.ui.components.options.OptionsContract.Event +import com.metacto.core.ui.components.options.OptionsContract.State +import com.metacto.core.ui.components.options.OptionsList @Composable fun OptionsContent( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/options/models/OptionUIModel.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/options/models/OptionUIModel.kt similarity index 71% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/options/models/OptionUIModel.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/options/models/OptionUIModel.kt index 0a31b79f..17a7f247 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/options/models/OptionUIModel.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/options/models/OptionUIModel.kt @@ -1,6 +1,6 @@ -package com.metacto.core.presentation.options.models +package com.metacto.core.ui.components.options.models -import com.metacto.core.utils.CommonSerializable +import com.metacto.kmm.core.CommonSerializable import org.jetbrains.compose.resources.DrawableResource data class OptionUIModel( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/pagerIndicator/HorizontalCapsulesIndicator.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/pagerIndicator/HorizontalCapsulesIndicator.kt similarity index 95% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/pagerIndicator/HorizontalCapsulesIndicator.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/pagerIndicator/HorizontalCapsulesIndicator.kt index ae7895d5..8dc9fb56 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/pagerIndicator/HorizontalCapsulesIndicator.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/pagerIndicator/HorizontalCapsulesIndicator.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.pagerIndicator +package com.metacto.core.ui.components.pagerIndicator import androidx.compose.animation.animateColorAsState import androidx.compose.animation.core.animateDpAsState @@ -18,7 +18,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.theme.CoreTheme +import com.metacto.core.ui.theme.CoreTheme @OptIn(ExperimentalFoundationApi::class) @Composable diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/pagerIndicator/HorizontalDotsIndicator.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/pagerIndicator/HorizontalDotsIndicator.kt similarity index 94% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/pagerIndicator/HorizontalDotsIndicator.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/pagerIndicator/HorizontalDotsIndicator.kt index e93f186d..702447df 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/pagerIndicator/HorizontalDotsIndicator.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/pagerIndicator/HorizontalDotsIndicator.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.pagerIndicator +package com.metacto.core.ui.components.pagerIndicator import androidx.compose.animation.animateColorAsState import androidx.compose.animation.core.animateDpAsState @@ -19,8 +19,8 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.theme.CoreTheme -import com.metacto.core.utils.extensions.noRippleClickable +import com.metacto.core.ui.theme.CoreTheme +import com.metacto.core.ui.extensions.noRippleClickable import kotlinx.coroutines.launch @OptIn(ExperimentalFoundationApi::class) diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/pagerIndicator/HorizontalPagerIndicator.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/pagerIndicator/HorizontalPagerIndicator.kt similarity index 95% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/pagerIndicator/HorizontalPagerIndicator.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/pagerIndicator/HorizontalPagerIndicator.kt index f4a9212b..4c609cb2 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/pagerIndicator/HorizontalPagerIndicator.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/pagerIndicator/HorizontalPagerIndicator.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.pagerIndicator +package com.metacto.core.ui.components.pagerIndicator import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.ExperimentalFoundationApi @@ -22,8 +22,8 @@ import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.dp -import com.metacto.core.presentation.theme.CoreTheme -import com.metacto.core.utils.extensions.noRippleClickable +import com.metacto.core.ui.theme.CoreTheme +import com.metacto.core.ui.extensions.noRippleClickable import kotlinx.coroutines.launch @OptIn(ExperimentalFoundationApi::class) diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/pagerIndicator/HorizontalPagerTabItem.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/pagerIndicator/HorizontalPagerTabItem.kt similarity index 92% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/pagerIndicator/HorizontalPagerTabItem.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/pagerIndicator/HorizontalPagerTabItem.kt index 01340a4e..c5f00e06 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/pagerIndicator/HorizontalPagerTabItem.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/pagerIndicator/HorizontalPagerTabItem.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.pagerIndicator +package com.metacto.core.ui.components.pagerIndicator import androidx.compose.animation.animateColorAsState import androidx.compose.foundation.layout.PaddingValues @@ -14,8 +14,8 @@ import androidx.compose.ui.graphics.Shape import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp -import com.metacto.core.presentation.theme.CoreTheme -import com.metacto.core.utils.extensions.noRippleClickable +import com.metacto.core.ui.theme.CoreTheme +import com.metacto.core.ui.extensions.noRippleClickable @Composable fun HorizontalPagerTabItem( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/pagerIndicator/HorizontalPagerTabs.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/pagerIndicator/HorizontalPagerTabs.kt similarity index 93% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/pagerIndicator/HorizontalPagerTabs.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/pagerIndicator/HorizontalPagerTabs.kt index de9034c1..b5fb450f 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/pagerIndicator/HorizontalPagerTabs.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/pagerIndicator/HorizontalPagerTabs.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.pagerIndicator +package com.metacto.core.ui.components.pagerIndicator import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.horizontalScroll @@ -10,7 +10,7 @@ import androidx.compose.foundation.rememberScrollState import androidx.compose.runtime.* import androidx.compose.ui.Modifier import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.theme.CoreTheme +import com.metacto.core.ui.theme.CoreTheme import kotlinx.coroutines.launch @OptIn(ExperimentalFoundationApi::class) diff --git a/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/pickers/NativeDatePicker.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/pickers/NativeDatePicker.kt new file mode 100644 index 00000000..35da399b --- /dev/null +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/pickers/NativeDatePicker.kt @@ -0,0 +1,18 @@ +package com.metacto.core.ui.components.pickers + +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.unit.DpSize +import kotlinx.datetime.LocalDate + +@Composable +expect fun NativeDatePicker( + onSnappedDate: (LocalDate) -> Unit, + minDate: LocalDate, + maxDate: LocalDate, + startDate: LocalDate, + size: DpSize, + modifier: Modifier = Modifier, + backgroundColor: Color = Color.Transparent +) diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/progress/LottieProgressIndicator.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/progress/LottieProgressIndicator.kt similarity index 78% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/progress/LottieProgressIndicator.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/progress/LottieProgressIndicator.kt index 961b900a..ac210654 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/progress/LottieProgressIndicator.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/progress/LottieProgressIndicator.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.progress +package com.metacto.core.ui.components.progress import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize @@ -8,13 +8,12 @@ import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.theme.CoreTheme -import com.metacto.core.resources.FileResource -import com.metacto.core.resources.IFileResource -import com.metacto.core.resources.file -import com.metacto.core.utils.extensions.noRippleClickable -import com.metacto.core.utils.extensions.rememberLottieComposition -import com.metacto.coreApp.resources.* +import com.metacto.core.ui.theme.CoreTheme +import com.metacto.core.ui.extensions.noRippleClickable +import com.metacto.core.ui.extensions.rememberLottieComposition +import com.metacto.core.ui.resources.IFileResource +import com.metacto.core.ui.resources.Res +import com.metacto.core.ui.resources.file import io.github.alexzhirkevich.compottie.LottieAnimation import io.github.alexzhirkevich.compottie.LottieConstants import io.github.alexzhirkevich.compottie.animateLottieCompositionAsState diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/progress/PrimaryProgressIndicator.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/progress/PrimaryProgressIndicator.kt similarity index 79% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/progress/PrimaryProgressIndicator.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/progress/PrimaryProgressIndicator.kt index 9987c39a..3729d3ec 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/progress/PrimaryProgressIndicator.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/progress/PrimaryProgressIndicator.kt @@ -1,8 +1,8 @@ -package com.metacto.core.presentation.components.progress +package com.metacto.core.ui.components.progress import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import com.metacto.core.presentation.theme.CoreTheme +import com.metacto.core.ui.theme.CoreTheme import androidx.compose.ui.graphics.Color @Composable diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/progress/ProgressIndicator.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/progress/ProgressIndicator.kt similarity index 86% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/progress/ProgressIndicator.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/progress/ProgressIndicator.kt index 41d8902f..15553636 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/progress/ProgressIndicator.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/progress/ProgressIndicator.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.progress +package com.metacto.core.ui.components.progress import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize @@ -9,8 +9,8 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.theme.CoreTheme -import com.metacto.core.utils.extensions.noRippleClickable +import com.metacto.core.ui.theme.CoreTheme +import com.metacto.core.ui.extensions.noRippleClickable @Composable fun ProgressIndicator( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/progress/SecondaryProgressIndicator.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/progress/SecondaryProgressIndicator.kt similarity index 79% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/progress/SecondaryProgressIndicator.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/progress/SecondaryProgressIndicator.kt index fdec119b..301e6ee8 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/progress/SecondaryProgressIndicator.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/progress/SecondaryProgressIndicator.kt @@ -1,9 +1,9 @@ -package com.metacto.core.presentation.components.progress +package com.metacto.core.ui.components.progress import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import com.metacto.core.presentation.theme.CoreTheme +import com.metacto.core.ui.theme.CoreTheme @Composable fun SecondaryProgressIndicator( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/progress/SmallProgressIndicator.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/progress/SmallProgressIndicator.kt similarity index 90% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/progress/SmallProgressIndicator.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/progress/SmallProgressIndicator.kt index e03bb930..fe3223af 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/progress/SmallProgressIndicator.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/progress/SmallProgressIndicator.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.progress +package com.metacto.core.ui.components.progress import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxWidth @@ -10,7 +10,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.theme.CoreTheme +import com.metacto.core.ui.theme.CoreTheme @Composable fun SmallProgressIndicator( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/ratingBar/FractionalRectangleShape.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/ratingBar/FractionalRectangleShape.kt similarity index 93% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/ratingBar/FractionalRectangleShape.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/ratingBar/FractionalRectangleShape.kt index 2fa5069b..db2af55c 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/ratingBar/FractionalRectangleShape.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/ratingBar/FractionalRectangleShape.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.ratingBar +package com.metacto.core.ui.components.ratingBar import androidx.compose.runtime.Stable import androidx.compose.ui.geometry.Rect diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/ratingBar/PathExtensions.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/ratingBar/PathExtensions.kt similarity index 95% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/ratingBar/PathExtensions.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/ratingBar/PathExtensions.kt index 56c03792..a86b3426 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/ratingBar/PathExtensions.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/ratingBar/PathExtensions.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.ratingBar +package com.metacto.core.ui.components.ratingBar import androidx.compose.ui.geometry.Size import androidx.compose.ui.graphics.Path diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/ratingBar/RatingBar.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/ratingBar/RatingBar.kt similarity index 99% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/ratingBar/RatingBar.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/ratingBar/RatingBar.kt index a06c7dcf..fd647ac5 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/ratingBar/RatingBar.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/ratingBar/RatingBar.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.ratingBar +package com.metacto.core.ui.components.ratingBar import androidx.compose.foundation.gestures.detectHorizontalDragGestures import androidx.compose.foundation.layout.Row diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/ratingBar/RatingBarUtils.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/ratingBar/RatingBarUtils.kt similarity index 94% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/ratingBar/RatingBarUtils.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/ratingBar/RatingBarUtils.kt index e6945d3b..7d2c0482 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/ratingBar/RatingBarUtils.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/ratingBar/RatingBarUtils.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.ratingBar +package com.metacto.core.ui.components.ratingBar object RatingBarUtils { diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/ratingBar/RatingStar.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/ratingBar/RatingStar.kt similarity index 98% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/ratingBar/RatingStar.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/ratingBar/RatingStar.kt index 1c727f3c..881883a5 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/ratingBar/RatingStar.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/ratingBar/RatingStar.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.ratingBar +package com.metacto.core.ui.components.ratingBar import androidx.compose.foundation.Canvas import androidx.compose.foundation.layout.Box diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/snackBar/AppSnackBar.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/snackBar/AppSnackBar.kt similarity index 93% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/snackBar/AppSnackBar.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/snackBar/AppSnackBar.kt index 2a4a5d39..6e7ee190 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/snackBar/AppSnackBar.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/snackBar/AppSnackBar.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.snackBar +package com.metacto.core.ui.components.snackBar import androidx.compose.foundation.Image import androidx.compose.foundation.background @@ -20,8 +20,8 @@ import androidx.compose.ui.graphics.ColorFilter import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.text.TextStyle import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.theme.CoreTheme -import com.metacto.core.utils.extensions.noRippleClickable +import com.metacto.core.ui.theme.CoreTheme +import com.metacto.core.ui.extensions.noRippleClickable @Composable fun AppSnackBar( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/snackBar/ErrorSnackBar.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/snackBar/ErrorSnackBar.kt similarity index 87% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/snackBar/ErrorSnackBar.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/snackBar/ErrorSnackBar.kt index 4fe45ed8..5d65ef2c 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/snackBar/ErrorSnackBar.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/snackBar/ErrorSnackBar.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.snackBar +package com.metacto.core.ui.components.snackBar import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.ErrorOutline @@ -6,7 +6,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.vector.ImageVector -import com.metacto.core.presentation.theme.CoreTheme +import com.metacto.core.ui.theme.CoreTheme @Composable fun ErrorSnackBar( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/snackBar/SuccessSnackBar.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/snackBar/SuccessSnackBar.kt similarity index 87% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/snackBar/SuccessSnackBar.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/snackBar/SuccessSnackBar.kt index cec75471..e24f2989 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/snackBar/SuccessSnackBar.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/snackBar/SuccessSnackBar.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.snackBar +package com.metacto.core.ui.components.snackBar import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.ThumbUpOffAlt @@ -6,7 +6,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.vector.ImageVector -import com.metacto.core.presentation.theme.CoreTheme +import com.metacto.core.ui.theme.CoreTheme @Composable fun SuccessSnackBar( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/stepBar/SecondaryStepBar.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/stepBar/SecondaryStepBar.kt similarity index 93% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/stepBar/SecondaryStepBar.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/stepBar/SecondaryStepBar.kt index b0663a5f..ed09525f 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/stepBar/SecondaryStepBar.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/stepBar/SecondaryStepBar.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.stepBar +package com.metacto.core.ui.components.stepBar import androidx.compose.animation.core.animateFloatAsState import androidx.compose.foundation.border @@ -12,7 +12,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.StrokeCap import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.theme.CoreTheme +import com.metacto.core.ui.theme.CoreTheme @Composable fun SecondaryStepBar( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/tabsLayout/TabItem.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/tabsLayout/TabItem.kt similarity index 91% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/tabsLayout/TabItem.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/tabsLayout/TabItem.kt index 41ad8e41..8a8e1664 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/tabsLayout/TabItem.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/tabsLayout/TabItem.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.tabsLayout +package com.metacto.core.ui.components.tabsLayout import androidx.compose.animation.animateColorAsState import androidx.compose.foundation.background @@ -19,12 +19,12 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.components.dividers.VerticalDivider -import com.metacto.core.presentation.components.images.AppImage -import com.metacto.core.presentation.components.texts.SingleLineText -import com.metacto.core.presentation.theme.CoreTheme -import com.metacto.core.utils.extensions.noRippleClickable -import com.metacto.core.utils.extensions.toColor +import com.metacto.core.ui.components.dividers.VerticalDivider +import com.metacto.core.ui.components.images.AppImage +import com.metacto.core.ui.components.texts.SingleLineText +import com.metacto.core.ui.theme.CoreTheme +import com.metacto.core.ui.extensions.noRippleClickable +import com.metacto.core.ui.extensions.toColor @Composable fun TabItem( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/tabsLayout/TabItemModel.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/tabsLayout/TabItemModel.kt similarity index 53% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/tabsLayout/TabItemModel.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/tabsLayout/TabItemModel.kt index 912617a3..948678a4 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/tabsLayout/TabItemModel.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/tabsLayout/TabItemModel.kt @@ -1,8 +1,8 @@ -package com.metacto.core.presentation.components.tabsLayout +package com.metacto.core.ui.components.tabsLayout -import com.metacto.core.presentation.models.ImageUIModel -import com.metacto.core.utils.CommonParcelable -import com.metacto.core.utils.CommonParcelize +import com.metacto.kmm.core.CommonParcelable +import com.metacto.kmm.core.CommonParcelize +import com.metacto.core.ui.models.ImageUIModel @CommonParcelize class TabItemModel( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/tabsLayout/TabsLayout.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/tabsLayout/TabsLayout.kt similarity index 95% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/tabsLayout/TabsLayout.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/tabsLayout/TabsLayout.kt index ef4b50d5..4f3738c0 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/tabsLayout/TabsLayout.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/tabsLayout/TabsLayout.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.tabsLayout +package com.metacto.core.ui.components.tabsLayout import androidx.compose.foundation.horizontalScroll import androidx.compose.foundation.layout.Arrangement @@ -10,7 +10,7 @@ import androidx.compose.foundation.rememberScrollState import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import com.metacto.core.presentation.theme.CoreTheme +import com.metacto.core.ui.theme.CoreTheme const val TABS_SCROLL_MIN_COUNT = 3 diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/texts/FixedScaleText.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/texts/FixedScaleText.kt similarity index 97% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/texts/FixedScaleText.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/texts/FixedScaleText.kt index d47c9832..1e297c96 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/texts/FixedScaleText.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/texts/FixedScaleText.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.texts +package com.metacto.core.ui.components.texts import androidx.compose.material3.LocalTextStyle import androidx.compose.material3.Text diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/texts/IconText.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/texts/IconText.kt similarity index 95% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/texts/IconText.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/texts/IconText.kt index 9f6202c7..0e109e50 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/texts/IconText.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/texts/IconText.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.texts +package com.metacto.core.ui.components.texts import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Arrangement @@ -18,8 +18,8 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextDecoration import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.theme.CoreTheme -import com.metacto.core.utils.extensions.tintIfNotNull +import com.metacto.core.ui.theme.CoreTheme +import com.metacto.core.ui.extensions.tintIfNotNull @Composable fun IconText( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/texts/MultipleStylesText.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/texts/MultipleStylesText.kt similarity index 94% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/texts/MultipleStylesText.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/texts/MultipleStylesText.kt index 1b3fdca1..beb3e42c 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/texts/MultipleStylesText.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/texts/MultipleStylesText.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.texts +package com.metacto.core.ui.components.texts import androidx.compose.material3.Text import androidx.compose.runtime.Composable diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/texts/SingleLineText.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/texts/SingleLineText.kt similarity index 88% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/texts/SingleLineText.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/texts/SingleLineText.kt index 0f78f06e..4761e768 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/texts/SingleLineText.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/texts/SingleLineText.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.texts +package com.metacto.core.ui.components.texts import androidx.compose.material3.Text import androidx.compose.runtime.Composable @@ -9,8 +9,8 @@ import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextDecoration import androidx.compose.ui.text.style.TextOverflow -import com.metacto.core.presentation.theme.CoreTheme -import com.metacto.core.utils.extensions.noRippleClickable +import com.metacto.core.ui.theme.CoreTheme +import com.metacto.core.ui.extensions.noRippleClickable @Composable fun SingleLineText( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/texts/TextDivider.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/texts/TextDivider.kt similarity index 93% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/texts/TextDivider.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/texts/TextDivider.kt index 912896a0..d98768de 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/texts/TextDivider.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/texts/TextDivider.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.texts +package com.metacto.core.ui.components.texts import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement @@ -12,7 +12,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.TextStyle import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.theme.CoreTheme +import com.metacto.core.ui.theme.CoreTheme @Composable fun TextDivider( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/toolbar/Toolbar.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/toolbar/Toolbar.kt similarity index 93% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/toolbar/Toolbar.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/toolbar/Toolbar.kt index ba30321e..e659bbc0 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/toolbar/Toolbar.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/toolbar/Toolbar.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.toolbar +package com.metacto.core.ui.components.toolbar import androidx.compose.foundation.Image import androidx.compose.foundation.background @@ -21,10 +21,10 @@ import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.components.dividers.VerticalDivider -import com.metacto.core.presentation.components.texts.SingleLineText -import com.metacto.core.presentation.theme.CoreTheme -import com.metacto.core.utils.extensions.noRippleClickable +import com.metacto.core.ui.components.dividers.VerticalDivider +import com.metacto.core.ui.components.texts.SingleLineText +import com.metacto.core.ui.theme.CoreTheme +import com.metacto.core.ui.extensions.noRippleClickable @Composable fun Toolbar( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/visibilities/FadeVisibility.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/visibilities/FadeVisibility.kt similarity index 91% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/visibilities/FadeVisibility.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/visibilities/FadeVisibility.kt index c71026ea..8c31680a 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/visibilities/FadeVisibility.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/visibilities/FadeVisibility.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.visibilities +package com.metacto.core.ui.components.visibilities import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.AnimatedVisibilityScope diff --git a/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/visibilities/NullabilityAnimatedVisibility.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/visibilities/NullabilityAnimatedVisibility.kt new file mode 100644 index 00000000..c4fea612 --- /dev/null +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/visibilities/NullabilityAnimatedVisibility.kt @@ -0,0 +1,35 @@ +package com.metacto.core.ui.components.visibilities + +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.EnterTransition +import androidx.compose.animation.ExitTransition +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.node.Ref + +@Composable +fun NullabilityAnimatedVisibility( + value: T?, + modifier: Modifier = Modifier, + enter: EnterTransition = fadeIn(), + exit: ExitTransition = fadeOut(), + content: @Composable (T) -> Unit +) { + val lastNonNullValue = remember { Ref() } + + if (value != null) { + lastNonNullValue.value = value + } + + AnimatedVisibility( + modifier = modifier, + visible = value != null, + enter = enter, + exit = exit + ) { + lastNonNullValue.value?.let { content(it) } + } +} \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/visibilities/TopSlideVisibility.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/visibilities/TopSlideVisibility.kt similarity index 93% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/visibilities/TopSlideVisibility.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/visibilities/TopSlideVisibility.kt index 77c0814b..d75dd90f 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/visibilities/TopSlideVisibility.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/visibilities/TopSlideVisibility.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.visibilities +package com.metacto.core.ui.components.visibilities import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.AnimatedVisibilityScope diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/voyager/VoyagerTransitions.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/voyager/VoyagerTransitions.kt similarity index 84% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/voyager/VoyagerTransitions.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/voyager/VoyagerTransitions.kt index 206db1aa..2bbfd62c 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/voyager/VoyagerTransitions.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/voyager/VoyagerTransitions.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.voyager +package com.metacto.core.ui.components.voyager import androidx.compose.animation.AnimatedContent import androidx.compose.animation.AnimatedContentTransitionScope @@ -15,6 +15,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import cafe.adriel.voyager.core.screen.Screen import cafe.adriel.voyager.navigator.Navigator +import com.metacto.core.ui.base.CoreScreen private typealias ScreenTransitionContent = @Composable AnimatedVisibilityScope.(Screen) -> Unit @@ -25,7 +26,10 @@ private fun ScreenTransition( navigator: Navigator, transition: AnimatedContentTransitionScope.() -> ContentTransform, modifier: Modifier = Modifier, - content: ScreenTransitionContent = { it.Content() } + content: ScreenTransitionContent = { + (it as? CoreScreen<*>)?.trackLifecycle() + it.Content() + } ) { AnimatedContent( targetState = navigator.lastItem, @@ -46,7 +50,10 @@ fun FadeTransition( animationSpec: FiniteAnimationSpec = spring( stiffness = Spring.StiffnessMediumLow ), - content: ScreenTransitionContent = { it.Content() } + content: ScreenTransitionContent = { + (it as? CoreScreen<*>)?.trackLifecycle() + it.Content() + } ) { ScreenTransition( navigator = navigator, diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/wheelPicker/WheelPicker.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/wheelPicker/WheelPicker.kt similarity index 97% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/wheelPicker/WheelPicker.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/wheelPicker/WheelPicker.kt index baa70215..6b1f10a0 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/wheelPicker/WheelPicker.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/wheelPicker/WheelPicker.kt @@ -1,7 +1,6 @@ -package com.metacto.core.presentation.components.wheelPicker +package com.metacto.core.ui.components.wheelPicker import androidx.compose.foundation.BorderStroke -import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.gestures.snapping.rememberSnapFlingBehavior import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.PaddingValues @@ -27,10 +26,9 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Shape import androidx.compose.ui.graphics.graphicsLayer import androidx.compose.ui.unit.DpSize -import com.metacto.core.presentation.theme.CoreTheme +import com.metacto.core.ui.theme.CoreTheme import kotlin.math.abs -@OptIn(ExperimentalFoundationApi::class) @Composable internal fun WheelPicker( modifier: Modifier = Modifier, diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/wheelPicker/WheelTextPicker.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/wheelPicker/WheelTextPicker.kt similarity index 88% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/wheelPicker/WheelTextPicker.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/wheelPicker/WheelTextPicker.kt index 0573a32a..5146a51c 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/wheelPicker/WheelTextPicker.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/wheelPicker/WheelTextPicker.kt @@ -1,6 +1,6 @@ -package com.metacto.core.presentation.components.wheelPicker +package com.metacto.core.ui.components.wheelPicker -import androidx.compose.material.Text +import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color @@ -8,8 +8,8 @@ import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.DpSize -import com.metacto.core.presentation.theme.CoreTheme -import com.metacto.core.utils.extensions.noRippleClickable +import com.metacto.core.ui.extensions.noRippleClickable +import com.metacto.core.ui.theme.CoreTheme @Composable fun WheelTextPicker( @@ -39,8 +39,8 @@ fun WheelTextPicker( ) { index, clickable -> Text( text = texts[index], - textAlign = TextAlign.Center, maxLines = maxItemLines, + textAlign = TextAlign.Center, overflow = TextOverflow.Ellipsis, style = style, color = color, diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/wheelPicker/datetime/DefaultWheelDatePicker.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/wheelPicker/datetime/DefaultWheelDatePicker.kt similarity index 96% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/wheelPicker/datetime/DefaultWheelDatePicker.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/wheelPicker/datetime/DefaultWheelDatePicker.kt index be9f1ae4..75e90fe3 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/wheelPicker/datetime/DefaultWheelDatePicker.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/wheelPicker/datetime/DefaultWheelDatePicker.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.wheelPicker.datetime +package com.metacto.core.ui.components.wheelPicker.datetime import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Row @@ -17,10 +17,10 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.TextStyle import androidx.compose.ui.unit.DpSize import androidx.compose.ui.unit.dp -import com.metacto.core.presentation.components.wheelPicker.SelectorProperties -import com.metacto.core.presentation.components.wheelPicker.WheelPickerDefaults -import com.metacto.core.presentation.components.wheelPicker.WheelTextPicker -import com.metacto.core.presentation.theme.CoreTheme +import com.metacto.core.ui.components.wheelPicker.SelectorProperties +import com.metacto.core.ui.components.wheelPicker.WheelPickerDefaults +import com.metacto.core.ui.components.wheelPicker.WheelTextPicker +import com.metacto.core.ui.theme.CoreTheme import kotlinx.datetime.LocalDate import kotlinx.datetime.Month import kotlinx.datetime.number diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/wheelPicker/datetime/DefaultWheelDateTimePicker.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/wheelPicker/datetime/DefaultWheelDateTimePicker.kt similarity index 96% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/wheelPicker/datetime/DefaultWheelDateTimePicker.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/wheelPicker/datetime/DefaultWheelDateTimePicker.kt index 8bc6dfeb..9cd5d750 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/wheelPicker/datetime/DefaultWheelDateTimePicker.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/wheelPicker/datetime/DefaultWheelDateTimePicker.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.wheelPicker.datetime +package com.metacto.core.ui.components.wheelPicker.datetime import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Row @@ -16,9 +16,9 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.TextStyle import androidx.compose.ui.unit.DpSize -import com.metacto.core.presentation.components.wheelPicker.SelectorProperties -import com.metacto.core.presentation.components.wheelPicker.WheelPickerDefaults -import com.metacto.core.presentation.theme.CoreTheme +import com.metacto.core.ui.components.wheelPicker.SelectorProperties +import com.metacto.core.ui.components.wheelPicker.WheelPickerDefaults +import com.metacto.core.ui.theme.CoreTheme import kotlinx.datetime.LocalDateTime import kotlinx.datetime.number import kotlin.time.DurationUnit diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/wheelPicker/datetime/DefaultWheelTimePicker.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/wheelPicker/datetime/DefaultWheelTimePicker.kt similarity index 97% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/wheelPicker/datetime/DefaultWheelTimePicker.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/wheelPicker/datetime/DefaultWheelTimePicker.kt index e6fcba82..762b0bd3 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/wheelPicker/datetime/DefaultWheelTimePicker.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/wheelPicker/datetime/DefaultWheelTimePicker.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.wheelPicker.datetime +package com.metacto.core.ui.components.wheelPicker.datetime import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Row @@ -17,10 +17,10 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.TextStyle import androidx.compose.ui.unit.DpSize -import com.metacto.core.presentation.components.wheelPicker.SelectorProperties -import com.metacto.core.presentation.components.wheelPicker.WheelPickerDefaults -import com.metacto.core.presentation.components.wheelPicker.WheelTextPicker -import com.metacto.core.presentation.theme.CoreTheme +import com.metacto.core.ui.components.wheelPicker.SelectorProperties +import com.metacto.core.ui.components.wheelPicker.WheelPickerDefaults +import com.metacto.core.ui.components.wheelPicker.WheelTextPicker +import com.metacto.core.ui.theme.CoreTheme import kotlinx.datetime.LocalTime @Composable diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/wheelPicker/datetime/KLocalDateExt.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/wheelPicker/datetime/KLocalDateExt.kt similarity index 63% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/wheelPicker/datetime/KLocalDateExt.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/wheelPicker/datetime/KLocalDateExt.kt index e767850e..70e320f3 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/wheelPicker/datetime/KLocalDateExt.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/wheelPicker/datetime/KLocalDateExt.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.wheelPicker.datetime +package com.metacto.core.ui.components.wheelPicker.datetime import kotlinx.datetime.Clock import kotlinx.datetime.LocalDate @@ -6,21 +6,21 @@ import kotlinx.datetime.TimeZone import kotlinx.datetime.toLocalDateTime import kotlin.math.min -fun LocalDate.Companion.now(timeZone: TimeZone = TimeZone.currentSystemDefault()): LocalDate { +internal fun LocalDate.Companion.now(timeZone: TimeZone = TimeZone.currentSystemDefault()): LocalDate { return Clock.System.now().toLocalDateTime(timeZone).date } -val LocalDate.Companion.EPOCH: LocalDate get() = LocalDate(1970, 1, 1) +internal val LocalDate.Companion.EPOCH: LocalDate get() = LocalDate(1970, 1, 1) val LocalDate.Companion.CYBER_ERA: LocalDate get() = LocalDate(2077, 12, 31) -fun isLeapYear(prolepticYear: Int): Boolean { +internal fun isLeapYear(prolepticYear: Int): Boolean { return prolepticYear % 4 == 0 && (prolepticYear % 100 != 0 || prolepticYear % 400 == 0) } -val LocalDate.isLeapYear: Boolean +internal val LocalDate.isLeapYear: Boolean get() = isLeapYear(year) -fun LocalDate.withDayOfMonth(dayOfMonth: Int): LocalDate { +internal fun LocalDate.withDayOfMonth(dayOfMonth: Int): LocalDate { return if (this.dayOfMonth == dayOfMonth) { this } else { @@ -28,7 +28,7 @@ fun LocalDate.withDayOfMonth(dayOfMonth: Int): LocalDate { } } -fun LocalDate.withMonthNumber(monthNumber: Int): LocalDate { +internal fun LocalDate.withMonthNumber(monthNumber: Int): LocalDate { return if (this.monthNumber == monthNumber) { this } else { @@ -36,7 +36,7 @@ fun LocalDate.withMonthNumber(monthNumber: Int): LocalDate { } } -fun LocalDate.withYear(year: Int): LocalDate { +internal fun LocalDate.withYear(year: Int): LocalDate { return if (this.year == year) { this } else { @@ -44,7 +44,7 @@ fun LocalDate.withYear(year: Int): LocalDate { } } -fun resolvePreviousValid( +internal fun resolvePreviousValid( year: Int, monthNumber: Int, dayOfMonth: Int @@ -66,10 +66,10 @@ fun resolvePreviousValid( return LocalDate(year, monthNumber, newDayOfMonth) } -fun LocalDate.isBefore(other: LocalDate): Boolean { +internal fun LocalDate.isBefore(other: LocalDate): Boolean { return compareTo(other) < 0 } -fun LocalDate.isAfter(other: LocalDate): Boolean { +internal fun LocalDate.isAfter(other: LocalDate): Boolean { return compareTo(other) > 0 } \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/wheelPicker/datetime/KLocalDateTimeExt.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/wheelPicker/datetime/KLocalDateTimeExt.kt similarity index 97% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/wheelPicker/datetime/KLocalDateTimeExt.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/wheelPicker/datetime/KLocalDateTimeExt.kt index f3a22c43..3f69b746 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/wheelPicker/datetime/KLocalDateTimeExt.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/wheelPicker/datetime/KLocalDateTimeExt.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.wheelPicker.datetime +package com.metacto.core.ui.components.wheelPicker.datetime import kotlinx.datetime.Clock import kotlinx.datetime.LocalDate diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/wheelPicker/datetime/KLocalTimeExt.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/wheelPicker/datetime/KLocalTimeExt.kt similarity index 93% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/wheelPicker/datetime/KLocalTimeExt.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/wheelPicker/datetime/KLocalTimeExt.kt index 55264349..bcddf1d3 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/wheelPicker/datetime/KLocalTimeExt.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/wheelPicker/datetime/KLocalTimeExt.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.wheelPicker.datetime +package com.metacto.core.ui.components.wheelPicker.datetime import kotlinx.datetime.Clock import kotlinx.datetime.LocalTime diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/wheelPicker/datetime/SnappedDateTime.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/wheelPicker/datetime/SnappedDateTime.kt similarity index 95% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/wheelPicker/datetime/SnappedDateTime.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/wheelPicker/datetime/SnappedDateTime.kt index c1a57258..db57298a 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/wheelPicker/datetime/SnappedDateTime.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/wheelPicker/datetime/SnappedDateTime.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.wheelPicker.datetime +package com.metacto.core.ui.components.wheelPicker.datetime import kotlinx.datetime.LocalDate import kotlinx.datetime.LocalDateTime diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/wheelPicker/datetime/WheelDatePicker.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/wheelPicker/datetime/WheelDatePicker.kt similarity index 88% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/wheelPicker/datetime/WheelDatePicker.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/wheelPicker/datetime/WheelDatePicker.kt index 314c0545..ba426a04 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/wheelPicker/datetime/WheelDatePicker.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/wheelPicker/datetime/WheelDatePicker.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.wheelPicker.datetime +package com.metacto.core.ui.components.wheelPicker.datetime import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.shape.RoundedCornerShape @@ -8,9 +8,9 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.TextStyle import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.DpSize -import com.metacto.core.presentation.components.wheelPicker.DefaultSelectorProperties -import com.metacto.core.presentation.components.wheelPicker.SelectorProperties -import com.metacto.core.presentation.theme.CoreTheme +import com.metacto.core.ui.components.wheelPicker.DefaultSelectorProperties +import com.metacto.core.ui.components.wheelPicker.SelectorProperties +import com.metacto.core.ui.theme.CoreTheme import kotlinx.datetime.LocalDate @Composable diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/wheelPicker/datetime/WheelDateTimePicker.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/wheelPicker/datetime/WheelDateTimePicker.kt similarity index 87% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/wheelPicker/datetime/WheelDateTimePicker.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/wheelPicker/datetime/WheelDateTimePicker.kt index 292b0fc9..2c4f9d38 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/wheelPicker/datetime/WheelDateTimePicker.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/wheelPicker/datetime/WheelDateTimePicker.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.wheelPicker.datetime +package com.metacto.core.ui.components.wheelPicker.datetime import androidx.compose.material3.LocalContentColor import androidx.compose.material3.MaterialTheme @@ -7,9 +7,9 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.TextStyle import androidx.compose.ui.unit.DpSize -import com.metacto.core.presentation.components.wheelPicker.SelectorProperties -import com.metacto.core.presentation.components.wheelPicker.WheelPickerDefaults -import com.metacto.core.presentation.theme.CoreTheme +import com.metacto.core.ui.components.wheelPicker.SelectorProperties +import com.metacto.core.ui.components.wheelPicker.WheelPickerDefaults +import com.metacto.core.ui.theme.CoreTheme import kotlinx.datetime.Clock import kotlinx.datetime.LocalDateTime import kotlinx.datetime.TimeZone diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/wheelPicker/datetime/WheelTimePicker.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/wheelPicker/datetime/WheelTimePicker.kt similarity index 84% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/wheelPicker/datetime/WheelTimePicker.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/wheelPicker/datetime/WheelTimePicker.kt index 4a2c034d..22b36f10 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/wheelPicker/datetime/WheelTimePicker.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/components/wheelPicker/datetime/WheelTimePicker.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.wheelPicker.datetime +package com.metacto.core.ui.components.wheelPicker.datetime import androidx.compose.material3.LocalContentColor import androidx.compose.material3.MaterialTheme @@ -7,9 +7,9 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.TextStyle import androidx.compose.ui.unit.DpSize -import com.metacto.core.presentation.components.wheelPicker.SelectorProperties -import com.metacto.core.presentation.components.wheelPicker.WheelPickerDefaults -import com.metacto.core.presentation.theme.CoreTheme +import com.metacto.core.ui.components.wheelPicker.SelectorProperties +import com.metacto.core.ui.components.wheelPicker.WheelPickerDefaults +import com.metacto.core.ui.theme.CoreTheme import kotlinx.datetime.LocalTime @Composable diff --git a/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/di/Di.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/di/Di.kt new file mode 100644 index 00000000..f21a78bb --- /dev/null +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/di/Di.kt @@ -0,0 +1,38 @@ +package com.metacto.core.ui.di + +import com.metacto.core.ui.CoreUIConfigs +import com.metacto.core.ui.components.itemPicker.ItemPickerViewModel +import com.metacto.core.ui.components.options.OptionsViewModel +import com.metacto.core.ui.navigation.NavManager +import com.metacto.core.ui.resources.IResourceProvider +import com.metacto.core.ui.resources.ResourceProvider +import org.koin.core.module.Module +import org.koin.dsl.module + +fun coreUIModule(configs: CoreUIConfigs) = module { + // Common dependencies can be added here + + includes(platformModule()) + + single { + configs + } + + commonViewModel { + OptionsViewModel() + } + + commonViewModel { + ItemPickerViewModel() + } + + single { + NavManager() + } + + single { + ResourceProvider + } +} + +internal expect fun platformModule(): Module \ No newline at end of file diff --git a/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/di/KoinExtensions.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/di/KoinExtensions.kt new file mode 100644 index 00000000..7b5dacf0 --- /dev/null +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/di/KoinExtensions.kt @@ -0,0 +1,12 @@ +package com.metacto.core.ui.di + +import com.metacto.core.ui.base.CommonViewModel +import org.koin.core.definition.Definition +import org.koin.core.definition.KoinDefinition +import org.koin.core.module.Module +import org.koin.core.qualifier.Qualifier + +expect inline fun Module.commonViewModel( + qualifier: Qualifier? = null, + noinline definition: Definition +): KoinDefinition \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/extensions/ColorExtensions.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/extensions/ColorExtensions.kt similarity index 81% rename from coreapp/src/commonMain/kotlin/com/metacto/core/utils/extensions/ColorExtensions.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/extensions/ColorExtensions.kt index a59d0f0e..57bfa21c 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/extensions/ColorExtensions.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/extensions/ColorExtensions.kt @@ -1,7 +1,8 @@ -package com.metacto.core.utils.extensions +package com.metacto.core.ui.extensions import androidx.compose.ui.graphics.Color import androidx.compose.ui.util.lerp +import com.metacto.core.extensions.toHex fun Color.blend(background: Color): Color { val foregroundAlpha = this.alpha @@ -79,4 +80,18 @@ fun List.averageColor(): Color { blue = totalBlue / size, alpha = totalAlpha / size ) +} + +fun Color.darken(factor: Float): Color { + val red = (red * (1 - factor)).coerceIn(0f, 1f) + val green = (green * (1 - factor)).coerceIn(0f, 1f) + val blue = (blue * (1 - factor)).coerceIn(0f, 1f) + return Color(red, green, blue, alpha) +} + +fun Color.lighten(factor: Float): Color { + val red = (red + (1 - red) * factor).coerceIn(0f, 1f) + val green = (green + (1 - green) * factor).coerceIn(0f, 1f) + val blue = (blue + (1 - blue) * factor).coerceIn(0f, 1f) + return Color(red, green, blue, alpha) } \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/extensions/ComposeExtensions.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/extensions/ComposeExtensions.kt similarity index 96% rename from coreapp/src/commonMain/kotlin/com/metacto/core/utils/extensions/ComposeExtensions.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/extensions/ComposeExtensions.kt index 3b5dcea9..75e36ac4 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/extensions/ComposeExtensions.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/extensions/ComposeExtensions.kt @@ -1,4 +1,4 @@ -package com.metacto.core.utils.extensions +package com.metacto.core.ui.extensions import androidx.compose.animation.core.Animatable import androidx.compose.animation.core.AnimationSpec @@ -77,14 +77,11 @@ import androidx.compose.ui.text.lerp import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.offset -import com.metacto.core.presentation.base.SIDE_EFFECTS_KEY -import com.metacto.core.presentation.base.ViewSideEffect -import com.metacto.core.resources.IFileResource +import com.metacto.core.ui.base.ViewSideEffect +import com.metacto.core.ui.resources.IFileResource import com.valentinilk.shimmer.shimmer import io.github.alexzhirkevich.compottie.LottieCompositionResult import io.github.alexzhirkevich.compottie.LottieCompositionSpec -import io.michaelrocks.libphonenumber.kotlin.MetadataLoader -import io.michaelrocks.libphonenumber.kotlin.PhoneNumberUtil import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.IO @@ -390,14 +387,6 @@ fun LazyListState.onScroll( } } -@Composable -fun Flow.consume( - key: String = SIDE_EFFECTS_KEY, - action: (effect: T) -> Unit -) { - LaunchedEffect(key) { onEach(action).collect() } -} - fun Modifier.focusRequesterIfNotNull(focusRequester: FocusRequester?): Modifier { return if (focusRequester != null) this.focusRequester(focusRequester) else this } @@ -471,30 +460,6 @@ fun DefaultLaunchedEffect( } } -@Composable -fun rememberPhoneNumberUtil(): PhoneNumberUtil { - val metadataLoader = defaultMetadataLoader() - return remember { - PhoneNumberUtil.Companion.createInstance( - metadataLoader = metadataLoader - ) - } -} - -@Composable -fun rememberLottieComposition(res: IFileResource): LottieCompositionResult { - // Load json if required - var json by remember(res) { mutableStateOf(null) } - if (json == null) json = res.readAsState().value - - // Then return the composition - return io.github.alexzhirkevich.compottie.rememberLottieComposition( - LottieCompositionSpec.JsonString( - json.orEmpty() - ) - ) -} - fun Modifier.borderIf( condition: Boolean, border: BorderStroke, @@ -551,11 +516,6 @@ fun keyboardAsState(): State { return rememberUpdatedState(isImeVisible) } -@Composable -fun Modifier.shimmerIf(condition: Boolean): Modifier { - return if (condition) this.shimmer() else this -} - @Composable fun LazyListState.dismissKeyboardWhenScrollDown() { val keyboardController = LocalSoftwareKeyboardController.current @@ -760,7 +720,32 @@ fun Modifier.onEdgeSwipe( } @Composable -expect fun defaultMetadataLoader(): MetadataLoader +fun Modifier.shimmerIf(condition: Boolean): Modifier { + return if (condition) this.shimmer() else this +} + +fun Dp?.orZero() = this ?: 0.dp + +@Composable +fun rememberLottieComposition(res: IFileResource): LottieCompositionResult { + // Load json if required + var json by remember(res) { mutableStateOf(null) } + if (json == null) json = res.readAsState().value + + // Then return the composition + return io.github.alexzhirkevich.compottie.rememberLottieComposition( + LottieCompositionSpec.JsonString( + json.orEmpty() + ) + ) +} + +@Composable +fun Flow.consume( + action: (effect: T) -> Unit +) { + LaunchedEffect(Unit) { onEach(action).collect() } +} @Composable expect fun openUrlInBrowser(url: String) diff --git a/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/extensions/StringExtensions.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/extensions/StringExtensions.kt new file mode 100644 index 00000000..598dd3eb --- /dev/null +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/extensions/StringExtensions.kt @@ -0,0 +1,35 @@ +package com.metacto.core.ui.extensions + +import androidx.compose.ui.text.AnnotatedString +import androidx.compose.ui.text.buildAnnotatedString + +fun String.formatWithMask(mask: String, maskChar: Char): String { + val maxLength = mask.count { it == maskChar } + val trimmed = this.take(maxLength) + if (trimmed.isEmpty()) return "" + + return buildString { + var maskIndex = 0 + var textIndex = 0 + while (textIndex < trimmed.length && maskIndex < mask.length) { + if (mask[maskIndex] != maskChar) { + val nextDigitIndex = mask.indexOf(maskChar, maskIndex) + append(mask.substring(maskIndex, nextDigitIndex)) + maskIndex = nextDigitIndex + } + append(trimmed[textIndex++]) + maskIndex++ + } + } +} + +fun AnnotatedString.formatWithMask(mask: String, maskChar: Char): AnnotatedString { + return buildAnnotatedString { + val formatted = text.formatWithMask( + mask = mask, + maskChar = maskChar + ) + + append(formatted) + } +} \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/globalState/CoreGlobalState.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/globalState/CoreGlobalState.kt similarity index 81% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/globalState/CoreGlobalState.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/globalState/CoreGlobalState.kt index b9c211ad..0f59d9e2 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/globalState/CoreGlobalState.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/globalState/CoreGlobalState.kt @@ -1,18 +1,19 @@ @file:OptIn(DelicateCoroutinesApi::class) -package com.metacto.core.presentation.globalState +package com.metacto.core.ui.globalState import androidx.compose.runtime.mutableStateOf -import com.metacto.core.presentation.globalState.models.ChoicesPopupParams -import com.metacto.core.presentation.globalState.models.ConfirmationPopupParams -import com.metacto.core.presentation.globalState.models.DatePickerParams -import com.metacto.core.presentation.globalState.models.ForceUpdatePopupParams -import com.metacto.core.presentation.globalState.models.LoadingType -import com.metacto.core.presentation.globalState.models.MessagePopupParams -import com.metacto.core.presentation.globalState.models.OverrideUserPopupParams -import com.metacto.core.presentation.globalState.models.SnackBarParams -import com.metacto.core.presentation.globalState.models.SuccessPopupParams -import com.metacto.core.presentation.globalState.models.TimePickerParams +import com.metacto.core.ui.globalState.models.ChoicesPopupParams +import com.metacto.core.ui.globalState.models.ConfirmationPopupParams +import com.metacto.core.ui.globalState.models.CustomPopupParams +import com.metacto.core.ui.globalState.models.DatePickerParams +import com.metacto.core.ui.globalState.models.ForceUpdatePopupParams +import com.metacto.core.ui.globalState.models.LoadingType +import com.metacto.core.ui.globalState.models.MessagePopupParams +import com.metacto.core.ui.globalState.models.OverrideUserPopupParams +import com.metacto.core.ui.globalState.models.SnackBarParams +import com.metacto.core.ui.globalState.models.SuccessPopupParams +import com.metacto.core.ui.globalState.models.TimePickerParams import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.Job @@ -29,6 +30,7 @@ open class CoreGlobalState : ICoreGlobalState { override val confirmationPopupState = mutableStateOf(null) override val forceUpdatePopupState = mutableStateOf(null) override val choicesPopupState = mutableStateOf(null) + override val customPopupState = mutableStateOf(null) override val datePickerState = mutableStateOf(null) override val timePickerState = mutableStateOf(null) override val snackBarState = mutableStateOf(SnackBarParams.hidden()) @@ -45,6 +47,7 @@ open class CoreGlobalState : ICoreGlobalState { confirmationPopupState.value = null forceUpdatePopupState.value = null choicesPopupState.value = null + customPopupState.value = null datePickerState.value = null timePickerState.value = null overrideUserPopupState.value = null @@ -78,6 +81,10 @@ open class CoreGlobalState : ICoreGlobalState { choicesPopupState.value = params } + override fun customPopup(params: CustomPopupParams) { + customPopupState.value = params + } + override fun datePicker(params: DatePickerParams) { datePickerState.value = params } diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/globalState/ICoreGlobalState.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/globalState/ICoreGlobalState.kt similarity index 65% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/globalState/ICoreGlobalState.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/globalState/ICoreGlobalState.kt index 6fb3a1dd..11fdc94b 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/globalState/ICoreGlobalState.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/globalState/ICoreGlobalState.kt @@ -1,16 +1,17 @@ -package com.metacto.core.presentation.globalState +package com.metacto.core.ui.globalState import androidx.compose.runtime.State -import com.metacto.core.presentation.globalState.models.ChoicesPopupParams -import com.metacto.core.presentation.globalState.models.ConfirmationPopupParams -import com.metacto.core.presentation.globalState.models.DatePickerParams -import com.metacto.core.presentation.globalState.models.ForceUpdatePopupParams -import com.metacto.core.presentation.globalState.models.LoadingType -import com.metacto.core.presentation.globalState.models.MessagePopupParams -import com.metacto.core.presentation.globalState.models.OverrideUserPopupParams -import com.metacto.core.presentation.globalState.models.SnackBarParams -import com.metacto.core.presentation.globalState.models.SuccessPopupParams -import com.metacto.core.presentation.globalState.models.TimePickerParams +import com.metacto.core.ui.globalState.models.ChoicesPopupParams +import com.metacto.core.ui.globalState.models.ConfirmationPopupParams +import com.metacto.core.ui.globalState.models.CustomPopupParams +import com.metacto.core.ui.globalState.models.DatePickerParams +import com.metacto.core.ui.globalState.models.ForceUpdatePopupParams +import com.metacto.core.ui.globalState.models.LoadingType +import com.metacto.core.ui.globalState.models.MessagePopupParams +import com.metacto.core.ui.globalState.models.OverrideUserPopupParams +import com.metacto.core.ui.globalState.models.SnackBarParams +import com.metacto.core.ui.globalState.models.SuccessPopupParams +import com.metacto.core.ui.globalState.models.TimePickerParams interface ICoreGlobalState { val appLoadedState: State @@ -21,6 +22,7 @@ interface ICoreGlobalState { val confirmationPopupState: State val forceUpdatePopupState: State val choicesPopupState: State + val customPopupState: State val datePickerState: State val timePickerState: State val snackBarState: State @@ -37,6 +39,7 @@ interface ICoreGlobalState { fun confirmationPopup(params: ConfirmationPopupParams) fun forceUpdatePopup(params: ForceUpdatePopupParams) fun choicesPopup(params: ChoicesPopupParams) + fun customPopup(params: CustomPopupParams) fun datePicker(params: DatePickerParams) fun timePicker(params: TimePickerParams) fun snackBar(params: SnackBarParams) diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/globalState/models/ChoicesPopupParams.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/globalState/models/ChoicesPopupParams.kt similarity index 81% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/globalState/models/ChoicesPopupParams.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/globalState/models/ChoicesPopupParams.kt index 88883f21..ffa801df 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/globalState/models/ChoicesPopupParams.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/globalState/models/ChoicesPopupParams.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.globalState.models +package com.metacto.core.ui.globalState.models data class ChoicesPopupParams( val isCancellable: Boolean = true, diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/globalState/models/ConfirmationPopupParams.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/globalState/models/ConfirmationPopupParams.kt similarity index 86% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/globalState/models/ConfirmationPopupParams.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/globalState/models/ConfirmationPopupParams.kt index 944b1843..1abfe920 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/globalState/models/ConfirmationPopupParams.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/globalState/models/ConfirmationPopupParams.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.globalState.models +package com.metacto.core.ui.globalState.models data class ConfirmationPopupParams( val isCancellable: Boolean = true, diff --git a/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/globalState/models/CustomPopupParams.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/globalState/models/CustomPopupParams.kt new file mode 100644 index 00000000..f230a666 --- /dev/null +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/globalState/models/CustomPopupParams.kt @@ -0,0 +1,30 @@ +package com.metacto.core.ui.globalState.models + +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.runtime.Composable + +/** + * Parameters for showing a custom popup with composable content. + * + * @param isCancellable Whether the dialog can be dismissed by clicking outside or pressing back + * @param showToolbar Whether to show the toolbar with title and close button + * @param title Optional title text shown in the toolbar (only visible if showToolbar is true) + * @param showPositiveButton Whether to show a positive action button at the bottom + * @param positiveButtonText Text for the positive button (defaults to "OK" if not provided) + * @param onPositiveClick Callback invoked when the positive button is clicked + * @param onDismiss Callback invoked when the dialog is dismissed + * @param content Composable lambda containing the custom content to display in the dialog + */ +data class CustomPopupParams( + val isCancellable: Boolean = true, + val showToolbar: Boolean = false, + val title: String? = null, + val showPositiveButton: Boolean = false, + val positiveButtonText: String? = null, + val onPositiveClick: (() -> Unit)? = null, + val onDismiss: (() -> Unit)? = null, + val contentPadding: PaddingValues? = null, + val shape: RoundedCornerShape? = null, + val content: @Composable () -> Unit +) diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/globalState/models/DatePickerParams.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/globalState/models/DatePickerParams.kt similarity index 82% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/globalState/models/DatePickerParams.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/globalState/models/DatePickerParams.kt index 24325c0e..0d0f869f 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/globalState/models/DatePickerParams.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/globalState/models/DatePickerParams.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.globalState.models +package com.metacto.core.ui.globalState.models import kotlinx.datetime.LocalDate diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/globalState/models/ForceUpdatePopupParams.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/globalState/models/ForceUpdatePopupParams.kt similarity index 67% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/globalState/models/ForceUpdatePopupParams.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/globalState/models/ForceUpdatePopupParams.kt index d79a4ef6..1b87b61a 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/globalState/models/ForceUpdatePopupParams.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/globalState/models/ForceUpdatePopupParams.kt @@ -1,13 +1,14 @@ -package com.metacto.core.presentation.globalState.models +package com.metacto.core.ui.globalState.models -import com.metacto.coreApp.resources.* +import com.metacto.core.ui.resources.Res +import com.metacto.core.ui.resources.ic_upgrade import org.jetbrains.compose.resources.DrawableResource data class ForceUpdatePopupParams( val isRequired: Boolean = true, val title: String? = null, val body: String? = null, - val image: DrawableResource = Res.drawable.ic_upgrade, + val image: DrawableResource? = Res.drawable.ic_upgrade, val updateButtonText: String? = null, val skipUpdateButtonText: String? = null, val onUpdateClick: (() -> Unit)? = null, diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/globalState/models/LoadingType.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/globalState/models/LoadingType.kt similarity index 82% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/globalState/models/LoadingType.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/globalState/models/LoadingType.kt index 3f4caccd..0ec2af5b 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/globalState/models/LoadingType.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/globalState/models/LoadingType.kt @@ -1,6 +1,6 @@ -package com.metacto.core.presentation.globalState.models +package com.metacto.core.ui.globalState.models -import com.metacto.core.resources.IFileResource +import com.metacto.core.ui.resources.IFileResource sealed class LoadingType { data class Lottie(val anim: IFileResource? = null) : LoadingType() diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/globalState/models/MessagePopupParams.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/globalState/models/MessagePopupParams.kt similarity index 83% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/globalState/models/MessagePopupParams.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/globalState/models/MessagePopupParams.kt index 159eb7cf..90a3a095 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/globalState/models/MessagePopupParams.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/globalState/models/MessagePopupParams.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.globalState.models +package com.metacto.core.ui.globalState.models data class MessagePopupParams( val isCancellable: Boolean = true, diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/globalState/models/OverrideUserPopupParams.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/globalState/models/OverrideUserPopupParams.kt similarity index 75% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/globalState/models/OverrideUserPopupParams.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/globalState/models/OverrideUserPopupParams.kt index c8d1c142..f9d8e206 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/globalState/models/OverrideUserPopupParams.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/globalState/models/OverrideUserPopupParams.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.globalState.models +package com.metacto.core.ui.globalState.models data class OverrideUserPopupParams( val onPositiveClick: ((Int?) -> Unit)? = null, diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/globalState/models/SnackBarParams.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/globalState/models/SnackBarParams.kt similarity index 85% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/globalState/models/SnackBarParams.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/globalState/models/SnackBarParams.kt index 9d15ab1e..cb171bd8 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/globalState/models/SnackBarParams.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/globalState/models/SnackBarParams.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.globalState.models +package com.metacto.core.ui.globalState.models data class SnackBarParams( val isVisible: Boolean = true, diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/globalState/models/SuccessPopupParams.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/globalState/models/SuccessPopupParams.kt similarity index 81% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/globalState/models/SuccessPopupParams.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/globalState/models/SuccessPopupParams.kt index 8634618c..0299ac42 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/globalState/models/SuccessPopupParams.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/globalState/models/SuccessPopupParams.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.globalState.models +package com.metacto.core.ui.globalState.models data class SuccessPopupParams( val isCancellable: Boolean = true, diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/globalState/models/TimePickerParams.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/globalState/models/TimePickerParams.kt similarity index 82% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/globalState/models/TimePickerParams.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/globalState/models/TimePickerParams.kt index 728f2244..4b97799a 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/globalState/models/TimePickerParams.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/globalState/models/TimePickerParams.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.globalState.models +package com.metacto.core.ui.globalState.models import kotlinx.datetime.LocalTime diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/imagePreloader/IPreloader.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/imagePreloader/IPreloader.kt similarity index 68% rename from coreapp/src/commonMain/kotlin/com/metacto/core/utils/imagePreloader/IPreloader.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/imagePreloader/IPreloader.kt index 43fd1a79..3b8266fa 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/imagePreloader/IPreloader.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/imagePreloader/IPreloader.kt @@ -1,4 +1,4 @@ -package com.metacto.core.utils.imagePreloader +package com.metacto.core.ui.imagePreloader val Class = IPreloader::class diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/imagePreloader/Preloader.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/imagePreloader/Preloader.kt similarity index 93% rename from coreapp/src/commonMain/kotlin/com/metacto/core/utils/imagePreloader/Preloader.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/imagePreloader/Preloader.kt index 5420ce4e..233fa72d 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/imagePreloader/Preloader.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/imagePreloader/Preloader.kt @@ -1,4 +1,4 @@ -package com.metacto.core.utils.imagePreloader +package com.metacto.core.ui.imagePreloader import coil3.PlatformContext import coil3.SingletonImageLoader diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/launchers/IIntentLauncher.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/launchers/IIntentLauncher.kt similarity index 88% rename from coreapp/src/commonMain/kotlin/com/metacto/core/utils/launchers/IIntentLauncher.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/launchers/IIntentLauncher.kt index a80de51a..f0fa0f72 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/launchers/IIntentLauncher.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/launchers/IIntentLauncher.kt @@ -1,4 +1,4 @@ -package com.metacto.core.utils.launchers +package com.metacto.core.ui.launchers import kotlinx.datetime.LocalDateTime @@ -15,7 +15,7 @@ interface IIntentLauncher { fun launchPhone(phone: String) - fun launchBrowser(url: String) + fun launchBrowser(url: String, onError: (() -> Unit)? = null) fun launchAppSettings() diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/media/IMediaManager.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/media/IMediaManager.kt similarity index 71% rename from coreapp/src/commonMain/kotlin/com/metacto/core/utils/media/IMediaManager.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/media/IMediaManager.kt index 61d785ae..d7cb95a6 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/media/IMediaManager.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/media/IMediaManager.kt @@ -1,4 +1,4 @@ -package com.metacto.core.utils.media +package com.metacto.core.ui.media interface IMediaManager { suspend fun getVideoPreview(videoPath: String): ByteArray? diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/models/ImageUIModel.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/models/ImageUIModel.kt similarity index 62% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/models/ImageUIModel.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/models/ImageUIModel.kt index 3d09c91a..ddea3a63 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/models/ImageUIModel.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/models/ImageUIModel.kt @@ -1,19 +1,20 @@ -package com.metacto.core.presentation.models +package com.metacto.core.ui.models -import com.metacto.core.utils.CommonSerializable +import com.metacto.kmm.core.CommonSerializable import org.jetbrains.compose.resources.DrawableResource data class ImageUIModel( val id: Int? = null, val bytes: ByteArray? = null, + val filePath: String? = null, val resource: DrawableResource? = null, val url: String? = null, val isUpdating: Boolean = false ) : CommonSerializable { - fun getData() = bytes ?: url ?: resource + fun getData() = bytes ?: filePath ?: url ?: resource fun hasData(): Boolean { - return bytes != null || url != null || resource != null + return bytes != null || filePath?.isNotEmpty() == true || url != null || resource != null } } diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/navigation/CoreAppNavigator.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/navigation/CoreAppNavigator.kt similarity index 84% rename from coreapp/src/commonMain/kotlin/com/metacto/core/navigation/CoreAppNavigator.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/navigation/CoreAppNavigator.kt index bc157ac9..2d2a46a9 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/navigation/CoreAppNavigator.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/navigation/CoreAppNavigator.kt @@ -1,4 +1,4 @@ -package com.metacto.core.navigation +package com.metacto.core.ui.navigation import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.foundation.layout.Box @@ -17,14 +17,14 @@ import cafe.adriel.voyager.core.screen.Screen import cafe.adriel.voyager.navigator.CurrentScreen import cafe.adriel.voyager.navigator.Navigator import cafe.adriel.voyager.navigator.bottomSheet.BottomSheetNavigator -import com.metacto.core.CoreEnvironment -import com.metacto.core.presentation.base.BaseScreen -import com.metacto.core.presentation.components.bottomSheets.BottomSheetInsetsContainer -import com.metacto.core.presentation.components.voyager.FadeTransition -import com.metacto.core.presentation.globalState.ICoreGlobalState -import com.metacto.core.presentation.theme.CoreTheme -import com.metacto.core.utils.extensions.onEdgeSwipe -import com.metacto.core.utils.extensions.orFalse +import com.metacto.core.extensions.orFalse +import com.metacto.core.ui.CoreUIConfigs +import com.metacto.core.ui.base.CoreScreen +import com.metacto.core.ui.components.bottomSheets.BottomSheetInsetsContainer +import com.metacto.core.ui.components.voyager.FadeTransition +import com.metacto.core.ui.extensions.onEdgeSwipe +import com.metacto.core.ui.globalState.ICoreGlobalState +import com.metacto.core.ui.theme.CoreTheme import kotlinx.coroutines.delay import kotlinx.coroutines.launch import org.koin.compose.koinInject @@ -32,7 +32,7 @@ import kotlin.time.Duration.Companion.milliseconds private val NAV_BETWEEN_SHEETS_DELAY = 100.milliseconds -@OptIn(ExperimentalAnimationApi::class, ExperimentalMaterialApi::class) +@OptIn(ExperimentalMaterialApi::class, ExperimentalAnimationApi::class) @Composable fun CoreAppNavigator( modifier: Modifier, @@ -46,19 +46,21 @@ fun CoreAppNavigator( var sheetNavigator by remember { mutableStateOf(null) } // Prepare swipe objects - val appEnvironment = koinInject() - val enableSwipeToGoBack by remember(appEnvironment, navigator?.lastItem) { - val currentScreen = navigator?.lastItem as? BaseScreen<*> + val coreUIConfigs = koinInject() + val enableSwipeToGoBack by remember(coreUIConfigs, navigator?.lastItem) { + val currentScreen = navigator?.lastItem as? CoreScreen<*> derivedStateOf { - appEnvironment.enableSwipeToGoBack && currentScreen?.enableSwipeToGoBack == true + coreUIConfigs.enableSwipeToGoBack && currentScreen?.enableSwipeToGoBack == true } } // Handle navigation effects LaunchedEffect(navigator, sheetNavigator) { navManager.collectNavEffects(this) { effect -> - // First dismiss the keyboard for better UX - globalState.dismissKeyboard() + // First dismiss the keyboard if needed for better UX + if (effect.shouldDismissKeyboard) { + globalState.dismissKeyboard() + } // Then execute the navigation when (effect) { @@ -142,6 +144,11 @@ fun CoreAppNavigator( effect.result.complete(hasScreen) } + is NavEffect.GetLastScreen -> { + val lastScreen = navigator?.lastItem as? NavScreen + effect.result.complete(lastScreen) + } + is NavEffect.GoBack -> { // Hide bottom sheet if visible or navigate back if (sheetNavigator?.isVisible == true) { @@ -174,7 +181,7 @@ fun CoreAppNavigator( Navigator( screen = startScreen, onBackPressed = { - if (it is BaseScreen<*>) { + if (it is CoreScreen<*>) { it.onBackPressed() false } else { diff --git a/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/navigation/NavDestination.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/navigation/NavDestination.kt new file mode 100644 index 00000000..aca12661 --- /dev/null +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/navigation/NavDestination.kt @@ -0,0 +1,8 @@ +package com.metacto.core.ui.navigation + +import com.metacto.core.ui.base.CoreScreen +import com.metacto.core.ui.base.CoreSheet + +typealias NavScreen = CoreScreen<*> + +typealias NavSheet = CoreSheet<*> \ No newline at end of file diff --git a/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/navigation/NavEffect.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/navigation/NavEffect.kt new file mode 100644 index 00000000..958c503c --- /dev/null +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/navigation/NavEffect.kt @@ -0,0 +1,57 @@ +package com.metacto.core.ui.navigation + +import kotlinx.coroutines.CompletableDeferred +import kotlin.reflect.KClass + +sealed class NavEffect { + open val shouldDismissKeyboard: Boolean = true + + data class NavigateTo( + val destination: NavScreen, + val behaviour: NavigateBehaviour + ) : NavEffect() + + data class ClearAndNavigateTo(val destination: NavScreen) : NavEffect() + + data class PopToExclusive(val destClass: KClass) : NavEffect() + + data class PopToInclusive(val destClass: KClass) : NavEffect() + + data class PopByCount(val popCount: Int) : NavEffect() + + data class NavigateAndPopCurrent(val destination: NavScreen) : NavEffect() + + data class NavigateAndPopToExclusive( + val navToDest: NavScreen, + val popToDestClass: KClass + ) : NavEffect() + + data class NavigateAndPopToInclusive( + val navToDest: NavScreen, + val popToDestClass: KClass + ) : NavEffect() + + data class NavigateToBottomSheet(val destination: NavSheet) : NavEffect() + + data class CheckScreenByTag( + val tag: String, + val result: CompletableDeferred + ) : NavEffect() { + override val shouldDismissKeyboard = false + } + + data class CheckScreenByClass( + val clazz: KClass, + val result: CompletableDeferred + ) : NavEffect() { + override val shouldDismissKeyboard = false + } + + data class GetLastScreen( + val result: CompletableDeferred + ) : NavEffect() { + override val shouldDismissKeyboard = false + } + + data object GoBack : NavEffect() +} \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/navigation/NavManager.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/navigation/NavManager.kt similarity index 85% rename from coreapp/src/commonMain/kotlin/com/metacto/core/navigation/NavManager.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/navigation/NavManager.kt index b5be8837..82b4c832 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/navigation/NavManager.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/navigation/NavManager.kt @@ -1,4 +1,4 @@ -package com.metacto.core.navigation +package com.metacto.core.ui.navigation import kotlinx.coroutines.CompletableDeferred import kotlinx.coroutines.CoroutineScope @@ -22,7 +22,7 @@ class NavManager { private val _results = MutableStateFlow?>(null) fun navigate( - destination: NavDestination, + destination: NavScreen, behaviour: NavigateBehaviour = NavigateBehaviour.Normal ) { GlobalScope.launch { @@ -35,7 +35,7 @@ class NavManager { } } - fun clearAndNavigate(destination: NavDestination) { + fun clearAndNavigate(destination: NavScreen) { GlobalScope.launch { _effects.send( NavEffect.ClearAndNavigateTo(destination) @@ -43,7 +43,7 @@ class NavManager { } } - fun popToExclusive(destClass: KClass) { + fun popToExclusive(destClass: KClass) { GlobalScope.launch { _effects.send( NavEffect.PopToExclusive(destClass) @@ -51,7 +51,7 @@ class NavManager { } } - fun popToInclusive(destClass: KClass) { + fun popToInclusive(destClass: KClass) { GlobalScope.launch { _effects.send( NavEffect.PopToInclusive(destClass) @@ -67,7 +67,7 @@ class NavManager { } } - fun navigateAndPopupCurrent(destination: NavDestination) { + fun navigateAndPopupCurrent(destination: NavScreen) { GlobalScope.launch { _effects.send( NavEffect.NavigateAndPopCurrent(destination) @@ -75,8 +75,8 @@ class NavManager { } } - fun navigateAndPopToExclusive( - navToDest: NavDestination, + fun navigateAndPopToExclusive( + navToDest: NavScreen, popToDestClass: KClass ) { GlobalScope.launch { @@ -89,8 +89,8 @@ class NavManager { } } - fun navigateAndPopToInclusive( - navToDest: NavDestination, + fun navigateAndPopToInclusive( + navToDest: NavScreen, popToDestClass: KClass ) { GlobalScope.launch { @@ -103,7 +103,7 @@ class NavManager { } } - fun navigateToBottomSheet(destination: NavDestination) { + fun navigateToBottomSheet(destination: NavSheet) { GlobalScope.launch { _effects.send( NavEffect.NavigateToBottomSheet(destination) @@ -122,7 +122,7 @@ class NavManager { return result.await() } - suspend fun checkScreenByClass(clazz: KClass): Boolean { + suspend fun checkScreenByClass(clazz: KClass): Boolean { val result = CompletableDeferred() _effects.send( NavEffect.CheckScreenByClass( @@ -133,6 +133,14 @@ class NavManager { return result.await() } + suspend fun getLastScreen(): NavScreen? { + val result = CompletableDeferred() + _effects.send( + NavEffect.GetLastScreen(result = result) + ) + return result.await() + } + fun goBack() { GlobalScope.launch { _effects.send( @@ -194,4 +202,4 @@ class NavManager { } } } -} \ No newline at end of file +} diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/navigation/NavResult.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/navigation/NavResult.kt similarity index 64% rename from coreapp/src/commonMain/kotlin/com/metacto/core/navigation/NavResult.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/navigation/NavResult.kt index e8c8e823..48499fa0 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/navigation/NavResult.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/navigation/NavResult.kt @@ -1,4 +1,4 @@ -package com.metacto.core.navigation +package com.metacto.core.ui.navigation data class NavResult( val source: String?, diff --git a/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/navigation/NavigateBehaviour.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/navigation/NavigateBehaviour.kt new file mode 100644 index 00000000..42b2e7c4 --- /dev/null +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/navigation/NavigateBehaviour.kt @@ -0,0 +1,12 @@ +package com.metacto.core.ui.navigation + +import com.metacto.kmm.core.CommonParcelable +import com.metacto.kmm.core.CommonParcelize +import com.metacto.kmm.core.CommonSerializable + +@CommonParcelize +enum class NavigateBehaviour : CommonParcelable, CommonSerializable { + Normal, + ReplaceIfCurrent, + KeepIfCurrent +} \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/navigation/NavigatorExtensions.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/navigation/NavigatorExtensions.kt similarity index 60% rename from coreapp/src/commonMain/kotlin/com/metacto/core/navigation/NavigatorExtensions.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/navigation/NavigatorExtensions.kt index c335c438..1be83d91 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/navigation/NavigatorExtensions.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/navigation/NavigatorExtensions.kt @@ -1,15 +1,15 @@ -package com.metacto.core.navigation +package com.metacto.core.ui.navigation import cafe.adriel.voyager.navigator.Navigator -import com.metacto.core.utils.extensions.contains +import com.metacto.core.extensions.contains import kotlin.reflect.KClass internal fun Navigator.navigateTo( - screen: NavDestination, + screen: NavScreen, behaviour: NavigateBehaviour ) { // Prepare isSameCurrentScreen flag - val isSameCurrentScreen = (lastItemOrNull as? NavDestination)?.screenTag == screen.screenTag + val isSameCurrentScreen = (lastItemOrNull as? NavScreen)?.screenTag == screen.screenTag // Handle navigation according to behavior when (behaviour) { @@ -33,15 +33,15 @@ internal fun Navigator.navigateTo( } } -internal fun Navigator.clearAndNavigateTo(screen: NavDestination) { +internal fun Navigator.clearAndNavigateTo(screen: NavScreen) { replaceAll(screen) } -internal fun Navigator.popToExclusive(screenClass: KClass) { +internal fun Navigator.popToExclusive(screenClass: KClass) { popUntil { it::class == screenClass } } -internal fun Navigator.popToInclusive(screenClass: KClass) { +internal fun Navigator.popToInclusive(screenClass: KClass) { val result = popUntil { it::class == screenClass } if (result) pop() } @@ -52,20 +52,20 @@ internal fun Navigator.popByCount(popCount: Int) { } } -internal fun Navigator.navigateAndPopCurrent(screen: NavDestination) { +internal fun Navigator.navigateAndPopCurrent(screen: NavScreen) { replace(screen) } -internal fun Navigator.navigateAndPopToExclusive( - navToScreen: NavDestination, +internal fun Navigator.navigateAndPopToExclusive( + navToScreen: NavScreen, popToScreenClass: KClass ) { popToExclusive(popToScreenClass) push(navToScreen) } -internal fun Navigator.navigateAndPopToInclusive( - navToScreen: NavDestination, +internal fun Navigator.navigateAndPopToInclusive( + navToScreen: NavScreen, popToScreenClass: KClass ) { popToInclusive(popToScreenClass) @@ -74,13 +74,13 @@ internal fun Navigator.navigateAndPopToInclusive( internal fun Navigator.checkScreenByTag(tag: String): Boolean { return items - .mapNotNull { it as? NavDestination } + .mapNotNull { it as? NavScreen } .contains { it.screenTag == tag } } -internal fun Navigator.checkScreenByClass(clazz: KClass): Boolean { +internal fun Navigator.checkScreenByClass(clazz: KClass): Boolean { return items - .mapNotNull { it as? NavDestination } + .mapNotNull { it as? NavScreen } .contains { it::class == clazz } } diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/permissions/BindEffect.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/permissions/BindEffect.kt similarity index 78% rename from coreapp/src/commonMain/kotlin/com/metacto/core/permissions/BindEffect.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/permissions/BindEffect.kt index c97139e5..5b57da25 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/permissions/BindEffect.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/permissions/BindEffect.kt @@ -1,4 +1,4 @@ -package com.metacto.core.permissions +package com.metacto.core.ui.permissions import androidx.compose.runtime.Composable diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/permissions/IPermissionManager.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/permissions/IPermissionManager.kt similarity index 66% rename from coreapp/src/commonMain/kotlin/com/metacto/core/permissions/IPermissionManager.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/permissions/IPermissionManager.kt index e5ad4d05..9b8eb93e 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/permissions/IPermissionManager.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/permissions/IPermissionManager.kt @@ -1,7 +1,7 @@ -package com.metacto.core.permissions +package com.metacto.core.ui.permissions -import com.metacto.core.permissions.enums.Permission -import com.metacto.core.permissions.enums.PermissionState +import com.metacto.core.ui.permissions.enums.Permission +import com.metacto.core.ui.permissions.enums.PermissionState expect interface IPermissionManager { suspend fun requestPermission( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/permissions/enums/Permission.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/permissions/enums/Permission.kt similarity index 87% rename from coreapp/src/commonMain/kotlin/com/metacto/core/permissions/enums/Permission.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/permissions/enums/Permission.kt index c37de5d6..0e0fba0e 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/permissions/enums/Permission.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/permissions/enums/Permission.kt @@ -1,4 +1,4 @@ -package com.metacto.core.permissions.enums +package com.metacto.core.ui.permissions.enums enum class Permission { CAMERA, diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/permissions/enums/PermissionState.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/permissions/enums/PermissionState.kt similarity index 66% rename from coreapp/src/commonMain/kotlin/com/metacto/core/permissions/enums/PermissionState.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/permissions/enums/PermissionState.kt index 667d4d7d..286d62e6 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/permissions/enums/PermissionState.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/permissions/enums/PermissionState.kt @@ -1,4 +1,4 @@ -package com.metacto.core.permissions.enums +package com.metacto.core.ui.permissions.enums enum class PermissionState { NotDetermined, diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/permissions/exceptions/DeniedExceptions.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/permissions/exceptions/DeniedExceptions.kt similarity index 69% rename from coreapp/src/commonMain/kotlin/com/metacto/core/permissions/exceptions/DeniedExceptions.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/permissions/exceptions/DeniedExceptions.kt index 28f09665..653321bb 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/permissions/exceptions/DeniedExceptions.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/permissions/exceptions/DeniedExceptions.kt @@ -1,6 +1,6 @@ -package com.metacto.core.permissions.exceptions +package com.metacto.core.ui.permissions.exceptions -import com.metacto.core.permissions.enums.Permission +import com.metacto.core.ui.permissions.enums.Permission open class DeniedException( val permission: Permission, diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/permissions/exceptions/RequestCanceledException.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/permissions/exceptions/RequestCanceledException.kt similarity index 52% rename from coreapp/src/commonMain/kotlin/com/metacto/core/permissions/exceptions/RequestCanceledException.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/permissions/exceptions/RequestCanceledException.kt index 2caca953..24443157 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/permissions/exceptions/RequestCanceledException.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/permissions/exceptions/RequestCanceledException.kt @@ -1,6 +1,6 @@ -package com.metacto.core.permissions.exceptions +package com.metacto.core.ui.permissions.exceptions -import com.metacto.core.permissions.enums.Permission +import com.metacto.core.ui.permissions.enums.Permission class RequestCanceledException( val permission: Permission, diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/resources/FileResource.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/resources/FileResource.kt similarity index 90% rename from coreapp/src/commonMain/kotlin/com/metacto/core/resources/FileResource.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/resources/FileResource.kt index 3c90e427..d4f9edb4 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/resources/FileResource.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/resources/FileResource.kt @@ -1,9 +1,8 @@ -package com.metacto.core.resources +package com.metacto.core.ui.resources import androidx.compose.runtime.Composable import androidx.compose.runtime.State import androidx.compose.runtime.produceState -import com.metacto.coreApp.resources.Res import org.jetbrains.compose.resources.ExperimentalResourceApi interface IFileResource { diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/resources/FileResources.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/resources/FileResources.kt similarity index 77% rename from coreapp/src/commonMain/kotlin/com/metacto/core/resources/FileResources.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/resources/FileResources.kt index 761488b8..a4adbd01 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/resources/FileResources.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/resources/FileResources.kt @@ -1,6 +1,4 @@ -package com.metacto.core.resources - -import com.metacto.coreApp.resources.Res +package com.metacto.core.ui.resources internal val Res.file: FileResources get() = FileResources diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/resources/IResourceProvider.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/resources/IResourceProvider.kt similarity index 91% rename from coreapp/src/commonMain/kotlin/com/metacto/core/utils/resources/IResourceProvider.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/resources/IResourceProvider.kt index ca8fec9e..d49e0d18 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/resources/IResourceProvider.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/resources/IResourceProvider.kt @@ -1,4 +1,4 @@ -package com.metacto.core.utils.resources +package com.metacto.core.ui.resources import org.jetbrains.compose.resources.PluralStringResource import org.jetbrains.compose.resources.StringResource diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/resources/ResourceProvider.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/resources/ResourceProvider.kt similarity index 89% rename from coreapp/src/commonMain/kotlin/com/metacto/core/utils/resources/ResourceProvider.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/resources/ResourceProvider.kt index fdc7592a..9da4eba9 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/resources/ResourceProvider.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/resources/ResourceProvider.kt @@ -1,7 +1,5 @@ -package com.metacto.core.utils.resources +package com.metacto.core.ui.resources -import com.metacto.coreApp.resources.Res -import com.metacto.coreApp.resources.allStringResources import kotlinx.coroutines.runBlocking import org.jetbrains.compose.resources.ExperimentalResourceApi import org.jetbrains.compose.resources.PluralStringResource diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/theme/CoreColors.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/theme/CoreColors.kt similarity index 98% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/theme/CoreColors.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/theme/CoreColors.kt index 20274d30..23aa27b0 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/theme/CoreColors.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/theme/CoreColors.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.theme +package com.metacto.core.ui.theme import androidx.compose.runtime.Immutable import androidx.compose.runtime.staticCompositionLocalOf @@ -330,6 +330,12 @@ data class CoreColors( onPrimary = onPrimary ), + // CustomDialog + val customDialog: CustomDialogColors = CustomDialogColors( + primary = primary, + onPrimary = onPrimary + ), + // OverrideUserDialog val overrideUserDialog: OverrideUserDialogColors = OverrideUserDialogColors( secondary = secondary, @@ -864,6 +870,14 @@ data class MessageDialogColors( val descriptionTextColor: Color = secondary, ) +// CustomDialog +data class CustomDialogColors( + private val primary: Color, + private val onPrimary: Color, + val btnBgColor: Color = primary, + val btnTextColor: Color = onPrimary +) + // OverrideUserDialog data class OverrideUserDialogColors( private val secondary: Color, diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/theme/CoreShapes.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/theme/CoreShapes.kt similarity index 99% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/theme/CoreShapes.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/theme/CoreShapes.kt index 1fbd2972..1fbee243 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/theme/CoreShapes.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/theme/CoreShapes.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.theme +package com.metacto.core.ui.theme import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/theme/CoreSpacings.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/theme/CoreSpacings.kt similarity index 99% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/theme/CoreSpacings.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/theme/CoreSpacings.kt index 5e4b4fa1..b9da49e5 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/theme/CoreSpacings.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/theme/CoreSpacings.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.theme +package com.metacto.core.ui.theme import androidx.compose.foundation.layout.PaddingValues import androidx.compose.runtime.Immutable @@ -425,6 +425,11 @@ data class CoreSpacings( popupSpacingLarge = popupSpacingLarge ), + // CustomDialog + val customDialog: CustomDialogSpacings = CustomDialogSpacings( + paddingXLarge = paddingXLarge + ), + // OverrideUserDialog val overrideUserDialog: OverrideUserDialogSpacings = OverrideUserDialogSpacings( paddingXLarge = paddingXLarge, @@ -1061,6 +1066,12 @@ data class MessageDialogSpacings( val descriptionTextAlign: TextAlign = TextAlign.Center ) +// CustomDialog +data class CustomDialogSpacings( + private val paddingXLarge: Dp, + val btnPaddingTop: Dp = paddingXLarge +) + // OverrideUserDialog data class OverrideUserDialogSpacings( private val paddingXLarge: Dp, diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/theme/CoreTheme.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/theme/CoreTheme.kt similarity index 92% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/theme/CoreTheme.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/theme/CoreTheme.kt index 57d07f86..c23eee4c 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/theme/CoreTheme.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/theme/CoreTheme.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.theme +package com.metacto.core.ui.theme import androidx.compose.runtime.Composable import androidx.compose.runtime.ReadOnlyComposable diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/theme/CoreTypography.kt b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/theme/CoreTypography.kt similarity index 98% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/theme/CoreTypography.kt rename to ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/theme/CoreTypography.kt index e1839a83..f1e1fe9e 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/theme/CoreTypography.kt +++ b/ui/core-ui/src/commonMain/kotlin/com/metacto/core/ui/theme/CoreTypography.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.theme +package com.metacto.core.ui.theme import androidx.compose.runtime.Immutable import androidx.compose.runtime.staticCompositionLocalOf @@ -182,6 +182,11 @@ data class CoreTypography( bodyLarge = bodyLarge ), + // CustomDialog + val customDialog: CustomDialogTypography = CustomDialogTypography( + btnLabelMedium = btnLabelMedium + ), + // OverrideUserDialog val overrideUserDialog: OverrideUserDialogTypography = OverrideUserDialogTypography( btnLabelMedium = btnLabelMedium, @@ -453,6 +458,12 @@ data class MessageDialogTypography( val btnTextStyle: TextStyle = btnLabelMedium ) +// CustomDialog +data class CustomDialogTypography( + private val btnLabelMedium: TextStyle, + val btnTextStyle: TextStyle = btnLabelMedium +) + // OverrideUserDialog data class OverrideUserDialogTypography( private val bodyLarge: TextStyle, diff --git a/ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/base/CommonViewModel.kt b/ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/base/CommonViewModel.kt new file mode 100644 index 00000000..83da4786 --- /dev/null +++ b/ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/base/CommonViewModel.kt @@ -0,0 +1,3 @@ +package com.metacto.core.ui.base + +actual open class CommonViewModel \ No newline at end of file diff --git a/coreapp/src/iosMain/kotlin/com/metacto/core/presentation/itemPicker/ItemPickerSheet.kt b/ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/components/itemPicker/ItemPickerSheet.kt similarity index 72% rename from coreapp/src/iosMain/kotlin/com/metacto/core/presentation/itemPicker/ItemPickerSheet.kt rename to ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/components/itemPicker/ItemPickerSheet.kt index be744d1c..66540fc3 100644 --- a/coreapp/src/iosMain/kotlin/com/metacto/core/presentation/itemPicker/ItemPickerSheet.kt +++ b/ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/components/itemPicker/ItemPickerSheet.kt @@ -1,13 +1,13 @@ -package com.metacto.core.presentation.itemPicker +package com.metacto.core.ui.components.itemPicker import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect -import com.metacto.core.presentation.base.BaseSheet -import com.metacto.core.presentation.base.getViewModel -import com.metacto.core.presentation.itemPicker.ItemPickerContract.Event -import com.metacto.core.presentation.itemPicker.components.ItemPickerContent -import com.metacto.core.presentation.itemPicker.models.PickerItem -import com.metacto.core.utils.PlatformType +import com.metacto.core.PlatformType +import com.metacto.core.ui.base.CoreSheet +import com.metacto.core.ui.base.getViewModel +import com.metacto.core.ui.components.itemPicker.ItemPickerContract.Event +import com.metacto.core.ui.components.itemPicker.components.ItemPickerContent +import com.metacto.core.ui.components.itemPicker.models.PickerItem actual class ItemPickerSheet actual constructor( actual val items: List, @@ -16,7 +16,7 @@ actual class ItemPickerSheet actual constructor( actual val visibleItemCount: Int, actual val canSearch: Boolean, actual val platform: PlatformType? -) : BaseSheet() { +) : CoreSheet() { private val viewModel = getViewModel() diff --git a/coreapp/src/iosMain/kotlin/com/metacto/core/presentation/itemPicker/NativeItemPicker.kt b/ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/components/itemPicker/NativeItemPicker.kt similarity index 95% rename from coreapp/src/iosMain/kotlin/com/metacto/core/presentation/itemPicker/NativeItemPicker.kt rename to ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/components/itemPicker/NativeItemPicker.kt index 3843562f..4345a80e 100644 --- a/coreapp/src/iosMain/kotlin/com/metacto/core/presentation/itemPicker/NativeItemPicker.kt +++ b/ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/components/itemPicker/NativeItemPicker.kt @@ -1,14 +1,14 @@ @file:OptIn(ExperimentalForeignApi::class, BetaInteropApi::class) -package com.metacto.core.presentation.itemPicker +package com.metacto.core.ui.components.itemPicker -import com.metacto.core.presentation.itemPicker.models.PickerItem -import com.metacto.core.utils.extensions.orZero -import com.metacto.core.utils.extensions.uiColor -import com.metacto.core.utils.resources.IResourceProvider -import com.metacto.coreApp.resources.Res -import com.metacto.coreApp.resources.action_done -import com.metacto.coreApp.resources.cancel +import com.metacto.core.extensions.orZero +import com.metacto.core.extensions.uiColor +import com.metacto.core.ui.components.itemPicker.models.PickerItem +import com.metacto.core.ui.resources.IResourceProvider +import com.metacto.core.ui.resources.Res +import com.metacto.core.ui.resources.action_done +import com.metacto.core.ui.resources.cancel import kotlinx.cinterop.BetaInteropApi import kotlinx.cinterop.ExperimentalForeignApi import kotlinx.cinterop.ObjCAction diff --git a/coreapp/src/iosMain/kotlin/com/metacto/core/presentation/options/OptionsSheet.kt b/ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/components/options/OptionsSheet.kt similarity index 58% rename from coreapp/src/iosMain/kotlin/com/metacto/core/presentation/options/OptionsSheet.kt rename to ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/components/options/OptionsSheet.kt index deed0cae..e1bb6735 100644 --- a/coreapp/src/iosMain/kotlin/com/metacto/core/presentation/options/OptionsSheet.kt +++ b/ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/components/options/OptionsSheet.kt @@ -1,15 +1,15 @@ -package com.metacto.core.presentation.options +package com.metacto.core.ui.components.options import androidx.compose.runtime.Composable -import com.metacto.core.presentation.base.BaseSheet -import com.metacto.core.presentation.base.getViewModel -import com.metacto.core.presentation.options.components.OptionsContent -import com.metacto.core.presentation.options.models.OptionUIModel -import com.metacto.core.presentation.options.OptionsContract.Event +import com.metacto.core.ui.base.CoreSheet +import com.metacto.core.ui.base.getViewModel +import com.metacto.core.ui.components.options.OptionsContract.Event +import com.metacto.core.ui.components.options.components.OptionsContent +import com.metacto.core.ui.components.options.models.OptionUIModel actual class OptionsSheet actual constructor( actual val options: List -) : BaseSheet() { +) : CoreSheet() { private val viewModel = getViewModel() diff --git a/ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/components/pickers/IosNativeDatePicker.kt b/ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/components/pickers/IosNativeDatePicker.kt new file mode 100644 index 00000000..d575b2c4 --- /dev/null +++ b/ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/components/pickers/IosNativeDatePicker.kt @@ -0,0 +1,313 @@ +@file:OptIn(ExperimentalForeignApi::class, BetaInteropApi::class) + +package com.metacto.core.ui.components.pickers + +import kotlinx.cinterop.BetaInteropApi +import kotlinx.cinterop.ExperimentalForeignApi +import kotlinx.cinterop.ObjCAction +import kotlinx.cinterop.readValue +import kotlinx.datetime.LocalDate +import kotlinx.datetime.LocalDateTime +import kotlinx.datetime.LocalTime +import platform.CoreGraphics.CGRectZero +import platform.Foundation.NSCalendar +import platform.Foundation.NSCalendarUnitDay +import platform.Foundation.NSCalendarUnitHour +import platform.Foundation.NSCalendarUnitMinute +import platform.Foundation.NSCalendarUnitMonth +import platform.Foundation.NSCalendarUnitSecond +import platform.Foundation.NSCalendarUnitYear +import platform.Foundation.NSDate +import platform.Foundation.NSDateComponents +import platform.Foundation.NSLocale +import platform.Foundation.NSSelectorFromString +import platform.Foundation.NSTimeZone +import platform.Foundation.defaultTimeZone +import platform.Foundation.setValue +import platform.UIKit.UIColor +import platform.UIKit.UIControlEventValueChanged +import platform.UIKit.UIDatePicker +import platform.UIKit.UIDatePickerMode +import platform.UIKit.UIDatePickerStyle +import platform.UIKit.UIUserInterfaceStyle +import platform.UIKit.UIView +import platform.UIKit.labelColor +import platform.UIKit.systemBackgroundColor + +/** + * Date picker mode wrapper for better Kotlin DSL + */ +enum class DatePickerDisplayMode { + DATE_ONLY, + TIME_ONLY, + DATE_AND_TIME, + COUNTDOWN_TIMER; + + fun toUIDatePickerMode(): UIDatePickerMode = when (this) { + DATE_ONLY -> UIDatePickerMode.UIDatePickerModeDate + TIME_ONLY -> UIDatePickerMode.UIDatePickerModeTime + DATE_AND_TIME -> UIDatePickerMode.UIDatePickerModeDateAndTime + COUNTDOWN_TIMER -> UIDatePickerMode.UIDatePickerModeCountDownTimer + } +} + +/** + * Date picker style wrapper + */ +enum class DatePickerUIStyle { + AUTOMATIC, + WHEELS, + COMPACT, + INLINE; + + fun toUIDatePickerStyle(): UIDatePickerStyle = when (this) { + AUTOMATIC -> UIDatePickerStyle.UIDatePickerStyleAutomatic + WHEELS -> UIDatePickerStyle.UIDatePickerStyleWheels + COMPACT -> UIDatePickerStyle.UIDatePickerStyleCompact + INLINE -> UIDatePickerStyle.UIDatePickerStyleInline + } +} + +/** + * Customization options for NativeDatePicker + */ +data class DatePickerStyle( + // Colors + val backgroundColor: UIColor = UIColor.systemBackgroundColor, + val textColor: UIColor = UIColor.labelColor, + val tintColor: UIColor? = null, + + // Style + val pickerStyle: DatePickerUIStyle = DatePickerUIStyle.WHEELS, + val pickerMode: DatePickerDisplayMode = DatePickerDisplayMode.DATE_ONLY, + + // Locale and timezone + val locale: NSLocale? = null, // null = US English (en_US) + val timeZone: NSTimeZone? = null, // null = system default + val calendar: NSCalendar? = null, // null = system default + + // Interface style (light/dark mode) + val interfaceStyle: UIUserInterfaceStyle = UIUserInterfaceStyle.UIUserInterfaceStyleUnspecified, + + // Layout + val cornerRadius: Double = 0.0, + val borderWidth: Double = 0.0, + val borderColor: UIColor? = null, + + // Constraints + val minDate: LocalDate? = null, + val maxDate: LocalDate? = null, + + // Animation + val animateChanges: Boolean = true, + + // Minute interval (for time-based pickers, 1-30) + val minuteInterval: Long = 1 +) + +/** + * Callback interface for date picker events + */ +interface DatePickerCallback { + fun onDateChanged(date: LocalDate) + fun onTimeChanged(time: LocalTime) {} + fun onDateTimeChanged(dateTime: LocalDateTime) {} +} + +/** + * Native iOS date picker implementation with enhanced customization + */ +class NativeDatePicker( + private val initialDate: LocalDate = LocalDate(2024, 1, 1), + private val style: DatePickerStyle = DatePickerStyle(), + private val callback: DatePickerCallback +) : UIView(frame = CGRectZero.readValue()) { + + // Alternative constructor for simple date-only callback + constructor( + initialDate: LocalDate = LocalDate(2024, 1, 1), + style: DatePickerStyle = DatePickerStyle(), + onDateChanged: (LocalDate) -> Unit + ) : this( + initialDate = initialDate, + style = style, + callback = object : DatePickerCallback { + override fun onDateChanged(date: LocalDate) = onDateChanged(date) + } + ) + + private val datePicker by lazy { + UIDatePicker().apply { + translatesAutoresizingMaskIntoConstraints = false + configurePickerStyle() + configurePickerDates() + configurePickerAppearance() + addDateChangeListener() + } + } + + init { + setupDatePickerView() + applyContainerStyling() + } + + private fun setupDatePickerView() { + backgroundColor = style.backgroundColor + addSubview(datePicker) + + // Setup constraints + datePicker.let { + it.topAnchor.constraintEqualToAnchor(topAnchor).active = true + it.leftAnchor.constraintEqualToAnchor(leftAnchor).active = true + it.rightAnchor.constraintEqualToAnchor(rightAnchor).active = true + it.bottomAnchor.constraintEqualToAnchor(bottomAnchor).active = true + } + } + + private fun UIDatePicker.configurePickerStyle() { + // Set picker style and mode + preferredDatePickerStyle = style.pickerStyle.toUIDatePickerStyle() + datePickerMode = style.pickerMode.toUIDatePickerMode() + + // Set locale, timezone, and calendar (use US locale as default) + locale = style.locale ?: NSLocale("en_US") + timeZone = style.timeZone ?: NSTimeZone.defaultTimeZone + calendar = style.calendar ?: NSCalendar.currentCalendar + + // Set minute interval for time pickers (1-30) + minuteInterval = style.minuteInterval.coerceIn(1, 30) + } + + private fun UIDatePicker.configurePickerDates() { + val calendar = this.calendar ?: NSCalendar.currentCalendar + + // Set initial date + date = initialDate.toNSDate(calendar) + + // Set min/max dates if provided + style.minDate?.let { + minimumDate = it.toNSDate(calendar) + } + + style.maxDate?.let { + maximumDate = it.toNSDate(calendar) + } + } + + private fun UIDatePicker.configurePickerAppearance() { + // Set background color + backgroundColor = style.backgroundColor + + // Force text color for all labels in the picker + setValue(style.textColor, forKey = "textColor") + + // Set tint color (affects selected components and text color) + style.tintColor?.let { + tintColor = it + } + + // Set interface style (light/dark mode) + if (style.interfaceStyle != UIUserInterfaceStyle.UIUserInterfaceStyleUnspecified) { + overrideUserInterfaceStyle = style.interfaceStyle + } + } + + private fun applyContainerStyling() { + // Apply corner radius + if (style.cornerRadius > 0.0) { + layer.cornerRadius = style.cornerRadius + clipsToBounds = true + } + + // Apply border + if (style.borderWidth > 0.0) { + layer.borderWidth = style.borderWidth + style.borderColor?.let { + layer.borderColor = it.CGColor + } + } + } + + private fun UIDatePicker.addDateChangeListener() { + addTarget( + target = this@NativeDatePicker, + action = NSSelectorFromString("datePickerValueChanged"), + forControlEvents = UIControlEventValueChanged + ) + } + + @ObjCAction + fun datePickerValueChanged() { + val calendar = datePicker.calendar ?: NSCalendar.currentCalendar + + when (style.pickerMode) { + DatePickerDisplayMode.DATE_ONLY -> { + val date = datePicker.date.toLocalDate(calendar) + callback.onDateChanged(date) + } + DatePickerDisplayMode.TIME_ONLY -> { + val time = datePicker.date.toLocalTime(calendar) + callback.onTimeChanged(time) + } + DatePickerDisplayMode.DATE_AND_TIME -> { + val dateTime = datePicker.date.toLocalDateTime(calendar) + callback.onDateTimeChanged(dateTime) + } + DatePickerDisplayMode.COUNTDOWN_TIMER -> { + // For countdown timer, countDownDuration is in seconds + // You can add a specific callback for this if needed + } + } + } +} + +// Extension functions for date/time conversion + +private fun LocalDate.toNSDate(calendar: NSCalendar): NSDate { + val components = NSDateComponents().apply { + year = this@toNSDate.year.toLong() + month = this@toNSDate.monthNumber.toLong() + day = this@toNSDate.dayOfMonth.toLong() + } + return calendar.dateFromComponents(components) ?: NSDate() +} + +private fun NSDate.toLocalDate(calendar: NSCalendar): LocalDate { + val components = calendar.components( + NSCalendarUnitYear or NSCalendarUnitMonth or NSCalendarUnitDay, + this + ) + return LocalDate( + year = components.year.toInt(), + monthNumber = components.month.toInt(), + dayOfMonth = components.day.toInt() + ) +} + +private fun NSDate.toLocalTime(calendar: NSCalendar): LocalTime { + val components = calendar.components( + NSCalendarUnitHour or NSCalendarUnitMinute or NSCalendarUnitSecond, + this + ) + return LocalTime( + hour = components.hour.toInt(), + minute = components.minute.toInt(), + second = components.second.toInt() + ) +} + +private fun NSDate.toLocalDateTime(calendar: NSCalendar): LocalDateTime { + val components = calendar.components( + NSCalendarUnitYear or NSCalendarUnitMonth or NSCalendarUnitDay or + NSCalendarUnitHour or NSCalendarUnitMinute or NSCalendarUnitSecond, + this + ) + return LocalDateTime( + year = components.year.toInt(), + monthNumber = components.month.toInt(), + dayOfMonth = components.day.toInt(), + hour = components.hour.toInt(), + minute = components.minute.toInt(), + second = components.second.toInt() + ) +} diff --git a/ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/components/pickers/NativeDatePicker.kt b/ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/components/pickers/NativeDatePicker.kt new file mode 100644 index 00000000..225d6a1f --- /dev/null +++ b/ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/components/pickers/NativeDatePicker.kt @@ -0,0 +1,65 @@ +package com.metacto.core.ui.components.pickers + +import androidx.compose.foundation.layout.size +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.ExperimentalComposeUiApi +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.unit.DpSize +import androidx.compose.ui.viewinterop.UIKitInteropInteractionMode +import androidx.compose.ui.viewinterop.UIKitInteropProperties +import androidx.compose.ui.viewinterop.UIKitView +import kotlinx.datetime.LocalDate +import platform.UIKit.UIColor +import platform.UIKit.UIUserInterfaceStyle +import platform.UIKit.systemBackgroundColor + +@OptIn(ExperimentalComposeUiApi::class) +@Composable +actual fun NativeDatePicker( + onSnappedDate: (LocalDate) -> Unit, + minDate: LocalDate, + maxDate: LocalDate, + startDate: LocalDate, + size: DpSize, + modifier: Modifier, + backgroundColor: Color +) { + val backgroundUiColor = remember(backgroundColor) { + if (backgroundColor == Color.Transparent) { + UIColor.systemBackgroundColor + } else { + UIColor( + red = backgroundColor.red.toDouble(), + green = backgroundColor.green.toDouble(), + blue = backgroundColor.blue.toDouble(), + alpha = backgroundColor.alpha.toDouble() + ) + } + } + + val view = remember(startDate, minDate, maxDate, backgroundUiColor) { + NativeDatePicker( + initialDate = startDate, + style = DatePickerStyle( + backgroundColor = backgroundUiColor, + textColor = UIColor.blackColor, + pickerStyle = DatePickerUIStyle.WHEELS, + pickerMode = DatePickerDisplayMode.DATE_ONLY, + interfaceStyle = UIUserInterfaceStyle.UIUserInterfaceStyleUnspecified, + minDate = minDate, + maxDate = maxDate + ), + onDateChanged = onSnappedDate + ) + } + + UIKitView( + factory = { view }, + properties = UIKitInteropProperties( + interactionMode = UIKitInteropInteractionMode.NonCooperative + ), + modifier = modifier.size(size) + ) +} diff --git a/ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/di/Di.ios.kt b/ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/di/Di.ios.kt new file mode 100644 index 00000000..9c80ccea --- /dev/null +++ b/ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/di/Di.ios.kt @@ -0,0 +1,41 @@ +package com.metacto.core.ui.di + +import coil3.PlatformContext +import com.metacto.core.ui.components.itemPicker.NativeItemPicker +import com.metacto.core.ui.imagePreloader.IPreloader +import com.metacto.core.ui.imagePreloader.Preloader +import com.metacto.core.ui.launchers.IIntentLauncher +import com.metacto.core.ui.launchers.IntentLauncher +import com.metacto.core.ui.media.IMediaManager +import com.metacto.core.ui.media.MediaManager +import com.metacto.core.ui.permissions.IPermissionManager +import com.metacto.core.ui.permissions.PermissionManager +import org.koin.dsl.module + +internal actual fun platformModule() = module { + // Add iOS specific dependencies here + + single { + PermissionManager( + delegateFactory = get() + ) + } + + single { + Preloader( + context = PlatformContext.INSTANCE + ) + } + + single { + IntentLauncher() + } + + single { + MediaManager() + } + + single { + NativeItemPicker(get()) + } +} \ No newline at end of file diff --git a/ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/di/KoinExtensions.ios.kt b/ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/di/KoinExtensions.ios.kt new file mode 100644 index 00000000..20095e5f --- /dev/null +++ b/ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/di/KoinExtensions.ios.kt @@ -0,0 +1,14 @@ +package com.metacto.core.ui.di + +import com.metacto.core.ui.base.CommonViewModel +import org.koin.core.definition.Definition +import org.koin.core.definition.KoinDefinition +import org.koin.core.module.Module +import org.koin.core.qualifier.Qualifier + +actual inline fun Module.commonViewModel( + qualifier: Qualifier?, + noinline definition: Definition +): KoinDefinition { + return factory(qualifier, definition) +} \ No newline at end of file diff --git a/coreapp/src/iosMain/kotlin/com/metacto/core/utils/extensions/ComposeExtensions.ios.kt b/ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/extensions/ComposeExtensions.ios.kt similarity index 91% rename from coreapp/src/iosMain/kotlin/com/metacto/core/utils/extensions/ComposeExtensions.ios.kt rename to ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/extensions/ComposeExtensions.ios.kt index 2fabc5e6..198f66a5 100644 --- a/coreapp/src/iosMain/kotlin/com/metacto/core/utils/extensions/ComposeExtensions.ios.kt +++ b/ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/extensions/ComposeExtensions.ios.kt @@ -1,6 +1,6 @@ @file:OptIn(ExperimentalForeignApi::class, ExperimentalForeignApi::class) -package com.metacto.core.utils.extensions +package com.metacto.core.ui.extensions import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect @@ -15,8 +15,6 @@ import androidx.compose.ui.unit.dp import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleEventObserver import androidx.lifecycle.compose.LocalLifecycleOwner -import io.michaelrocks.libphonenumber.kotlin.MetadataLoader -import io.michaelrocks.libphonenumber.kotlin.metadata.init.ComposeResourceMetadataLoader import kotlinx.cinterop.ExperimentalForeignApi import kotlinx.cinterop.useContents import org.jetbrains.skia.Bitmap @@ -26,15 +24,10 @@ import platform.UIKit.UIApplication import platform.UIKit.UIColor import platform.UIKit.UINavigationBar -@Composable -actual fun defaultMetadataLoader(): MetadataLoader { - return ComposeResourceMetadataLoader() -} - @Composable actual fun openUrlInBrowser(url: String) { try { - UIApplication.sharedApplication.openURL(NSURL(string = url.getValidUrl())) + UIApplication.sharedApplication.openURL(NSURL(string = url)) } catch (_: Throwable) { } } @@ -42,7 +35,7 @@ actual fun openUrlInBrowser(url: String) { @Composable actual fun getNotchHeight(): Dp { val window = UIApplication.sharedApplication.keyWindow - val topPadding = window?.safeAreaInsets?.useContents { top }.orZero() + val topPadding = window?.safeAreaInsets?.useContents { top } ?: 0.0 val hasNotch = topPadding > 20 val updatedPadding = if (hasNotch) topPadding.times(0.9) else topPadding @@ -52,7 +45,7 @@ actual fun getNotchHeight(): Dp { @Composable actual fun getBottomHandleHeight(): Dp { val window = UIApplication.sharedApplication.keyWindow - val bottomPadding = window?.safeAreaInsets?.useContents { bottom }.orZero() + val bottomPadding = window?.safeAreaInsets?.useContents { bottom } ?: 0.0 return bottomPadding.times(0.5).dp } diff --git a/coreapp/src/iosMain/kotlin/com/metacto/core/utils/delegates/EventEditDelegate.kt b/ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/launchers/EventEditDelegate.kt similarity index 91% rename from coreapp/src/iosMain/kotlin/com/metacto/core/utils/delegates/EventEditDelegate.kt rename to ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/launchers/EventEditDelegate.kt index 72bd54f4..4bacc36c 100644 --- a/coreapp/src/iosMain/kotlin/com/metacto/core/utils/delegates/EventEditDelegate.kt +++ b/ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/launchers/EventEditDelegate.kt @@ -1,4 +1,4 @@ -package com.metacto.core.utils.delegates +package com.metacto.core.ui.launchers import platform.EventKitUI.EKEventEditViewAction import platform.EventKitUI.EKEventEditViewController diff --git a/coreapp/src/iosMain/kotlin/com/metacto/core/utils/launchers/IntentLauncher.kt b/ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/launchers/IntentLauncher.kt similarity index 95% rename from coreapp/src/iosMain/kotlin/com/metacto/core/utils/launchers/IntentLauncher.kt rename to ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/launchers/IntentLauncher.kt index 2ce5801e..1bab7d9e 100644 --- a/coreapp/src/iosMain/kotlin/com/metacto/core/utils/launchers/IntentLauncher.kt +++ b/ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/launchers/IntentLauncher.kt @@ -1,9 +1,8 @@ -package com.metacto.core.utils.launchers +package com.metacto.core.ui.launchers -import com.metacto.core.utils.date.toNSDateComponent -import com.metacto.core.utils.delegates.EventEditDelegate -import com.metacto.core.utils.extensions.openAppSettings -import com.metacto.core.utils.extensions.runOnMainThread +import com.metacto.core.date.toNSDateComponent +import com.metacto.core.extensions.openAppSettings +import com.metacto.core.extensions.runOnMainThread import kotlinx.cinterop.ExperimentalForeignApi import kotlinx.cinterop.useContents import kotlinx.coroutines.Dispatchers @@ -79,8 +78,11 @@ class IntentLauncher : IIntentLauncher { openUrl(url) } - override fun launchBrowser(url: String) = runOnMainThread { - openUrl(url) + override fun launchBrowser(url: String, onError: (() -> Unit)?) = runOnMainThread { + val success = openUrl(url) + if (!success) { + onError?.invoke() + } } override fun launchAppSettings() { diff --git a/coreapp/src/iosMain/kotlin/com/metacto/core/utils/media/MediaManager.kt b/ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/media/MediaManager.kt similarity index 71% rename from coreapp/src/iosMain/kotlin/com/metacto/core/utils/media/MediaManager.kt rename to ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/media/MediaManager.kt index 700c4cca..646b6dc9 100644 --- a/coreapp/src/iosMain/kotlin/com/metacto/core/utils/media/MediaManager.kt +++ b/ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/media/MediaManager.kt @@ -1,7 +1,6 @@ -package com.metacto.core.utils.media +package com.metacto.core.ui.media -import com.metacto.core.utils.extensions.rotate -import com.metacto.core.utils.extensions.toByteArray +import com.metacto.core.extensions.toByteArray import kotlinx.cinterop.ExperimentalForeignApi import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.IO @@ -21,16 +20,22 @@ class MediaManager : IMediaManager { @OptIn(ExperimentalForeignApi::class) private fun getVideoFrame(videoPath: String, timeInSeconds: Long): ByteArray? { - val url = NSURL.fileURLWithPath(videoPath) + val url = if (videoPath.startsWith("http")) { + NSURL.URLWithString(videoPath) + } else { + NSURL.fileURLWithPath(videoPath) + } ?: return null + val asset = AVAsset.assetWithURL(url) val imageGenerator = AVAssetImageGenerator(asset) + imageGenerator.appliesPreferredTrackTransform = true val time = CMTimeMake(value = timeInSeconds, timescale = 1) return try { val cgImage = imageGenerator.copyCGImageAtTime(time, actualTime = null, error = null) - UIImage(cgImage).rotate(90.0).toByteArray() - } catch (e: Exception) { + cgImage?.let { UIImage(it).toByteArray() } + } catch (e: Throwable) { e.printStackTrace() null } diff --git a/coreapp/src/iosMain/kotlin/com/metacto/core/permissions/BindEffect.kt b/ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/permissions/BindEffect.kt similarity index 79% rename from coreapp/src/iosMain/kotlin/com/metacto/core/permissions/BindEffect.kt rename to ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/permissions/BindEffect.kt index 31849f92..78a1f473 100644 --- a/coreapp/src/iosMain/kotlin/com/metacto/core/permissions/BindEffect.kt +++ b/ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/permissions/BindEffect.kt @@ -1,4 +1,4 @@ -package com.metacto.core.permissions +package com.metacto.core.ui.permissions import androidx.compose.runtime.Composable diff --git a/coreapp/src/iosMain/kotlin/com/metacto/core/permissions/IPermissionManager.kt b/ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/permissions/IPermissionManager.kt similarity index 67% rename from coreapp/src/iosMain/kotlin/com/metacto/core/permissions/IPermissionManager.kt rename to ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/permissions/IPermissionManager.kt index ba767cdf..3a84bdfc 100644 --- a/coreapp/src/iosMain/kotlin/com/metacto/core/permissions/IPermissionManager.kt +++ b/ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/permissions/IPermissionManager.kt @@ -1,7 +1,7 @@ -package com.metacto.core.permissions +package com.metacto.core.ui.permissions -import com.metacto.core.permissions.enums.Permission -import com.metacto.core.permissions.enums.PermissionState +import com.metacto.core.ui.permissions.enums.Permission +import com.metacto.core.ui.permissions.enums.PermissionState actual interface IPermissionManager { actual suspend fun requestPermission( diff --git a/coreapp/src/iosMain/kotlin/com/metacto/core/permissions/PermissionManager.kt b/ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/permissions/PermissionManager.kt similarity index 76% rename from coreapp/src/iosMain/kotlin/com/metacto/core/permissions/PermissionManager.kt rename to ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/permissions/PermissionManager.kt index 17547bfb..f4263b64 100644 --- a/coreapp/src/iosMain/kotlin/com/metacto/core/permissions/PermissionManager.kt +++ b/ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/permissions/PermissionManager.kt @@ -1,11 +1,11 @@ -package com.metacto.core.permissions - -import com.metacto.core.permissions.enums.Permission -import com.metacto.core.permissions.enums.PermissionState -import com.metacto.core.permissions.exceptions.DeniedAlwaysException -import com.metacto.core.permissions.helpers.IPermissionDelegateFactory -import com.metacto.core.permissions.helpers.PermissionDelegate -import com.metacto.core.utils.extensions.openAppSettings +package com.metacto.core.ui.permissions + +import com.metacto.core.extensions.openAppSettings +import com.metacto.core.ui.permissions.enums.Permission +import com.metacto.core.ui.permissions.enums.PermissionState +import com.metacto.core.ui.permissions.exceptions.DeniedAlwaysException +import com.metacto.core.ui.permissions.helpers.IPermissionDelegateFactory +import com.metacto.core.ui.permissions.helpers.PermissionDelegate class PermissionManager( private val delegateFactory: IPermissionDelegateFactory diff --git a/coreapp/src/iosMain/kotlin/com/metacto/core/permissions/helpers/AlwaysGrantedPermissionDelegate.kt b/ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/permissions/helpers/AlwaysGrantedPermissionDelegate.kt similarity index 63% rename from coreapp/src/iosMain/kotlin/com/metacto/core/permissions/helpers/AlwaysGrantedPermissionDelegate.kt rename to ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/permissions/helpers/AlwaysGrantedPermissionDelegate.kt index 4f102d11..8eca843f 100644 --- a/coreapp/src/iosMain/kotlin/com/metacto/core/permissions/helpers/AlwaysGrantedPermissionDelegate.kt +++ b/ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/permissions/helpers/AlwaysGrantedPermissionDelegate.kt @@ -1,6 +1,6 @@ -package com.metacto.core.permissions.helpers +package com.metacto.core.ui.permissions.helpers -import com.metacto.core.permissions.enums.PermissionState +import com.metacto.core.ui.permissions.enums.PermissionState class AlwaysGrantedPermissionDelegate : PermissionDelegate { override suspend fun providePermission() = Unit diff --git a/coreapp/src/iosMain/kotlin/com/metacto/core/permissions/helpers/IPermissionDelegateFactory.kt b/ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/permissions/helpers/IPermissionDelegateFactory.kt similarity index 50% rename from coreapp/src/iosMain/kotlin/com/metacto/core/permissions/helpers/IPermissionDelegateFactory.kt rename to ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/permissions/helpers/IPermissionDelegateFactory.kt index dc5712b8..69345243 100644 --- a/coreapp/src/iosMain/kotlin/com/metacto/core/permissions/helpers/IPermissionDelegateFactory.kt +++ b/ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/permissions/helpers/IPermissionDelegateFactory.kt @@ -1,6 +1,6 @@ -package com.metacto.core.permissions.helpers +package com.metacto.core.ui.permissions.helpers -import com.metacto.core.permissions.enums.Permission +import com.metacto.core.ui.permissions.enums.Permission interface IPermissionDelegateFactory { fun getDelegate(permission: Permission): PermissionDelegate diff --git a/coreapp/src/iosMain/kotlin/com/metacto/core/permissions/helpers/PermissionDelegate.kt b/ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/permissions/helpers/PermissionDelegate.kt similarity index 53% rename from coreapp/src/iosMain/kotlin/com/metacto/core/permissions/helpers/PermissionDelegate.kt rename to ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/permissions/helpers/PermissionDelegate.kt index c3851a31..754d9b6f 100644 --- a/coreapp/src/iosMain/kotlin/com/metacto/core/permissions/helpers/PermissionDelegate.kt +++ b/ui/core-ui/src/iosMain/kotlin/com/metacto/core/ui/permissions/helpers/PermissionDelegate.kt @@ -1,6 +1,6 @@ -package com.metacto.core.permissions.helpers +package com.metacto.core.ui.permissions.helpers -import com.metacto.core.permissions.enums.PermissionState +import com.metacto.core.ui.permissions.enums.PermissionState interface PermissionDelegate { suspend fun providePermission() diff --git a/ui/image-picker/build.gradle.kts b/ui/image-picker/build.gradle.kts new file mode 100644 index 00000000..61b613ee --- /dev/null +++ b/ui/image-picker/build.gradle.kts @@ -0,0 +1,138 @@ +import com.android.build.gradle.internal.cxx.configure.gradleLocalProperties +import org.jetbrains.kotlin.gradle.plugin.mpp.apple.XCFramework +import org.jetbrains.kotlin.konan.properties.Properties +import java.io.FileInputStream +import java.io.FileOutputStream + +plugins { + alias(libs.plugins.multiplatform) + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.parcelize) + alias(libs.plugins.compose) + alias(libs.plugins.kotlin.compose) + alias(libs.plugins.maven.publish) + alias(libs.plugins.signing) +} + +private val versionProperties = Properties().apply { + load(FileInputStream(File(rootProject.rootDir, Configs.VERSIONS_PROPERTIES))) +} + +private val currentVersion = versionProperties.getProperty(Configs.PUBLISH_VERSION) as String +private val libName = "image-picker" +private val libNamespace = "com.metacto.core.ui.imagepicker" + +version = currentVersion +group = Configs.GROUP_ID + +kotlin { + androidTarget { + compilerOptions { + freeCompilerArgs.addAll("-P", "plugin:org.jetbrains.kotlin.parcelize:additionalAnnotation=com.metacto.kmm.core.CommonParcelize") + } + compilations.all { + kotlinOptions { + jvmTarget = libs.versions.jvm.get() + } + } + publishLibraryVariants("debug", "release") + } + + val xcf = XCFramework() + listOf( + iosX64(), + iosArm64(), + iosSimulatorArm64() + ).forEach { + it.binaries.framework(libName) { + baseName = libName + xcf.add(this) + isStatic = true + } + } + + metadata { + compilations.matching { it.name == "iosMain" }.all { + compileTaskProvider.configure { enabled = false } + } + } + + sourceSets { + commonMain.dependencies { + // Core UI + implementation(project(":ui:core-ui")) + } + + androidMain.dependencies { + implementation(libs.imagepicker) + implementation(libs.imagecropper) + } + + iosMain.dependencies { + // IOS DEPENDENCIES + } + } + + task("testClasses") +} + +android { + namespace = libNamespace + compileSdk = libs.versions.compileSdk.get().toInt() + + sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml") + sourceSets["main"].res.srcDirs("src/androidMain/res") + sourceSets["main"].resources.srcDirs("src/commonMain/resources") + sourceSets["main"].res.srcDirs("src/androidMain/res", "src/commonMain/resources") + + defaultConfig { + minSdk = libs.versions.minSdk.get().toInt() + targetSdk = libs.versions.targetSdk.get().toInt() + consumerProguardFiles("consumer-rules.pro") + } + compileOptions { + sourceCompatibility = JavaVersion.toVersion(libs.versions.jvm.get()) + targetCompatibility = JavaVersion.toVersion(libs.versions.jvm.get()) + } +} + +compose.resources { + publicResClass = false + packageOfResClass = "$libNamespace.resources" + generateResClass = always +} + +publishing { + repositories { + val localProperties = gradleLocalProperties(rootDir, providers) + var publishUserRepo = localProperties.getProperty(Configs.PUBLISH_REPO_USER) + var publishTokenRepo = localProperties.getProperty(Configs.PUBLISH_REPO_TOKEN) + + if (publishUserRepo.isNullOrEmpty()) { + publishUserRepo = "" + localProperties.setProperty(Configs.PUBLISH_REPO_USER, publishUserRepo) + } + + if (publishTokenRepo.isNullOrEmpty()) { + publishTokenRepo = "" + localProperties.setProperty(Configs.PUBLISH_REPO_TOKEN, publishTokenRepo) + } + + if (publishUserRepo.isEmpty() || publishTokenRepo.isEmpty()) { + localProperties.store( + FileOutputStream(File(rootDir, Configs.LOCAL_PROPERTIES)), null + ) + } + + repositories { + maven(Configs.MAVEN_URL) { + name = Configs.PUBLISH_MAVEN_REPO_NAME + credentials { + username = publishUserRepo + password = publishTokenRepo + } + } + } + } +} + diff --git a/ui/image-picker/src/androidMain/AndroidManifest.xml b/ui/image-picker/src/androidMain/AndroidManifest.xml new file mode 100644 index 00000000..2337a7e2 --- /dev/null +++ b/ui/image-picker/src/androidMain/AndroidManifest.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/ui/image-picker/src/androidMain/kotlin/com/metacto/core/ui/imagepicker/Extensions.kt b/ui/image-picker/src/androidMain/kotlin/com/metacto/core/ui/imagepicker/Extensions.kt new file mode 100644 index 00000000..09dac13a --- /dev/null +++ b/ui/image-picker/src/androidMain/kotlin/com/metacto/core/ui/imagepicker/Extensions.kt @@ -0,0 +1,15 @@ +package com.metacto.core.ui.imagepicker + +import android.app.Activity +import android.net.Uri + +internal fun List.mimeTypes() = map { it.mimeType } + +internal fun Uri.getMediaType(activity: Activity): MediaType { + val mimeType = activity.contentResolver.getType(this) + return when { + mimeType?.startsWith("image/") == true -> MediaType.Image + mimeType?.startsWith("video/") == true -> MediaType.Video + else -> MediaType.Image + } +} \ No newline at end of file diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/presentation/components/imagePicker/ImagePicker.kt b/ui/image-picker/src/androidMain/kotlin/com/metacto/core/ui/imagepicker/MediaPicker.kt similarity index 53% rename from coreapp/src/androidMain/kotlin/com/metacto/core/presentation/components/imagePicker/ImagePicker.kt rename to ui/image-picker/src/androidMain/kotlin/com/metacto/core/ui/imagepicker/MediaPicker.kt index fb45de0c..ed5ed9a5 100644 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/presentation/components/imagePicker/ImagePicker.kt +++ b/ui/image-picker/src/androidMain/kotlin/com/metacto/core/ui/imagepicker/MediaPicker.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.imagePicker +package com.metacto.core.ui.imagepicker import android.annotation.SuppressLint import android.app.Activity @@ -8,29 +8,32 @@ import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.runtime.Composable +import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.remember import androidx.compose.ui.platform.LocalContext import com.canhub.cropper.CropImageContract import com.canhub.cropper.CropImageContractOptions import com.canhub.cropper.CropImageOptions import com.github.dhaval2404.imagepicker.ImagePicker as SdkImagePicker +import com.metacto.core.ui.extensions.normalizeImageOrientation -actual class ImagePicker( +actual class MediaPicker( private val activity: Activity, actual val enableCropping: Boolean, actual val aspectRatioX: Int?, - actual val aspectRatioY: Int? + actual val aspectRatioY: Int?, + actual val includeData: Boolean ) { - private var onImagePicked: ((ByteArray) -> Unit)? = null - + private var onMediaPicked: ((MediaInfo) -> Unit)? = null private var pickerLauncher: ActivityResultLauncher? = null private var cropperLauncher: ActivityResultLauncher? = null + private var currentSource: MediaInfoSource = MediaInfoSource.Gallery @SuppressLint("ComposableNaming") @Composable - actual fun registerPicker(onImagePicked: (ByteArray) -> Unit) { + actual fun registerPicker(onMediaPicked: (MediaInfo) -> Unit) { // Set onImagePicked - this.onImagePicked = onImagePicked + this.onMediaPicked = onMediaPicked // Create image picker launcher pickerLauncher = rememberLauncherForActivityResult( @@ -38,10 +41,13 @@ actual class ImagePicker( ) { result -> val uri = result.data?.data if (result.resultCode == Activity.RESULT_OK && uri != null) { - if (enableCropping) { + val mediaType = uri.getMediaType(activity) + val isVideo = mediaType == MediaType.Video + + if (enableCropping && !isVideo) { cropImage(uri) } else { - notifyImagePicked(uri) + notifyMediaPicked(uri) } } } @@ -53,21 +59,24 @@ actual class ImagePicker( ) { result -> val uri = result.uriContent if (result.isSuccessful && uri != null) { - notifyImagePicked(uri) + notifyMediaPicked(uri) } } } } - actual fun pickFromGallery() { + actual fun pickFromGallery(mediaTypes: List) { + currentSource = MediaInfoSource.Gallery SdkImagePicker.with(activity) .galleryOnly() + .galleryMimeTypes(mediaTypes.mimeTypes().toTypedArray()) .createIntent { intent -> pickerLauncher?.launch(intent) } } actual fun captureUsingCamera() { + currentSource = MediaInfoSource.Camera SdkImagePicker.with(activity) .cameraOnly() .createIntent { intent -> @@ -90,26 +99,66 @@ actual class ImagePicker( ) } - private fun notifyImagePicked(uri: Uri) { - activity.contentResolver.openInputStream(uri)?.use { - onImagePicked?.invoke(it.readBytes()) + private fun notifyMediaPicked(uri: Uri) { + val mediaType = uri.getMediaType(activity) + + if (includeData) { + // Load the media data into memory + // For images, normalize orientation to fix rotation issues from camera + val data = if (mediaType == MediaType.Image) { + uri.normalizeImageOrientation(activity) + } else { + activity.contentResolver.openInputStream(uri)?.use { it.readBytes() } + } + + data?.let { + val mediaInfo = MediaInfo( + data = it, + type = mediaType, + filePath = uri.toString(), + source = currentSource + ) + onMediaPicked?.invoke(mediaInfo) + } + } else { + // Return only the file path, no data + val mediaInfo = MediaInfo( + type = mediaType, + filePath = uri.toString(), + source = currentSource + ) + onMediaPicked?.invoke(mediaInfo) } } + + internal actual fun cleanup() { + // No cleanup needed for Android + } } @Composable -actual fun rememberImagePicker( +actual fun rememberMediaPicker( enableCropping: Boolean, aspectRatioX: Int?, - aspectRatioY: Int? -): ImagePicker { + aspectRatioY: Int?, + includeData: Boolean +): MediaPicker { val activity = LocalContext.current as Activity - return remember(activity) { - ImagePicker( + val mediaPicker = remember(activity) { + MediaPicker( activity = activity, enableCropping = enableCropping, aspectRatioX = aspectRatioX, - aspectRatioY = aspectRatioY + aspectRatioY = aspectRatioY, + includeData = includeData ) } + + DisposableEffect(mediaPicker) { + onDispose { + mediaPicker.cleanup() + } + } + + return mediaPicker } \ No newline at end of file diff --git a/ui/image-picker/src/androidMain/kotlin/com/metacto/core/ui/imagepicker/di/Di.android.kt b/ui/image-picker/src/androidMain/kotlin/com/metacto/core/ui/imagepicker/di/Di.android.kt new file mode 100644 index 00000000..ea7c21e8 --- /dev/null +++ b/ui/image-picker/src/androidMain/kotlin/com/metacto/core/ui/imagepicker/di/Di.android.kt @@ -0,0 +1,7 @@ +package com.metacto.core.ui.imagepicker.di + +import org.koin.dsl.module + +internal actual fun platformModule() = module { + // Add Android specific dependencies here +} \ No newline at end of file diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/presentation/imagePicker/ImagePickerSheet.kt b/ui/image-picker/src/androidMain/kotlin/com/metacto/core/ui/imagepicker/sheet/ImagePickerSheet.kt similarity index 65% rename from coreapp/src/androidMain/kotlin/com/metacto/core/presentation/imagePicker/ImagePickerSheet.kt rename to ui/image-picker/src/androidMain/kotlin/com/metacto/core/ui/imagepicker/sheet/ImagePickerSheet.kt index 5c6a2489..8454eec7 100644 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/presentation/imagePicker/ImagePickerSheet.kt +++ b/ui/image-picker/src/androidMain/kotlin/com/metacto/core/ui/imagepicker/sheet/ImagePickerSheet.kt @@ -1,15 +1,14 @@ -package com.metacto.core.presentation.imagePicker +package com.metacto.core.ui.imagepicker.sheet import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect -import com.metacto.core.presentation.base.BaseSheet -import com.metacto.core.presentation.base.SIDE_EFFECTS_KEY -import com.metacto.core.presentation.base.rememberViewModel -import com.metacto.core.presentation.components.imagePicker.rememberImagePicker -import com.metacto.core.presentation.imagePicker.ImagePickerContract.Effect -import com.metacto.core.presentation.imagePicker.ImagePickerContract.Event -import com.metacto.core.presentation.imagePicker.components.ImagePickerContent -import com.metacto.core.utils.extensions.consume +import com.metacto.core.ui.base.CoreSheet +import com.metacto.core.ui.base.rememberViewModel +import com.metacto.core.ui.extensions.consume +import com.metacto.core.ui.imagepicker.MediaType +import com.metacto.core.ui.imagepicker.sheet.ImagePickerContract.Effect +import com.metacto.core.ui.imagepicker.sheet.ImagePickerContract.Event +import com.metacto.core.ui.imagepicker.sheet.components.ImagePickerContent actual class ImagePickerSheet actual constructor( actual val allowGallery: Boolean, @@ -18,13 +17,14 @@ actual class ImagePickerSheet actual constructor( actual val enableCropping: Boolean, actual val aspectRatioX: Int?, actual val aspectRatioY: Int? -) : BaseSheet() { +) : CoreSheet() { @Composable actual override fun Content() { // Get main objects val viewModel = rememberViewModel() - val imagePicker = rememberImagePicker( + val imagePicker = com.metacto.core.ui.imagepicker.rememberMediaPicker( + includeData = true, enableCropping = enableCropping, aspectRatioX = aspectRatioX, aspectRatioY = aspectRatioY @@ -33,13 +33,13 @@ actual class ImagePickerSheet actual constructor( // Handle side effects viewModel.effect.consume { effect -> when (effect) { - Effect.PickImage -> imagePicker.pickFromGallery() + Effect.PickImage -> imagePicker.pickFromGallery(listOf(MediaType.Image)) Effect.CaptureImage -> imagePicker.captureUsingCamera() } } // Init view model - LaunchedEffect(SIDE_EFFECTS_KEY) { + LaunchedEffect(Unit) { viewModel.setEvent( Event.Init( allowGallery = allowGallery, @@ -51,7 +51,7 @@ actual class ImagePickerSheet actual constructor( // Register image picker imagePicker.registerPicker { - viewModel.setEvent(Event.PickImageResult(it)) + viewModel.setEvent(Event.PickMediaResult(it)) } // Render content diff --git a/coreapp/src/commonMain/composeResources/drawable/ic_camera.xml b/ui/image-picker/src/commonMain/composeResources/drawable/ic_camera.xml similarity index 100% rename from coreapp/src/commonMain/composeResources/drawable/ic_camera.xml rename to ui/image-picker/src/commonMain/composeResources/drawable/ic_camera.xml diff --git a/coreapp/src/commonMain/composeResources/drawable/ic_delete.xml b/ui/image-picker/src/commonMain/composeResources/drawable/ic_delete.xml similarity index 100% rename from coreapp/src/commonMain/composeResources/drawable/ic_delete.xml rename to ui/image-picker/src/commonMain/composeResources/drawable/ic_delete.xml diff --git a/coreapp/src/commonMain/composeResources/drawable/ic_photo_library.xml b/ui/image-picker/src/commonMain/composeResources/drawable/ic_photo_library.xml similarity index 100% rename from coreapp/src/commonMain/composeResources/drawable/ic_photo_library.xml rename to ui/image-picker/src/commonMain/composeResources/drawable/ic_photo_library.xml diff --git a/ui/image-picker/src/commonMain/composeResources/values-ar/strings.xml b/ui/image-picker/src/commonMain/composeResources/values-ar/strings.xml new file mode 100644 index 00000000..9fd50281 --- /dev/null +++ b/ui/image-picker/src/commonMain/composeResources/values-ar/strings.xml @@ -0,0 +1,5 @@ + + اختر من المعرض + التقاط صورة + إزالة الصورة الحالية + \ No newline at end of file diff --git a/ui/image-picker/src/commonMain/composeResources/values-de/strings.xml b/ui/image-picker/src/commonMain/composeResources/values-de/strings.xml new file mode 100644 index 00000000..f68bad78 --- /dev/null +++ b/ui/image-picker/src/commonMain/composeResources/values-de/strings.xml @@ -0,0 +1,5 @@ + + Aus der Bibliothek wählen + Foto machen + Aktuelles Foto entfernen + diff --git a/ui/image-picker/src/commonMain/composeResources/values-es/strings.xml b/ui/image-picker/src/commonMain/composeResources/values-es/strings.xml new file mode 100644 index 00000000..8829d7db --- /dev/null +++ b/ui/image-picker/src/commonMain/composeResources/values-es/strings.xml @@ -0,0 +1,5 @@ + + Elegir de la biblioteca + Tomar foto + Eliminar foto actual + diff --git a/ui/image-picker/src/commonMain/composeResources/values-fr/strings.xml b/ui/image-picker/src/commonMain/composeResources/values-fr/strings.xml new file mode 100644 index 00000000..b61a265c --- /dev/null +++ b/ui/image-picker/src/commonMain/composeResources/values-fr/strings.xml @@ -0,0 +1,5 @@ + + Choisir depuis la bibliothèque + Prendre une photo + Supprimer la photo actuelle + diff --git a/ui/image-picker/src/commonMain/composeResources/values-it/strings.xml b/ui/image-picker/src/commonMain/composeResources/values-it/strings.xml new file mode 100644 index 00000000..46c281ab --- /dev/null +++ b/ui/image-picker/src/commonMain/composeResources/values-it/strings.xml @@ -0,0 +1,5 @@ + + Scegli dalla libreria + Scatta foto + Rimuovi foto attuale + diff --git a/ui/image-picker/src/commonMain/composeResources/values-pt-rBR/strings.xml b/ui/image-picker/src/commonMain/composeResources/values-pt-rBR/strings.xml new file mode 100644 index 00000000..2613a058 --- /dev/null +++ b/ui/image-picker/src/commonMain/composeResources/values-pt-rBR/strings.xml @@ -0,0 +1,5 @@ + + Escolher da biblioteca + Tirar foto + Remover foto atual + diff --git a/ui/image-picker/src/commonMain/composeResources/values/strings.xml b/ui/image-picker/src/commonMain/composeResources/values/strings.xml new file mode 100644 index 00000000..c5402930 --- /dev/null +++ b/ui/image-picker/src/commonMain/composeResources/values/strings.xml @@ -0,0 +1,5 @@ + + Choose from library + Take photo + Remove current photo + \ No newline at end of file diff --git a/ui/image-picker/src/commonMain/kotlin/com/metacto/core/ui/imagepicker/MediaInfo.kt b/ui/image-picker/src/commonMain/kotlin/com/metacto/core/ui/imagepicker/MediaInfo.kt new file mode 100644 index 00000000..7f187077 --- /dev/null +++ b/ui/image-picker/src/commonMain/kotlin/com/metacto/core/ui/imagepicker/MediaInfo.kt @@ -0,0 +1,40 @@ +package com.metacto.core.ui.imagepicker + +data class MediaInfo( + val data: ByteArray? = null, + val type: MediaType, + val filePath: String, + val source: MediaInfoSource, +) { + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (other == null || this::class != other::class) return false + + other as MediaInfo + + if (!data.contentEquals(other.data)) return false + if (type != other.type) return false + if (filePath != other.filePath) return false + if (source != other.source) return false + + return true + } + + override fun hashCode(): Int { + var result = data.contentHashCode() + result = 31 * result + type.hashCode() + result = 31 * result + filePath.hashCode() + result = 31 * result + source.hashCode() + return result + } +} + +enum class MediaType(val mimeType: String) { + Image("image/*"), + Video("video/*"), +} + +enum class MediaInfoSource { + Gallery, + Camera +} \ No newline at end of file diff --git a/ui/image-picker/src/commonMain/kotlin/com/metacto/core/ui/imagepicker/MediaPicker.kt b/ui/image-picker/src/commonMain/kotlin/com/metacto/core/ui/imagepicker/MediaPicker.kt new file mode 100644 index 00000000..9293c0d2 --- /dev/null +++ b/ui/image-picker/src/commonMain/kotlin/com/metacto/core/ui/imagepicker/MediaPicker.kt @@ -0,0 +1,27 @@ +package com.metacto.core.ui.imagepicker + +import androidx.compose.runtime.Composable + +expect class MediaPicker { + val enableCropping: Boolean + val aspectRatioX: Int? + val aspectRatioY: Int? + val includeData: Boolean + + @Composable + fun registerPicker(onMediaPicked: (MediaInfo) -> Unit) + + fun pickFromGallery(mediaTypes: List) + + fun captureUsingCamera() + + internal fun cleanup() +} + +@Composable +expect fun rememberMediaPicker( + enableCropping: Boolean = false, + aspectRatioX: Int? = null, + aspectRatioY: Int? = null, + includeData: Boolean = true +): MediaPicker \ No newline at end of file diff --git a/ui/image-picker/src/commonMain/kotlin/com/metacto/core/ui/imagepicker/di/Di.kt b/ui/image-picker/src/commonMain/kotlin/com/metacto/core/ui/imagepicker/di/Di.kt new file mode 100644 index 00000000..b47357de --- /dev/null +++ b/ui/image-picker/src/commonMain/kotlin/com/metacto/core/ui/imagepicker/di/Di.kt @@ -0,0 +1,18 @@ +package com.metacto.core.ui.imagepicker.di + +import com.metacto.core.ui.di.commonViewModel +import com.metacto.core.ui.imagepicker.sheet.ImagePickerViewModel +import org.koin.core.module.Module +import org.koin.dsl.module + +fun imagePickerModule() = module { + // Common dependencies can be added here + + includes(platformModule()) + + commonViewModel { + ImagePickerViewModel() + } +} + +internal expect fun platformModule(): Module \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/imagePicker/ImagePickerContract.kt b/ui/image-picker/src/commonMain/kotlin/com/metacto/core/ui/imagepicker/sheet/ImagePickerContract.kt similarity index 73% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/imagePicker/ImagePickerContract.kt rename to ui/image-picker/src/commonMain/kotlin/com/metacto/core/ui/imagepicker/sheet/ImagePickerContract.kt index 918b3839..1cc4d7b0 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/imagePicker/ImagePickerContract.kt +++ b/ui/image-picker/src/commonMain/kotlin/com/metacto/core/ui/imagepicker/sheet/ImagePickerContract.kt @@ -1,8 +1,9 @@ -package com.metacto.core.presentation.imagePicker +package com.metacto.core.ui.imagepicker.sheet -import com.metacto.core.presentation.base.ViewEvent -import com.metacto.core.presentation.base.ViewSideEffect -import com.metacto.core.presentation.base.ViewState +import com.metacto.core.ui.base.ViewEvent +import com.metacto.core.ui.base.ViewSideEffect +import com.metacto.core.ui.base.ViewState +import com.metacto.core.ui.imagepicker.MediaInfo class ImagePickerContract { @@ -23,7 +24,7 @@ class ImagePickerContract { data object CloseClicked : Event() data object PickFromGalleryClicked : Event() data object CaptureUsingCameraClicked : Event() - data class PickImageResult(val bytes: ByteArray) : Event() + data class PickMediaResult(val media: MediaInfo) : Event() data object DeleteCurrentPhotoClicked : Event() } diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/imagePicker/ImagePickerSheet.kt b/ui/image-picker/src/commonMain/kotlin/com/metacto/core/ui/imagepicker/sheet/ImagePickerSheet.kt similarity index 78% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/imagePicker/ImagePickerSheet.kt rename to ui/image-picker/src/commonMain/kotlin/com/metacto/core/ui/imagepicker/sheet/ImagePickerSheet.kt index ee6178d6..024c6925 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/imagePicker/ImagePickerSheet.kt +++ b/ui/image-picker/src/commonMain/kotlin/com/metacto/core/ui/imagepicker/sheet/ImagePickerSheet.kt @@ -1,7 +1,7 @@ -package com.metacto.core.presentation.imagePicker +package com.metacto.core.ui.imagepicker.sheet import androidx.compose.runtime.Composable -import com.metacto.core.presentation.base.BaseSheet +import com.metacto.core.ui.base.CoreSheet expect class ImagePickerSheet( allowGallery: Boolean = true, @@ -10,7 +10,7 @@ expect class ImagePickerSheet( enableCropping: Boolean = false, aspectRatioX: Int? = null, aspectRatioY: Int? = null -) : BaseSheet { +) : CoreSheet { @Composable override fun Content() diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/imagePicker/ImagePickerViewModel.kt b/ui/image-picker/src/commonMain/kotlin/com/metacto/core/ui/imagepicker/sheet/ImagePickerViewModel.kt similarity index 71% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/imagePicker/ImagePickerViewModel.kt rename to ui/image-picker/src/commonMain/kotlin/com/metacto/core/ui/imagepicker/sheet/ImagePickerViewModel.kt index 3e07c845..5a62207d 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/imagePicker/ImagePickerViewModel.kt +++ b/ui/image-picker/src/commonMain/kotlin/com/metacto/core/ui/imagepicker/sheet/ImagePickerViewModel.kt @@ -1,10 +1,11 @@ -package com.metacto.core.presentation.imagePicker +package com.metacto.core.ui.imagepicker.sheet -import com.metacto.core.presentation.base.CoreViewModel -import com.metacto.core.presentation.imagePicker.ImagePickerContract.Effect -import com.metacto.core.presentation.imagePicker.ImagePickerContract.Event -import com.metacto.core.presentation.imagePicker.ImagePickerContract.State -import com.metacto.core.presentation.imagePicker.models.ImagePickerResult +import com.metacto.core.ui.base.CoreViewModel +import com.metacto.core.ui.imagepicker.MediaInfo +import com.metacto.core.ui.imagepicker.sheet.ImagePickerContract.Effect +import com.metacto.core.ui.imagepicker.sheet.ImagePickerContract.Event +import com.metacto.core.ui.imagepicker.sheet.ImagePickerContract.State +import com.metacto.core.ui.imagepicker.sheet.models.ImagePickerResult class ImagePickerViewModel : CoreViewModel() { @@ -21,7 +22,7 @@ class ImagePickerViewModel : CoreViewModel() { Event.CloseClicked -> navManager.goBack() Event.PickFromGalleryClicked -> handlePickFromGalleryClick() Event.CaptureUsingCameraClicked -> handleCaptureUsingCameraClick() - is Event.PickImageResult -> handlePickImageResult(event.bytes) + is Event.PickMediaResult -> handlePickMediaResult(event.media) Event.DeleteCurrentPhotoClicked -> handleDeleteCurrentPhotoClick() } @@ -54,10 +55,11 @@ class ImagePickerViewModel : CoreViewModel() { setEffect { Effect.CaptureImage } } - private fun handlePickImageResult(bytes: ByteArray) { + private fun handlePickMediaResult(media: MediaInfo) { + val mediaData = media.data ?: return navManager.goBackWithResult( source = ImagePickerSheet::class.simpleName, - result = ImagePickerResult.ImagePicked(bytes) + result = ImagePickerResult.ImagePicked(mediaData) ) } diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/imagePicker/components/ImagePickerContent.kt b/ui/image-picker/src/commonMain/kotlin/com/metacto/core/ui/imagepicker/sheet/components/ImagePickerContent.kt similarity index 66% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/imagePicker/components/ImagePickerContent.kt rename to ui/image-picker/src/commonMain/kotlin/com/metacto/core/ui/imagepicker/sheet/components/ImagePickerContent.kt index 186ae115..bd5ecff3 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/imagePicker/components/ImagePickerContent.kt +++ b/ui/image-picker/src/commonMain/kotlin/com/metacto/core/ui/imagepicker/sheet/components/ImagePickerContent.kt @@ -1,17 +1,23 @@ -package com.metacto.core.presentation.imagePicker.components +package com.metacto.core.ui.imagepicker.sheet.components import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Close import androidx.compose.runtime.Composable -import com.metacto.coreApp.resources.* -import com.metacto.core.presentation.components.bottomSheets.BottomSheetContainer -import com.metacto.core.presentation.components.options.OptionItem -import com.metacto.core.presentation.options.models.OptionUIModel -import com.metacto.core.presentation.imagePicker.ImagePickerContract.Event -import com.metacto.core.presentation.imagePicker.ImagePickerContract.State -import com.metacto.core.presentation.theme.CoreTheme -import com.metacto.core.utils.extensions.toHexString +import com.metacto.core.ui.components.bottomSheets.BottomSheetContainer +import com.metacto.core.ui.components.options.OptionItem +import com.metacto.core.ui.components.options.models.OptionUIModel +import com.metacto.core.ui.theme.CoreTheme +import com.metacto.core.ui.extensions.toHexString +import com.metacto.core.ui.imagepicker.resources.Res +import com.metacto.core.ui.imagepicker.resources.choose_from_library +import com.metacto.core.ui.imagepicker.resources.ic_camera +import com.metacto.core.ui.imagepicker.resources.ic_delete +import com.metacto.core.ui.imagepicker.resources.ic_photo_library +import com.metacto.core.ui.imagepicker.resources.remove_current_photo +import com.metacto.core.ui.imagepicker.resources.take_photo import org.jetbrains.compose.resources.stringResource +import com.metacto.core.ui.imagepicker.sheet.ImagePickerContract.State +import com.metacto.core.ui.imagepicker.sheet.ImagePickerContract.Event @Composable fun ImagePickerContent( diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/imagePicker/models/ImagePickerResult.kt b/ui/image-picker/src/commonMain/kotlin/com/metacto/core/ui/imagepicker/sheet/models/ImagePickerResult.kt similarity index 66% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/imagePicker/models/ImagePickerResult.kt rename to ui/image-picker/src/commonMain/kotlin/com/metacto/core/ui/imagepicker/sheet/models/ImagePickerResult.kt index 6299c240..9a18cc2c 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/imagePicker/models/ImagePickerResult.kt +++ b/ui/image-picker/src/commonMain/kotlin/com/metacto/core/ui/imagepicker/sheet/models/ImagePickerResult.kt @@ -1,7 +1,7 @@ -package com.metacto.core.presentation.imagePicker.models +package com.metacto.core.ui.imagepicker.sheet.models -import com.metacto.core.utils.CommonParcelable -import com.metacto.core.utils.CommonParcelize +import com.metacto.kmm.core.CommonParcelable +import com.metacto.kmm.core.CommonParcelize @CommonParcelize sealed class ImagePickerResult : CommonParcelable { diff --git a/ui/image-picker/src/iosMain/kotlin/com/metacto/core/ui/imagepicker/Extensions.kt b/ui/image-picker/src/iosMain/kotlin/com/metacto/core/ui/imagepicker/Extensions.kt new file mode 100644 index 00000000..39866ea9 --- /dev/null +++ b/ui/image-picker/src/iosMain/kotlin/com/metacto/core/ui/imagepicker/Extensions.kt @@ -0,0 +1,123 @@ +package com.metacto.core.ui.imagepicker + +import kotlinx.cinterop.ExperimentalForeignApi +import kotlinx.cinterop.addressOf +import kotlinx.cinterop.usePinned +import kotlinx.datetime.Clock +import platform.Foundation.NSData +import platform.Foundation.NSFileManager +import platform.Foundation.NSTemporaryDirectory +import platform.Foundation.NSURL +import platform.Foundation.dataWithContentsOfURL +import platform.Foundation.dataWithBytes +import platform.Foundation.getBytes +import platform.Foundation.writeToFile +import platform.UIKit.UIImage +import platform.UIKit.UIImageJPEGRepresentation + +private object MediaTypeConstants { + const val PUBLIC_IMAGE = "public.image" + const val PUBLIC_MOVIE = "public.movie" + const val PUBLIC_VIDEO = "public.video" +} + +internal fun List.toMediaTypes(): List { + val mediaTypesList = mutableListOf() + + if (this.contains(MediaType.Image)) { + mediaTypesList.add(MediaTypeConstants.PUBLIC_IMAGE) + } + + if (this.contains(MediaType.Video)) { + mediaTypesList.add(MediaTypeConstants.PUBLIC_MOVIE) + mediaTypesList.add(MediaTypeConstants.PUBLIC_VIDEO) + } + + return mediaTypesList +} + +internal fun String?.isVideoType(): Boolean { + return this == MediaTypeConstants.PUBLIC_MOVIE || this == MediaTypeConstants.PUBLIC_VIDEO +} + +internal fun NSURL.safePathString(): String { + return this.path.orEmpty() +} + +internal fun Map.extractUIImage(allowEditing: Boolean): platform.UIKit.UIImage? { + return if (allowEditing) { + this["UIImagePickerControllerEditedImage"] as? platform.UIKit.UIImage + ?: this["UIImagePickerControllerOriginalImage"] as? platform.UIKit.UIImage + } else { + this["UIImagePickerControllerOriginalImage"] as? platform.UIKit.UIImage + } +} + +internal fun Map.extractVideoURL(): NSURL? { + return this["UIImagePickerControllerMediaURL"] as? NSURL +} + +internal fun Map.extractMediaType(): String? { + return this["UIImagePickerControllerMediaType"] as? String +} + +@OptIn(ExperimentalForeignApi::class) +internal fun NSURL.extractVideoData(): ByteArray? { + return try { + val data = NSData.dataWithContentsOfURL(this) ?: return null + val length = data.length.toInt() + + if (length == 0) return null + + val byteArray = ByteArray(length) + byteArray.usePinned { pinned -> + data.getBytes(pinned.addressOf(0), length.toULong()) + } + byteArray + } catch (_: Throwable) { + null + } +} + +@OptIn(ExperimentalForeignApi::class) +internal fun UIImage.saveToTemporaryFile(): String? { + return try { + val imageData = UIImageJPEGRepresentation(this, 0.9) ?: return null + + val tempDir = NSTemporaryDirectory() + val fileName = "temp_image_${Clock.System.now().toEpochMilliseconds()}.jpg" + val filePath = "${tempDir}${fileName}" + + val success = imageData.writeToFile(filePath, atomically = true) + + if (success) filePath else null + } catch (_: Throwable) { + null + } +} + +@OptIn(ExperimentalForeignApi::class) +internal fun saveVideoToTempFile(videoData: ByteArray): String? { + return try { + val tempDir = NSTemporaryDirectory() + val fileName = "temp_video_${Clock.System.now().toEpochMilliseconds()}.mov" + val filePath = "${tempDir}${fileName}" + + val nsData = NSData.dataWithBytes(videoData.usePinned { it.addressOf(0) }, videoData.size.toULong()) + val success = nsData.writeToFile(filePath, atomically = true) + + if (success) filePath else null + } catch (_: Throwable) { + null + } +} + +@OptIn(ExperimentalForeignApi::class) +internal fun MediaInfo.cleanupTemporaryFiles() { + try { + if (filePath.isNotEmpty() && (filePath.contains("temp_image_") || filePath.contains("temp_video_"))) { + NSFileManager.defaultManager.removeItemAtPath(filePath, error = null) + } + } catch (_: Throwable) { + } +} \ No newline at end of file diff --git a/ui/image-picker/src/iosMain/kotlin/com/metacto/core/ui/imagepicker/MediaPicker.kt b/ui/image-picker/src/iosMain/kotlin/com/metacto/core/ui/imagepicker/MediaPicker.kt new file mode 100644 index 00000000..7725c1a7 --- /dev/null +++ b/ui/image-picker/src/iosMain/kotlin/com/metacto/core/ui/imagepicker/MediaPicker.kt @@ -0,0 +1,208 @@ +package com.metacto.core.ui.imagepicker + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.DisposableEffect +import androidx.compose.runtime.remember +import androidx.compose.ui.interop.LocalUIViewController +import com.metacto.core.extensions.normalizedImage +import com.metacto.core.extensions.toByteArray +import com.metacto.core.ui.imagepicker.crop.presentCropViewController +import kotlinx.cinterop.ExperimentalForeignApi +import platform.UIKit.UIImage +import platform.UIKit.UIImagePickerController +import platform.UIKit.UIImagePickerControllerDelegateProtocol +import platform.UIKit.UIImagePickerControllerSourceType +import platform.UIKit.UIModalPresentationFullScreen +import platform.UIKit.UINavigationControllerDelegateProtocol +import platform.UIKit.UIViewController +import platform.darwin.NSObject + +@OptIn(ExperimentalForeignApi::class) +actual class MediaPicker( + private val rootController: UIViewController, + actual val enableCropping: Boolean, + actual val aspectRatioX: Int?, + actual val aspectRatioY: Int?, + actual val includeData: Boolean +) { + private val imagePickerController = UIImagePickerController() + private var onMediaPicked: (MediaInfo) -> Unit = {} + private var currentSource: MediaInfoSource = MediaInfoSource.Gallery + private var allowedMediaTypes: List = listOf(MediaType.Image) + private val createdMediaInfos = mutableSetOf() + + private val delegate = object : NSObject(), UIImagePickerControllerDelegateProtocol, + UINavigationControllerDelegateProtocol { + + override fun imagePickerController( + picker: UIImagePickerController, + didFinishPickingMediaWithInfo: Map + ) { + // Get media type using extension + val mediaTypeString = didFinishPickingMediaWithInfo.extractMediaType() + val isVideo = mediaTypeString.isVideoType() + + when { + isVideo -> { + // Handle video using extension + didFinishPickingMediaWithInfo.extractVideoURL()?.let { url -> + // For iOS videos, always read the data immediately since temp files get deleted + val videoData = url.extractVideoData() + // Always save to temp file for file path, regardless of includeData + val tempFilePath = videoData?.let { saveVideoToTempFile(it) } ?: "" + val mediaInfo = MediaInfo( + data = if (includeData) videoData else null, + type = MediaType.Video, + filePath = tempFilePath, + source = currentSource + ) + createdMediaInfos.add(mediaInfo) + onMediaPicked(mediaInfo) + } + // Dismiss the picker controller + picker.dismissViewControllerAnimated(true, null) + } + else -> { + // Handle image using extension + // Don't use built-in editing if we have custom aspect ratio + val useBuiltInEditing = enableCropping && + imagePickerController.allowsEditing && + (aspectRatioX == null || aspectRatioY == null || + aspectRatioX == 1 && aspectRatioY == 1) + + val image = didFinishPickingMediaWithInfo.extractUIImage(useBuiltInEditing) + + image?.let { uiImage -> + val normalizedImage = uiImage.normalizedImage() + + // Check if we should show custom crop UI + val shouldShowCustomCrop = enableCropping && + aspectRatioX != null && + aspectRatioY != null && + !(aspectRatioX == 1 && aspectRatioY == 1) + + if (shouldShowCustomCrop) { + // Dismiss picker first, then present crop UI in completion handler + picker.dismissViewControllerAnimated(true) { + presentCropViewController( + parentController = rootController, + image = normalizedImage, + aspectRatioX = aspectRatioX, + aspectRatioY = aspectRatioY, + onCropComplete = { croppedImage -> + processAndReturnImage(croppedImage) + }, + onCancel = { + // User cancelled cropping, do nothing + } + ) + } + } else { + // Process image directly and dismiss + processAndReturnImage(normalizedImage) + picker.dismissViewControllerAnimated(true, null) + } + } + } + } + } + + override fun imagePickerControllerDidCancel(picker: UIImagePickerController) { + picker.dismissViewControllerAnimated(true, null) + } + } + + @Composable + actual fun registerPicker(onMediaPicked: (MediaInfo) -> Unit) { + this.onMediaPicked = onMediaPicked + } + + actual fun pickFromGallery(mediaTypes: List) { + currentSource = MediaInfoSource.Gallery + allowedMediaTypes = mediaTypes + pickMedia( + UIImagePickerControllerSourceType.UIImagePickerControllerSourceTypePhotoLibrary, + mediaTypes + ) + } + + actual fun captureUsingCamera() { + currentSource = MediaInfoSource.Camera + pickMedia( + source = UIImagePickerControllerSourceType.UIImagePickerControllerSourceTypeCamera, + mediaTypes = listOf(MediaType.Image) + ) + } + + private fun pickMedia(source: UIImagePickerControllerSourceType, mediaTypes: List) { + imagePickerController.sourceType = source + + // Set media types using extension + imagePickerController.mediaTypes = mediaTypes.toMediaTypes() + + // Disable built-in editing if we're using custom crop UI + val useCustomCrop = enableCropping && + aspectRatioX != null && + aspectRatioY != null && + !(aspectRatioX == 1 && aspectRatioY == 1) + + imagePickerController.allowsEditing = enableCropping && + !useCustomCrop && + mediaTypes.size == 1 && + mediaTypes.contains(MediaType.Image) + imagePickerController.setModalPresentationStyle(UIModalPresentationFullScreen) + + // Set delegate BEFORE presenting + imagePickerController.delegate = delegate + + rootController.presentViewController(imagePickerController, true, null) + } + + internal fun processAndReturnImage(image: UIImage) { + val imageData = if (includeData) image.toByteArray() else null + val filePath = image.saveToTemporaryFile() + + val mediaInfo = MediaInfo( + data = imageData, + type = MediaType.Image, + filePath = filePath.orEmpty(), + source = currentSource + ) + createdMediaInfos.add(mediaInfo) + onMediaPicked(mediaInfo) + } + + internal actual fun cleanup() { + createdMediaInfos.forEach { mediaInfo -> + mediaInfo.cleanupTemporaryFiles() + } + createdMediaInfos.clear() + } +} + +@Composable +actual fun rememberMediaPicker( + enableCropping: Boolean, + aspectRatioX: Int?, + aspectRatioY: Int?, + includeData: Boolean +): MediaPicker { + val rootController = LocalUIViewController.current + val mediaPicker = remember(enableCropping, aspectRatioX, aspectRatioY, includeData) { + MediaPicker( + rootController = rootController, + enableCropping = enableCropping, + aspectRatioX = aspectRatioX, + aspectRatioY = aspectRatioY, + includeData = includeData + ) + } + + DisposableEffect(mediaPicker) { + onDispose { + mediaPicker.cleanup() + } + } + + return mediaPicker +} \ No newline at end of file diff --git a/ui/image-picker/src/iosMain/kotlin/com/metacto/core/ui/imagepicker/crop/CropState.kt b/ui/image-picker/src/iosMain/kotlin/com/metacto/core/ui/imagepicker/crop/CropState.kt new file mode 100644 index 00000000..f84a1c66 --- /dev/null +++ b/ui/image-picker/src/iosMain/kotlin/com/metacto/core/ui/imagepicker/crop/CropState.kt @@ -0,0 +1,156 @@ +package com.metacto.core.ui.imagepicker.crop + +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.geometry.Offset +import androidx.compose.ui.geometry.Rect +import androidx.compose.ui.geometry.Size +import androidx.compose.ui.unit.IntSize + +/** + * State holder for image cropping + */ +class CropState( + private val aspectRatioX: Int?, + private val aspectRatioY: Int?, + private val imageSize: IntSize +) { + var cropRect by mutableStateOf(calculateInitialCropRect()) + private set + + var scale by mutableStateOf(1f) + private set + + var offset by mutableStateOf(Offset.Zero) + private set + + /** + * Calculate initial crop rect centered in the image with correct aspect ratio + */ + private fun calculateInitialCropRect(): Rect { + val targetAspectRatio = if (aspectRatioX != null && aspectRatioY != null && aspectRatioX > 0 && aspectRatioY > 0) { + aspectRatioX.toFloat() / aspectRatioY.toFloat() + } else { + 1f // Default to square + } + + val imageWidth = imageSize.width.toFloat() + val imageHeight = imageSize.height.toFloat() + val imageAspectRatio = imageWidth / imageHeight + + val (cropWidth, cropHeight) = if (imageAspectRatio > targetAspectRatio) { + // Image is wider than target aspect ratio + val height = imageHeight * 0.8f // Use 80% of image height + val width = height * targetAspectRatio + width to height + } else { + // Image is taller than target aspect ratio + val width = imageWidth * 0.8f // Use 80% of image width + val height = width / targetAspectRatio + width to height + } + + // Center the crop rect + val left = (imageWidth - cropWidth) / 2f + val top = (imageHeight - cropHeight) / 2f + + return Rect( + offset = Offset(left, top), + size = Size(cropWidth, cropHeight) + ) + } + + /** + * Update crop rect position (dragging) + */ + fun updateCropPosition(delta: Offset) { + val newLeft = (cropRect.left + delta.x).coerceIn(0f, imageSize.width - cropRect.width) + val newTop = (cropRect.top + delta.y).coerceIn(0f, imageSize.height - cropRect.height) + + cropRect = Rect( + offset = Offset(newLeft, newTop), + size = cropRect.size + ) + } + + /** + * Update crop rect size (resizing from corners/edges) + */ + fun updateCropSize(sizeDelta: Size, fromCorner: Corner) { + val aspectRatio = if (aspectRatioX != null && aspectRatioY != null && aspectRatioX > 0 && aspectRatioY > 0) { + aspectRatioX.toFloat() / aspectRatioY.toFloat() + } else { + cropRect.width / cropRect.height + } + + when (fromCorner) { + Corner.BottomEnd -> { + var newWidth = (cropRect.width + sizeDelta.width).coerceIn(100f, imageSize.width - cropRect.left) + var newHeight = newWidth / aspectRatio + + // Ensure height doesn't exceed image bounds + if (cropRect.top + newHeight > imageSize.height) { + newHeight = imageSize.height - cropRect.top + newWidth = newHeight * aspectRatio + } + + cropRect = Rect( + offset = cropRect.topLeft, + size = Size(newWidth, newHeight) + ) + } + Corner.TopStart -> { + var newWidth = (cropRect.width - sizeDelta.width).coerceIn(100f, cropRect.right) + var newHeight = newWidth / aspectRatio + + val newLeft = (cropRect.right - newWidth).coerceAtLeast(0f) + val newTop = (cropRect.bottom - newHeight).coerceAtLeast(0f) + + cropRect = Rect( + offset = Offset(newLeft, newTop), + size = Size(newWidth, newHeight) + ) + } + Corner.TopEnd -> { + var newWidth = (cropRect.width + sizeDelta.width).coerceIn(100f, imageSize.width - cropRect.left) + var newHeight = newWidth / aspectRatio + + val newTop = (cropRect.bottom - newHeight).coerceAtLeast(0f) + + cropRect = Rect( + offset = Offset(cropRect.left, newTop), + size = Size(newWidth, newHeight) + ) + } + Corner.BottomStart -> { + var newWidth = (cropRect.width - sizeDelta.width).coerceIn(100f, cropRect.right) + var newHeight = newWidth / aspectRatio + + val newLeft = (cropRect.right - newWidth).coerceAtLeast(0f) + + cropRect = Rect( + offset = Offset(newLeft, cropRect.top), + size = Size(newWidth, newHeight) + ) + } + } + } + + enum class Corner { + TopStart, TopEnd, BottomStart, BottomEnd + } +} + +@Composable +fun rememberCropState( + aspectRatioX: Int?, + aspectRatioY: Int?, + imageSize: IntSize +): CropState { + return remember(aspectRatioX, aspectRatioY, imageSize) { + CropState(aspectRatioX, aspectRatioY, imageSize) + } +} \ No newline at end of file diff --git a/ui/image-picker/src/iosMain/kotlin/com/metacto/core/ui/imagepicker/crop/CropViewController.kt b/ui/image-picker/src/iosMain/kotlin/com/metacto/core/ui/imagepicker/crop/CropViewController.kt new file mode 100644 index 00000000..8c6748d2 --- /dev/null +++ b/ui/image-picker/src/iosMain/kotlin/com/metacto/core/ui/imagepicker/crop/CropViewController.kt @@ -0,0 +1,51 @@ +package com.metacto.core.ui.imagepicker.crop + +import androidx.compose.ui.window.ComposeUIViewController +import kotlinx.cinterop.ExperimentalForeignApi +import platform.UIKit.UIImage +import platform.UIKit.UIModalPresentationFullScreen +import platform.UIKit.UIViewController + +/** + * Creates and presents a crop UI as a UIViewController + */ +@OptIn(ExperimentalForeignApi::class) +fun presentCropViewController( + parentController: UIViewController, + image: UIImage, + aspectRatioX: Int?, + aspectRatioY: Int?, + onCropComplete: (UIImage) -> Unit, + onCancel: () -> Unit +) { + val imageBitmap = image.toImageBitmap() + + if (imageBitmap == null) { + onCancel() + return + } + + // Create a Compose UI view controller + val cropViewController = ComposeUIViewController { + ImageCropView( + image = image, + imageBitmap = imageBitmap, + aspectRatioX = aspectRatioX, + aspectRatioY = aspectRatioY, + onCropComplete = { croppedImage -> + parentController.dismissViewControllerAnimated(true) { + onCropComplete(croppedImage) + } + }, + onCancel = { + parentController.dismissViewControllerAnimated(true) { + onCancel() + } + } + ) + } + + // Present modally + cropViewController.setModalPresentationStyle(UIModalPresentationFullScreen) + parentController.presentViewController(cropViewController, animated = true, completion = null) +} \ No newline at end of file diff --git a/ui/image-picker/src/iosMain/kotlin/com/metacto/core/ui/imagepicker/crop/ImageCropUtils.kt b/ui/image-picker/src/iosMain/kotlin/com/metacto/core/ui/imagepicker/crop/ImageCropUtils.kt new file mode 100644 index 00000000..d50286f5 --- /dev/null +++ b/ui/image-picker/src/iosMain/kotlin/com/metacto/core/ui/imagepicker/crop/ImageCropUtils.kt @@ -0,0 +1,100 @@ +package com.metacto.core.ui.imagepicker.crop + +import kotlinx.cinterop.CValue +import kotlinx.cinterop.ExperimentalForeignApi +import kotlinx.cinterop.useContents +import platform.CoreGraphics.CGPointMake +import platform.CoreGraphics.CGRect +import platform.CoreGraphics.CGRectMake +import platform.CoreGraphics.CGSize +import platform.CoreGraphics.CGSizeMake +import platform.UIKit.UIGraphicsBeginImageContextWithOptions +import platform.UIKit.UIGraphicsEndImageContext +import platform.UIKit.UIGraphicsGetImageFromCurrentImageContext +import platform.UIKit.UIImage + +/** + * Crop a UIImage to the specified rectangle + */ +@OptIn(ExperimentalForeignApi::class) +fun UIImage.crop(rect: CValue): UIImage? { + return rect.useContents { + // Create a new context with the crop size + UIGraphicsBeginImageContextWithOptions( + size = CGSizeMake(size.width, size.height), + opaque = false, + scale = this@crop.scale + ) + + // Draw the image, adjusted for the crop rect + this@crop.drawAtPoint( + point = CGPointMake(-origin.x, -origin.y) + ) + + // Get the cropped image from the context + val croppedImage = UIGraphicsGetImageFromCurrentImageContext() + + // Clean up + UIGraphicsEndImageContext() + + croppedImage + } +} + +/** + * Scale a UIImage to fit within maxSize while maintaining aspect ratio + */ +@OptIn(ExperimentalForeignApi::class) +fun UIImage.scaleToFit(maxSize: CValue): UIImage? { + val (maxWidth, maxHeight) = maxSize.useContents { width to height } + val (imgWidth, imgHeight) = this.size.useContents { width to height } + + val widthRatio = maxWidth / imgWidth + val heightRatio = maxHeight / imgHeight + val scaleFactor = minOf(widthRatio, heightRatio) + + if (scaleFactor >= 1.0) return this // No need to scale down + + val newWidth = imgWidth * scaleFactor + val newHeight = imgHeight * scaleFactor + val newSize = CGSizeMake(newWidth, newHeight) + + UIGraphicsBeginImageContextWithOptions( + size = newSize, + opaque = false, + scale = 0.0 + ) + + this.drawInRect(CGRectMake(0.0, 0.0, newWidth, newHeight)) + val scaledImage = UIGraphicsGetImageFromCurrentImageContext() + UIGraphicsEndImageContext() + + return scaledImage +} + +/** + * Calculate crop rect in image coordinates from display coordinates + */ +@OptIn(ExperimentalForeignApi::class) +fun calculateImageCropRect( + imageSize: CValue, + displaySize: CValue, + cropRect: CValue, + scale: Double +): CValue { + val (imgWidth, imgHeight) = imageSize.useContents { width to height } + val (displayWidth, displayHeight) = displaySize.useContents { width to height } + + // Calculate the scale factor between display and actual image + val scaleX = imgWidth / displayWidth + val scaleY = imgHeight / displayHeight + + return cropRect.useContents { + CGRectMake( + origin.x * scaleX, + origin.y * scaleY, + size.width * scaleX, + size.height * scaleY + ) + } +} diff --git a/ui/image-picker/src/iosMain/kotlin/com/metacto/core/ui/imagepicker/crop/ImageCropView.kt b/ui/image-picker/src/iosMain/kotlin/com/metacto/core/ui/imagepicker/crop/ImageCropView.kt new file mode 100644 index 00000000..51907928 --- /dev/null +++ b/ui/image-picker/src/iosMain/kotlin/com/metacto/core/ui/imagepicker/crop/ImageCropView.kt @@ -0,0 +1,284 @@ +package com.metacto.core.ui.imagepicker.crop + +import androidx.compose.foundation.Canvas +import androidx.compose.foundation.background +import androidx.compose.foundation.gestures.detectDragGestures +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.material.Button +import androidx.compose.material.ButtonDefaults +import androidx.compose.material.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.geometry.Offset +import androidx.compose.ui.geometry.Rect +import androidx.compose.ui.geometry.Size +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.ImageBitmap +import androidx.compose.ui.graphics.drawscope.Stroke +import androidx.compose.ui.input.pointer.pointerInput +import androidx.compose.ui.layout.onGloballyPositioned +import androidx.compose.ui.unit.IntSize +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.toSize +import kotlinx.cinterop.ExperimentalForeignApi +import kotlinx.cinterop.useContents +import platform.CoreGraphics.CGRectMake +import platform.UIKit.UIImage + +@OptIn(ExperimentalForeignApi::class) +@Composable +fun ImageCropView( + image: UIImage, + imageBitmap: ImageBitmap, + aspectRatioX: Int?, + aspectRatioY: Int?, + onCropComplete: (UIImage) -> Unit, + onCancel: () -> Unit +) { + val imageSize = remember { + image.size.useContents { + IntSize(width.toInt(), height.toInt()) + } + } + + val cropState = rememberCropState( + aspectRatioX = aspectRatioX, + aspectRatioY = aspectRatioY, + imageSize = imageSize + ) + + var containerSize by remember { mutableStateOf(IntSize.Zero) } + var isDraggingCrop by remember { mutableStateOf(false) } + var isResizing by remember { mutableStateOf(false) } + var resizeCorner by remember { mutableStateOf(CropState.Corner.BottomEnd) } + + Box( + modifier = Modifier + .fillMaxSize() + .background(Color.Black) + ) { + Column( + modifier = Modifier.fillMaxSize() + ) { + // Crop area + Box( + modifier = Modifier + .weight(1f) + .fillMaxWidth() + .onGloballyPositioned { coordinates -> + containerSize = coordinates.size + } + ) { + if (containerSize != IntSize.Zero) { + // Calculate scale to fit image in container + val scale = calculateScaleToFit( + imageSize = imageSize.toSize(), + containerSize = containerSize.toSize() + ) + + val displaySize = Size( + imageSize.width * scale, + imageSize.height * scale + ) + + // Center the image in the container + val imageOffset = Offset( + (containerSize.width - displaySize.width) / 2f, + (containerSize.height - displaySize.height) / 2f + ) + + Canvas( + modifier = Modifier + .fillMaxSize() + .pointerInput(Unit) { + detectDragGestures( + onDragStart = { offset -> + val cropRectDisplay = scaleCropRect(cropState.cropRect, scale, imageOffset) + + // Check if touching a corner (for resizing) + val cornerRadius = 40f + when { + isNearPoint(offset, cropRectDisplay.topLeft, cornerRadius) -> { + isResizing = true + resizeCorner = CropState.Corner.TopStart + } + isNearPoint(offset, cropRectDisplay.topRight, cornerRadius) -> { + isResizing = true + resizeCorner = CropState.Corner.TopEnd + } + isNearPoint(offset, cropRectDisplay.bottomLeft, cornerRadius) -> { + isResizing = true + resizeCorner = CropState.Corner.BottomStart + } + isNearPoint(offset, cropRectDisplay.bottomRight, cornerRadius) -> { + isResizing = true + resizeCorner = CropState.Corner.BottomEnd + } + cropRectDisplay.contains(offset) -> { + isDraggingCrop = true + } + } + }, + onDrag = { _, dragAmount -> + if (isDraggingCrop) { + cropState.updateCropPosition(dragAmount / scale) + } else if (isResizing) { + val sizeDelta = when (resizeCorner) { + CropState.Corner.BottomEnd, CropState.Corner.TopEnd -> + Size(dragAmount.x / scale, dragAmount.y / scale) + else -> + Size(-dragAmount.x / scale, -dragAmount.y / scale) + } + cropState.updateCropSize(sizeDelta, resizeCorner) + } + }, + onDragEnd = { + isDraggingCrop = false + isResizing = false + } + ) + } + ) { + // Draw the image + drawImage( + image = imageBitmap, + dstOffset = imageOffset.let { androidx.compose.ui.unit.IntOffset(it.x.toInt(), it.y.toInt()) }, + dstSize = androidx.compose.ui.unit.IntSize(displaySize.width.toInt(), displaySize.height.toInt()) + ) + + // Draw overlay (darken areas outside crop) + val cropRectDisplay = scaleCropRect(cropState.cropRect, scale, imageOffset) + + // Top overlay + drawRect( + color = Color.Black.copy(alpha = 0.5f), + topLeft = imageOffset, + size = Size(displaySize.width, cropRectDisplay.top - imageOffset.y) + ) + + // Bottom overlay + drawRect( + color = Color.Black.copy(alpha = 0.5f), + topLeft = Offset(imageOffset.x, cropRectDisplay.bottom), + size = Size(displaySize.width, imageOffset.y + displaySize.height - cropRectDisplay.bottom) + ) + + // Left overlay + drawRect( + color = Color.Black.copy(alpha = 0.5f), + topLeft = Offset(imageOffset.x, cropRectDisplay.top), + size = Size(cropRectDisplay.left - imageOffset.x, cropRectDisplay.height) + ) + + // Right overlay + drawRect( + color = Color.Black.copy(alpha = 0.5f), + topLeft = Offset(cropRectDisplay.right, cropRectDisplay.top), + size = Size(imageOffset.x + displaySize.width - cropRectDisplay.right, cropRectDisplay.height) + ) + + // Draw crop rectangle border + drawRect( + color = Color.White, + topLeft = cropRectDisplay.topLeft, + size = cropRectDisplay.size, + style = Stroke(width = 2f) + ) + + // Draw corner handles + val handleSize = 20f + listOf( + cropRectDisplay.topLeft, + cropRectDisplay.topRight, + cropRectDisplay.bottomLeft, + cropRectDisplay.bottomRight + ).forEach { corner -> + drawCircle( + color = Color.White, + radius = handleSize / 2, + center = corner + ) + } + } + } + } + + // Bottom buttons + Row( + modifier = Modifier + .fillMaxWidth() + .padding(16.dp), + verticalAlignment = Alignment.CenterVertically + ) { + Button( + onClick = onCancel, + colors = ButtonDefaults.buttonColors(backgroundColor = Color.DarkGray) + ) { + Text("Cancel", color = Color.White) + } + + Spacer(modifier = Modifier.weight(1f)) + + Button( + onClick = { + // Perform the crop + val croppedImage = performCrop(image, cropState.cropRect) + croppedImage?.let { onCropComplete(it) } + }, + colors = ButtonDefaults.buttonColors(backgroundColor = Color(0xFF007AFF)) + ) { + Text("Done", color = Color.White) + } + } + } + } +} + +private fun calculateScaleToFit(imageSize: Size, containerSize: Size): Float { + val scaleX = containerSize.width / imageSize.width + val scaleY = containerSize.height / imageSize.height + return minOf(scaleX, scaleY) +} + +private fun scaleCropRect(cropRect: Rect, scale: Float, imageOffset: Offset): Rect { + return Rect( + offset = Offset( + cropRect.left * scale + imageOffset.x, + cropRect.top * scale + imageOffset.y + ), + size = Size( + cropRect.width * scale, + cropRect.height * scale + ) + ) +} + +private fun isNearPoint(touch: Offset, point: Offset, radius: Float): Boolean { + val dx = touch.x - point.x + val dy = touch.y - point.y + return (dx * dx + dy * dy) <= (radius * radius) +} + +@OptIn(ExperimentalForeignApi::class) +private fun performCrop(image: UIImage, cropRect: Rect): UIImage? { + val cgRect = CGRectMake( + cropRect.left.toDouble(), + cropRect.top.toDouble(), + cropRect.width.toDouble(), + cropRect.height.toDouble() + ) + + return image.crop(cgRect) +} \ No newline at end of file diff --git a/ui/image-picker/src/iosMain/kotlin/com/metacto/core/ui/imagepicker/crop/UIImageConverter.kt b/ui/image-picker/src/iosMain/kotlin/com/metacto/core/ui/imagepicker/crop/UIImageConverter.kt new file mode 100644 index 00000000..c31237df --- /dev/null +++ b/ui/image-picker/src/iosMain/kotlin/com/metacto/core/ui/imagepicker/crop/UIImageConverter.kt @@ -0,0 +1,35 @@ +package com.metacto.core.ui.imagepicker.crop + +import androidx.compose.ui.graphics.ImageBitmap +import androidx.compose.ui.graphics.toComposeImageBitmap +import kotlinx.cinterop.ExperimentalForeignApi +import kotlinx.cinterop.addressOf +import kotlinx.cinterop.usePinned +import org.jetbrains.skia.Image +import platform.Foundation.getBytes +import platform.UIKit.UIImage +import platform.UIKit.UIImagePNGRepresentation + +/** + * Convert UIImage to Compose ImageBitmap for rendering + */ +@OptIn(ExperimentalForeignApi::class) +fun UIImage.toImageBitmap(): ImageBitmap? { + // Convert UIImage to PNG data + val pngData = UIImagePNGRepresentation(this) ?: return null + val length = pngData.length.toInt() + + if (length == 0) return null + + // Get the bytes + val bytes = ByteArray(length) + bytes.usePinned { pinned -> + pngData.getBytes(pinned.addressOf(0), length.toULong()) + } + + // Create Skia Image from bytes + val skiaImage = Image.makeFromEncoded(bytes) + + // Convert to Compose ImageBitmap + return skiaImage.toComposeImageBitmap() +} diff --git a/ui/image-picker/src/iosMain/kotlin/com/metacto/core/ui/imagepicker/di/Di.ios.kt b/ui/image-picker/src/iosMain/kotlin/com/metacto/core/ui/imagepicker/di/Di.ios.kt new file mode 100644 index 00000000..203b87bd --- /dev/null +++ b/ui/image-picker/src/iosMain/kotlin/com/metacto/core/ui/imagepicker/di/Di.ios.kt @@ -0,0 +1,7 @@ +package com.metacto.core.ui.imagepicker.di + +import org.koin.dsl.module + +internal actual fun platformModule() = module { + // Add iOS specific dependencies here +} \ No newline at end of file diff --git a/coreapp/src/iosMain/kotlin/com/metacto/core/presentation/imagePicker/ImagePickerSheet.kt b/ui/image-picker/src/iosMain/kotlin/com/metacto/core/ui/imagepicker/sheet/ImagePickerSheet.kt similarity index 66% rename from coreapp/src/iosMain/kotlin/com/metacto/core/presentation/imagePicker/ImagePickerSheet.kt rename to ui/image-picker/src/iosMain/kotlin/com/metacto/core/ui/imagepicker/sheet/ImagePickerSheet.kt index ade70574..8f172b33 100644 --- a/coreapp/src/iosMain/kotlin/com/metacto/core/presentation/imagePicker/ImagePickerSheet.kt +++ b/ui/image-picker/src/iosMain/kotlin/com/metacto/core/ui/imagepicker/sheet/ImagePickerSheet.kt @@ -1,13 +1,14 @@ -package com.metacto.core.presentation.imagePicker +package com.metacto.core.ui.imagepicker.sheet import androidx.compose.runtime.Composable -import com.metacto.core.presentation.base.BaseSheet -import com.metacto.core.presentation.base.getViewModel -import com.metacto.core.presentation.components.imagePicker.rememberImagePicker -import com.metacto.core.presentation.imagePicker.ImagePickerContract.Effect -import com.metacto.core.presentation.imagePicker.ImagePickerContract.Event -import com.metacto.core.presentation.imagePicker.components.ImagePickerContent -import com.metacto.core.utils.extensions.consume +import com.metacto.core.ui.base.CoreSheet +import com.metacto.core.ui.base.getViewModel +import com.metacto.core.ui.extensions.consume +import com.metacto.core.ui.imagepicker.MediaType +import com.metacto.core.ui.imagepicker.rememberMediaPicker +import com.metacto.core.ui.imagepicker.sheet.ImagePickerContract.Effect +import com.metacto.core.ui.imagepicker.sheet.ImagePickerContract.Event +import com.metacto.core.ui.imagepicker.sheet.components.ImagePickerContent actual class ImagePickerSheet actual constructor( actual val allowGallery: Boolean, @@ -16,7 +17,7 @@ actual class ImagePickerSheet actual constructor( actual val enableCropping: Boolean, actual val aspectRatioX: Int?, actual val aspectRatioY: Int? -) : BaseSheet() { +) : CoreSheet() { private val viewModel = getViewModel() @@ -34,7 +35,8 @@ actual class ImagePickerSheet actual constructor( @Composable actual override fun Content() { // Create the image picker - val imagePicker = rememberImagePicker( + val imagePicker = rememberMediaPicker( + includeData = true, enableCropping = enableCropping, aspectRatioX = aspectRatioX, aspectRatioY = aspectRatioY @@ -43,14 +45,14 @@ actual class ImagePickerSheet actual constructor( // Handle side effects viewModel.effect.consume { effect -> when (effect) { - Effect.PickImage -> imagePicker.pickFromGallery() + Effect.PickImage -> imagePicker.pickFromGallery(listOf(MediaType.Image)) Effect.CaptureImage -> imagePicker.captureUsingCamera() } } // Register image picker imagePicker.registerPicker { - viewModel.setEvent(Event.PickImageResult(it)) + viewModel.setEvent(Event.PickMediaResult(it)) } // Render content diff --git a/ui/media-players/build.gradle.kts b/ui/media-players/build.gradle.kts new file mode 100644 index 00000000..195719d8 --- /dev/null +++ b/ui/media-players/build.gradle.kts @@ -0,0 +1,140 @@ +import com.android.build.gradle.internal.cxx.configure.gradleLocalProperties +import org.jetbrains.kotlin.gradle.plugin.mpp.apple.XCFramework +import org.jetbrains.kotlin.konan.properties.Properties +import java.io.FileInputStream +import java.io.FileOutputStream + +plugins { + alias(libs.plugins.multiplatform) + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.parcelize) + alias(libs.plugins.compose) + alias(libs.plugins.kotlin.compose) + alias(libs.plugins.maven.publish) + alias(libs.plugins.signing) +} + +private val versionProperties = Properties().apply { + load(FileInputStream(File(rootProject.rootDir, Configs.VERSIONS_PROPERTIES))) +} + +private val currentVersion = versionProperties.getProperty(Configs.PUBLISH_VERSION) as String +private val libName = "media-players" +private val libNamespace = "com.metacto.core.ui.mediaplayers" + +version = currentVersion +group = Configs.GROUP_ID + +kotlin { + androidTarget { + compilerOptions { + freeCompilerArgs.addAll("-P", "plugin:org.jetbrains.kotlin.parcelize:additionalAnnotation=com.metacto.kmm.core.CommonParcelize") + } + compilations.all { + kotlinOptions { + jvmTarget = libs.versions.jvm.get() + } + } + publishLibraryVariants("debug", "release") + } + + val xcf = XCFramework() + listOf( + iosX64(), + iosArm64(), + iosSimulatorArm64() + ).forEach { + it.binaries.framework(libName) { + baseName = libName + xcf.add(this) + isStatic = true + } + } + + metadata { + compilations.matching { it.name == "iosMain" }.all { + compileTaskProvider.configure { enabled = false } + } + } + + sourceSets { + commonMain.dependencies { + // Core UI + implementation(project(":ui:core-ui")) + } + + androidMain.dependencies { + // Exo Player + implementation(libs.exo.player) + implementation(libs.exo.hls) + implementation(libs.exo.ui) + implementation(libs.exo.session) + } + + iosMain.dependencies { + // IOS DEPENDENCIES + } + } + + task("testClasses") +} + +android { + namespace = libNamespace + compileSdk = libs.versions.compileSdk.get().toInt() + + sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml") + sourceSets["main"].res.srcDirs("src/androidMain/res") + sourceSets["main"].resources.srcDirs("src/commonMain/resources") + sourceSets["main"].res.srcDirs("src/androidMain/res", "src/commonMain/resources") + + defaultConfig { + minSdk = libs.versions.minSdk.get().toInt() + targetSdk = libs.versions.targetSdk.get().toInt() + consumerProguardFiles("consumer-rules.pro") + } + compileOptions { + sourceCompatibility = JavaVersion.toVersion(libs.versions.jvm.get()) + targetCompatibility = JavaVersion.toVersion(libs.versions.jvm.get()) + } +} + +compose.resources { + publicResClass = false + packageOfResClass = "$libNamespace.resources" + generateResClass = always +} + +publishing { + repositories { + val localProperties = gradleLocalProperties(rootDir, providers) + var publishUserRepo = localProperties.getProperty(Configs.PUBLISH_REPO_USER) + var publishTokenRepo = localProperties.getProperty(Configs.PUBLISH_REPO_TOKEN) + + if (publishUserRepo.isNullOrEmpty()) { + publishUserRepo = "" + localProperties.setProperty(Configs.PUBLISH_REPO_USER, publishUserRepo) + } + + if (publishTokenRepo.isNullOrEmpty()) { + publishTokenRepo = "" + localProperties.setProperty(Configs.PUBLISH_REPO_TOKEN, publishTokenRepo) + } + + if (publishUserRepo.isEmpty() || publishTokenRepo.isEmpty()) { + localProperties.store( + FileOutputStream(File(rootDir, Configs.LOCAL_PROPERTIES)), null + ) + } + + repositories { + maven(Configs.MAVEN_URL) { + name = Configs.PUBLISH_MAVEN_REPO_NAME + credentials { + username = publishUserRepo + password = publishTokenRepo + } + } + } + } +} \ No newline at end of file diff --git a/ui/media-players/src/androidMain/AndroidManifest.xml b/ui/media-players/src/androidMain/AndroidManifest.xml new file mode 100644 index 00000000..b0c1aabd --- /dev/null +++ b/ui/media-players/src/androidMain/AndroidManifest.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/presentation/components/audioPlayer/AudioPlayer.kt b/ui/media-players/src/androidMain/kotlin/com/metacto/core/ui/mediaplayers/audioPlayer/AudioPlayer.kt similarity index 91% rename from coreapp/src/androidMain/kotlin/com/metacto/core/presentation/components/audioPlayer/AudioPlayer.kt rename to ui/media-players/src/androidMain/kotlin/com/metacto/core/ui/mediaplayers/audioPlayer/AudioPlayer.kt index d80fadb2..fb7f666f 100644 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/presentation/components/audioPlayer/AudioPlayer.kt +++ b/ui/media-players/src/androidMain/kotlin/com/metacto/core/ui/mediaplayers/audioPlayer/AudioPlayer.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.audioPlayer +package com.metacto.core.ui.mediaplayers.audioPlayer import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect @@ -11,8 +11,11 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Shape import androidx.compose.ui.text.TextStyle import androidx.compose.ui.unit.Dp -import com.metacto.core.domain.DiQualifiers -import com.metacto.core.utils.extensions.OnLifecycleEvent +import com.metacto.core.ui.mediaplayers.di.DiQualifiers +import com.metacto.core.ui.extensions.OnLifecycleEvent +import com.metacto.core.ui.mediaplayers.audioPlayer.AudioPlayerComponent +import com.metacto.core.ui.mediaplayers.audioPlayer.AudioPlayerController +import com.metacto.core.ui.mediaplayers.audioPlayer.AudioPlayerStatusListener import org.jetbrains.compose.resources.DrawableResource import org.koin.compose.koinInject diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/presentation/components/audioPlayer/AudioPlayerManager.kt b/ui/media-players/src/androidMain/kotlin/com/metacto/core/ui/mediaplayers/audioPlayer/AudioPlayerManager.kt similarity index 93% rename from coreapp/src/androidMain/kotlin/com/metacto/core/presentation/components/audioPlayer/AudioPlayerManager.kt rename to ui/media-players/src/androidMain/kotlin/com/metacto/core/ui/mediaplayers/audioPlayer/AudioPlayerManager.kt index d4a372d6..23e1c4be 100644 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/presentation/components/audioPlayer/AudioPlayerManager.kt +++ b/ui/media-players/src/androidMain/kotlin/com/metacto/core/ui/mediaplayers/audioPlayer/AudioPlayerManager.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.audioPlayer +package com.metacto.core.ui.mediaplayers.audioPlayer import android.content.Context import androidx.annotation.OptIn @@ -8,8 +8,9 @@ import androidx.compose.runtime.mutableStateOf import androidx.media3.common.Player import androidx.media3.common.util.UnstableApi import androidx.media3.exoplayer.ExoPlayer -import com.metacto.core.domain.DiQualifiers -import com.metacto.core.utils.extensions.createMediaSource +import com.metacto.core.ui.mediaplayers.di.DiQualifiers +import com.metacto.core.ui.mediaplayers.extensions.createMediaSource +import com.metacto.core.ui.mediaplayers.audioPlayer.AudioPlayerStatusListener import kotlinx.coroutines.delay import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.conflate diff --git a/ui/media-players/src/androidMain/kotlin/com/metacto/core/ui/mediaplayers/di/Di.android.kt b/ui/media-players/src/androidMain/kotlin/com/metacto/core/ui/mediaplayers/di/Di.android.kt new file mode 100644 index 00000000..63fc481b --- /dev/null +++ b/ui/media-players/src/androidMain/kotlin/com/metacto/core/ui/mediaplayers/di/Di.android.kt @@ -0,0 +1,17 @@ +package com.metacto.core.ui.mediaplayers.di + +import com.metacto.core.ui.mediaplayers.audioPlayer.AudioPlayerManager +import com.metacto.core.ui.mediaplayers.videoPlayer.VideoPlayerManager +import org.koin.dsl.module + +internal actual fun platformModule() = module { + // Android specific dependencies can be added here + + single>(DiQualifiers.videoPlayerManagers) { + mutableMapOf() + } + + single>(DiQualifiers.audioPlayerManagers) { + mutableMapOf() + } +} \ No newline at end of file diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/extensions/ExoPlayerExtensions.kt b/ui/media-players/src/androidMain/kotlin/com/metacto/core/ui/mediaplayers/extensions/ExoPlayerExtensions.kt similarity index 92% rename from coreapp/src/androidMain/kotlin/com/metacto/core/utils/extensions/ExoPlayerExtensions.kt rename to ui/media-players/src/androidMain/kotlin/com/metacto/core/ui/mediaplayers/extensions/ExoPlayerExtensions.kt index c1e8f5ab..aa5846ba 100644 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/utils/extensions/ExoPlayerExtensions.kt +++ b/ui/media-players/src/androidMain/kotlin/com/metacto/core/ui/mediaplayers/extensions/ExoPlayerExtensions.kt @@ -1,4 +1,4 @@ -package com.metacto.core.utils.extensions +package com.metacto.core.ui.mediaplayers.extensions import android.content.Context import androidx.annotation.OptIn @@ -13,7 +13,8 @@ import androidx.media3.datasource.FileDataSource import androidx.media3.exoplayer.hls.HlsMediaSource import androidx.media3.exoplayer.source.MediaSource import androidx.media3.exoplayer.source.ProgressiveMediaSource -import com.metacto.strapikmm.util.applyIf +import com.metacto.core.extensions.applyIf +import com.metacto.core.extensions.isLocalFile fun createMediaSource( context: Context, @@ -53,7 +54,10 @@ private fun createHlsMediaSource(url: String, metaData: MediaMetadata?): HlsMedi } @OptIn(UnstableApi::class) -private fun createLocalFileMediaSource(url: String, metaData: MediaMetadata?): ProgressiveMediaSource { +private fun createLocalFileMediaSource( + url: String, + metaData: MediaMetadata? +): ProgressiveMediaSource { val factory = FileDataSource.Factory() return ProgressiveMediaSource .Factory(factory) diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/presentation/components/videoPlayer/MediaNotificationManager.kt b/ui/media-players/src/androidMain/kotlin/com/metacto/core/ui/mediaplayers/videoPlayer/MediaNotificationManager.kt similarity index 95% rename from coreapp/src/androidMain/kotlin/com/metacto/core/presentation/components/videoPlayer/MediaNotificationManager.kt rename to ui/media-players/src/androidMain/kotlin/com/metacto/core/ui/mediaplayers/videoPlayer/MediaNotificationManager.kt index 0c33855e..6d6b041f 100644 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/presentation/components/videoPlayer/MediaNotificationManager.kt +++ b/ui/media-players/src/androidMain/kotlin/com/metacto/core/ui/mediaplayers/videoPlayer/MediaNotificationManager.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.videoPlayer +package com.metacto.core.ui.mediaplayers.videoPlayer import android.app.PendingIntent import android.content.Context @@ -9,10 +9,9 @@ import androidx.media3.session.MediaController import androidx.media3.session.SessionToken import androidx.media3.ui.PlayerNotificationManager import com.google.common.util.concurrent.ListenableFuture -import com.metacto.core.utils.extensions.downloadBitmap -import com.metacto.coreApp.R -import com.metacto.coreApp.resources.* -import com.metacto.strapikmm.util.applyIf +import com.metacto.core.extensions.applyIf +import com.metacto.core.ui.extensions.downloadBitmap +import com.metacto.core.ui.mediaplayers.R import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/presentation/components/videoPlayer/VideoPlayer.android.kt b/ui/media-players/src/androidMain/kotlin/com/metacto/core/ui/mediaplayers/videoPlayer/VideoPlayer.android.kt similarity index 94% rename from coreapp/src/androidMain/kotlin/com/metacto/core/presentation/components/videoPlayer/VideoPlayer.android.kt rename to ui/media-players/src/androidMain/kotlin/com/metacto/core/ui/mediaplayers/videoPlayer/VideoPlayer.android.kt index 025cbf19..73b5a09b 100644 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/presentation/components/videoPlayer/VideoPlayer.android.kt +++ b/ui/media-players/src/androidMain/kotlin/com/metacto/core/ui/mediaplayers/videoPlayer/VideoPlayer.android.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.videoPlayer +package com.metacto.core.ui.mediaplayers.videoPlayer import android.annotation.SuppressLint import android.content.res.Configuration @@ -6,7 +6,6 @@ import android.view.SurfaceView import android.view.ViewGroup.LayoutParams.MATCH_PARENT import android.widget.FrameLayout import androidx.annotation.OptIn -import androidx.appcompat.app.AppCompatActivity import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize @@ -27,20 +26,21 @@ import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.unit.Dp import androidx.compose.ui.viewinterop.AndroidView +import androidx.fragment.app.FragmentActivity import androidx.media3.common.C import androidx.media3.common.Player import androidx.media3.common.util.UnstableApi import androidx.media3.ui.AspectRatioFrameLayout import androidx.media3.ui.PlayerView -import com.metacto.core.domain.DiQualifiers -import com.metacto.core.presentation.components.dialog.dismissFullScreenDialog -import com.metacto.core.presentation.components.dialog.showFullScreenDialog -import com.metacto.core.presentation.components.visibilities.FadeVisibility -import com.metacto.core.utils.extensions.OnLifecycleEvent -import com.metacto.core.utils.extensions.getActivity -import com.metacto.core.utils.extensions.noRippleClickable -import com.metacto.core.utils.extensions.setPortraitOrientation -import com.metacto.core.utils.extensions.setUnspecifiedOrientation +import com.metacto.core.extensions.getActivity +import com.metacto.core.extensions.setPortraitOrientation +import com.metacto.core.extensions.setUnspecifiedOrientation +import com.metacto.core.ui.components.dialog.dismissFullScreenDialog +import com.metacto.core.ui.components.dialog.showFullScreenDialog +import com.metacto.core.ui.components.visibilities.FadeVisibility +import com.metacto.core.ui.extensions.OnLifecycleEvent +import com.metacto.core.ui.extensions.noRippleClickable +import com.metacto.core.ui.mediaplayers.di.DiQualifiers import org.jetbrains.compose.resources.DrawableResource import org.jetbrains.compose.resources.painterResource import org.koin.compose.koinInject @@ -93,7 +93,7 @@ actual fun VideoPlayer( val isPlayButtonVisible by remember { mutableStateOf(true) } val isVideoEnded = remember { mutableStateOf(false) } val isFullScreen = remember { mutableStateOf(false) } - val activity = LocalContext.current.getActivity() + val activity = LocalContext.current.getActivity() val configuration = LocalConfiguration.current val isLandscape by remember(configuration.orientation) { derivedStateOf { @@ -121,7 +121,11 @@ actual fun VideoPlayer( LaunchedEffect(isFullScreen.value) { if (isFullScreen.value) { // Show fullscreen dialog if needed - activity?.showFullScreenDialog { + activity?.showFullScreenDialog( + onDismiss = { + isFullScreen.value = false + } + ) { FullScreenVideoPlayer( modifier = Modifier, playerManager = playerManager, diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/presentation/components/videoPlayer/VideoPlayerManager.kt b/ui/media-players/src/androidMain/kotlin/com/metacto/core/ui/mediaplayers/videoPlayer/VideoPlayerManager.kt similarity index 95% rename from coreapp/src/androidMain/kotlin/com/metacto/core/presentation/components/videoPlayer/VideoPlayerManager.kt rename to ui/media-players/src/androidMain/kotlin/com/metacto/core/ui/mediaplayers/videoPlayer/VideoPlayerManager.kt index afb12ae5..601e09fd 100644 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/presentation/components/videoPlayer/VideoPlayerManager.kt +++ b/ui/media-players/src/androidMain/kotlin/com/metacto/core/ui/mediaplayers/videoPlayer/VideoPlayerManager.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.videoPlayer +package com.metacto.core.ui.mediaplayers.videoPlayer import android.content.Context import androidx.annotation.OptIn @@ -8,12 +8,12 @@ import androidx.media3.common.Player import androidx.media3.common.util.UnstableApi import androidx.media3.exoplayer.ExoPlayer import androidx.media3.session.MediaSession -import com.metacto.core.domain.DiQualifiers -import com.metacto.core.utils.extensions.createMediaSource -import com.metacto.core.utils.extensions.getLauncherPendingIntent import org.koin.core.component.KoinComponent import org.koin.core.component.inject import androidx.core.net.toUri +import com.metacto.core.ui.mediaplayers.extensions.createMediaSource +import com.metacto.core.extensions.getLauncherPendingIntent +import com.metacto.core.ui.mediaplayers.di.DiQualifiers @UnstableApi internal class VideoPlayerManager( diff --git a/coreapp/src/androidMain/res/values/strings.xml b/ui/media-players/src/androidMain/res/values/strings.xml similarity index 100% rename from coreapp/src/androidMain/res/values/strings.xml rename to ui/media-players/src/androidMain/res/values/strings.xml diff --git a/coreapp/src/commonMain/composeResources/drawable/ic_audio_pause.xml b/ui/media-players/src/commonMain/composeResources/drawable/ic_audio_pause.xml similarity index 100% rename from coreapp/src/commonMain/composeResources/drawable/ic_audio_pause.xml rename to ui/media-players/src/commonMain/composeResources/drawable/ic_audio_pause.xml diff --git a/coreapp/src/commonMain/composeResources/drawable/ic_audio_play.xml b/ui/media-players/src/commonMain/composeResources/drawable/ic_audio_play.xml similarity index 100% rename from coreapp/src/commonMain/composeResources/drawable/ic_audio_play.xml rename to ui/media-players/src/commonMain/composeResources/drawable/ic_audio_play.xml diff --git a/coreapp/src/commonMain/composeResources/drawable/ic_pause.xml b/ui/media-players/src/commonMain/composeResources/drawable/ic_pause.xml similarity index 100% rename from coreapp/src/commonMain/composeResources/drawable/ic_pause.xml rename to ui/media-players/src/commonMain/composeResources/drawable/ic_pause.xml diff --git a/coreapp/src/commonMain/composeResources/drawable/ic_play.xml b/ui/media-players/src/commonMain/composeResources/drawable/ic_play.xml similarity index 100% rename from coreapp/src/commonMain/composeResources/drawable/ic_play.xml rename to ui/media-players/src/commonMain/composeResources/drawable/ic_play.xml diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/audioPlayer/AudioPlayer.kt b/ui/media-players/src/commonMain/kotlin/com/metacto/core/ui/mediaplayers/audioPlayer/AudioPlayer.kt similarity index 82% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/audioPlayer/AudioPlayer.kt rename to ui/media-players/src/commonMain/kotlin/com/metacto/core/ui/mediaplayers/audioPlayer/AudioPlayer.kt index 7978f0f8..6ea8616c 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/audioPlayer/AudioPlayer.kt +++ b/ui/media-players/src/commonMain/kotlin/com/metacto/core/ui/mediaplayers/audioPlayer/AudioPlayer.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.audioPlayer +package com.metacto.core.ui.mediaplayers.audioPlayer import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier @@ -6,11 +6,13 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Shape import androidx.compose.ui.text.TextStyle import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.theme.CoreTheme.colors -import com.metacto.core.presentation.theme.CoreTheme.shapes -import com.metacto.core.presentation.theme.CoreTheme.spacings -import com.metacto.core.presentation.theme.CoreTheme.typography -import com.metacto.coreApp.resources.* +import com.metacto.core.ui.mediaplayers.resources.Res +import com.metacto.core.ui.mediaplayers.resources.ic_audio_pause +import com.metacto.core.ui.mediaplayers.resources.ic_audio_play +import com.metacto.core.ui.theme.CoreTheme.colors +import com.metacto.core.ui.theme.CoreTheme.shapes +import com.metacto.core.ui.theme.CoreTheme.spacings +import com.metacto.core.ui.theme.CoreTheme.typography import org.jetbrains.compose.resources.DrawableResource interface AudioPlayerController { diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/audioPlayer/AudioPlayerComponent.kt b/ui/media-players/src/commonMain/kotlin/com/metacto/core/ui/mediaplayers/audioPlayer/AudioPlayerComponent.kt similarity index 93% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/audioPlayer/AudioPlayerComponent.kt rename to ui/media-players/src/commonMain/kotlin/com/metacto/core/ui/mediaplayers/audioPlayer/AudioPlayerComponent.kt index 530daa5e..16e6bc20 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/audioPlayer/AudioPlayerComponent.kt +++ b/ui/media-players/src/commonMain/kotlin/com/metacto/core/ui/mediaplayers/audioPlayer/AudioPlayerComponent.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.audioPlayer +package com.metacto.core.ui.mediaplayers.audioPlayer import androidx.compose.animation.core.Animatable import androidx.compose.animation.core.LinearEasing @@ -13,6 +13,7 @@ import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.material3.Icon +import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.remember @@ -27,11 +28,11 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Shape import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.components.images.AppImage -import com.metacto.core.presentation.components.texts.SingleLineText -import com.metacto.core.presentation.theme.CoreTheme.colors -import com.metacto.core.utils.extensions.noRippleClickable +import com.metacto.core.ui.components.images.AppImage +import com.metacto.core.ui.extensions.noRippleClickable +import com.metacto.core.ui.theme.CoreTheme.colors import org.jetbrains.compose.resources.DrawableResource import org.jetbrains.compose.resources.painterResource @@ -118,10 +119,12 @@ fun AudioPlayerComponent( ) // Title - SingleLineText( + Text( text = title, style = titleStyle, color = titleColor, + maxLines = 1, + overflow = TextOverflow.Ellipsis, modifier = Modifier.weight(1f) ) diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/audioPlayer/AudioPlayerStatusListener.kt b/ui/media-players/src/commonMain/kotlin/com/metacto/core/ui/mediaplayers/audioPlayer/AudioPlayerStatusListener.kt similarity index 59% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/audioPlayer/AudioPlayerStatusListener.kt rename to ui/media-players/src/commonMain/kotlin/com/metacto/core/ui/mediaplayers/audioPlayer/AudioPlayerStatusListener.kt index 4d7affc6..598ee5bc 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/audioPlayer/AudioPlayerStatusListener.kt +++ b/ui/media-players/src/commonMain/kotlin/com/metacto/core/ui/mediaplayers/audioPlayer/AudioPlayerStatusListener.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.audioPlayer +package com.metacto.core.ui.mediaplayers.audioPlayer interface AudioPlayerStatusListener { fun onAudioPlayed() diff --git a/ui/media-players/src/commonMain/kotlin/com/metacto/core/ui/mediaplayers/di/Di.kt b/ui/media-players/src/commonMain/kotlin/com/metacto/core/ui/mediaplayers/di/Di.kt new file mode 100644 index 00000000..5f21c4f5 --- /dev/null +++ b/ui/media-players/src/commonMain/kotlin/com/metacto/core/ui/mediaplayers/di/Di.kt @@ -0,0 +1,12 @@ +package com.metacto.core.ui.mediaplayers.di + +import org.koin.core.module.Module +import org.koin.dsl.module + +fun mediaPlayersModule() = module { + // Common dependencies can be added here + + includes(platformModule()) +} + +internal expect fun platformModule(): Module \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/domain/DiQualifiers.kt b/ui/media-players/src/commonMain/kotlin/com/metacto/core/ui/mediaplayers/di/DiQualifiers.kt similarity index 81% rename from coreapp/src/commonMain/kotlin/com/metacto/core/domain/DiQualifiers.kt rename to ui/media-players/src/commonMain/kotlin/com/metacto/core/ui/mediaplayers/di/DiQualifiers.kt index 672e908f..fcee10b3 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/domain/DiQualifiers.kt +++ b/ui/media-players/src/commonMain/kotlin/com/metacto/core/ui/mediaplayers/di/DiQualifiers.kt @@ -1,4 +1,4 @@ -package com.metacto.core.domain +package com.metacto.core.ui.mediaplayers.di import org.koin.core.qualifier.named diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/videoPlayer/ControlsType.kt b/ui/media-players/src/commonMain/kotlin/com/metacto/core/ui/mediaplayers/videoPlayer/ControlsType.kt similarity index 58% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/videoPlayer/ControlsType.kt rename to ui/media-players/src/commonMain/kotlin/com/metacto/core/ui/mediaplayers/videoPlayer/ControlsType.kt index cc5187b1..029e42a6 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/videoPlayer/ControlsType.kt +++ b/ui/media-players/src/commonMain/kotlin/com/metacto/core/ui/mediaplayers/videoPlayer/ControlsType.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.videoPlayer +package com.metacto.core.ui.mediaplayers.videoPlayer enum class ControlsType { HideControls, diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/videoPlayer/VideoPlayer.kt b/ui/media-players/src/commonMain/kotlin/com/metacto/core/ui/mediaplayers/videoPlayer/VideoPlayer.kt similarity index 85% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/videoPlayer/VideoPlayer.kt rename to ui/media-players/src/commonMain/kotlin/com/metacto/core/ui/mediaplayers/videoPlayer/VideoPlayer.kt index 207066fa..747839b2 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/videoPlayer/VideoPlayer.kt +++ b/ui/media-players/src/commonMain/kotlin/com/metacto/core/ui/mediaplayers/videoPlayer/VideoPlayer.kt @@ -1,11 +1,13 @@ -package com.metacto.core.presentation.components.videoPlayer +package com.metacto.core.ui.mediaplayers.videoPlayer import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.unit.Dp -import com.metacto.core.presentation.theme.CoreTheme -import com.metacto.coreApp.resources.* +import com.metacto.core.ui.mediaplayers.resources.Res +import com.metacto.core.ui.mediaplayers.resources.ic_pause +import com.metacto.core.ui.mediaplayers.resources.ic_play +import com.metacto.core.ui.theme.CoreTheme import org.jetbrains.compose.resources.DrawableResource import kotlin.time.Duration diff --git a/coreapp/src/iosMain/kotlin/com/metacto/core/presentation/components/audioPlayer/AudioPlayer.kt b/ui/media-players/src/iosMain/kotlin/com/metacto/core/ui/mediaplayers/audioPlayer/AudioPlayer.kt similarity index 99% rename from coreapp/src/iosMain/kotlin/com/metacto/core/presentation/components/audioPlayer/AudioPlayer.kt rename to ui/media-players/src/iosMain/kotlin/com/metacto/core/ui/mediaplayers/audioPlayer/AudioPlayer.kt index ab2ef9ee..2e7c6a30 100644 --- a/coreapp/src/iosMain/kotlin/com/metacto/core/presentation/components/audioPlayer/AudioPlayer.kt +++ b/ui/media-players/src/iosMain/kotlin/com/metacto/core/ui/mediaplayers/audioPlayer/AudioPlayer.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.audioPlayer +package com.metacto.core.ui.mediaplayers.audioPlayer import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect @@ -12,8 +12,8 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Shape import androidx.compose.ui.text.TextStyle import androidx.compose.ui.unit.Dp -import org.jetbrains.compose.resources.DrawableResource import kotlinx.cinterop.ExperimentalForeignApi +import org.jetbrains.compose.resources.DrawableResource import platform.AVFoundation.AVPlayer import platform.AVFoundation.AVPlayerItem import platform.AVFoundation.AVPlayerItemDidPlayToEndTimeNotification diff --git a/ui/media-players/src/iosMain/kotlin/com/metacto/core/ui/mediaplayers/di/Di.ios.kt b/ui/media-players/src/iosMain/kotlin/com/metacto/core/ui/mediaplayers/di/Di.ios.kt new file mode 100644 index 00000000..5a3c1ae8 --- /dev/null +++ b/ui/media-players/src/iosMain/kotlin/com/metacto/core/ui/mediaplayers/di/Di.ios.kt @@ -0,0 +1,12 @@ +package com.metacto.core.ui.mediaplayers.di + +import com.metacto.core.ui.mediaplayers.videoPlayer.VideoPlayerManager +import org.koin.dsl.module + +internal actual fun platformModule() = module { + // iOS specific dependencies can be added here + + single>(DiQualifiers.videoPlayerManagers) { + mutableMapOf() + } +} \ No newline at end of file diff --git a/coreapp/src/iosMain/kotlin/com/metacto/core/presentation/components/videoPlayer/VideoPlayer.ios.kt b/ui/media-players/src/iosMain/kotlin/com/metacto/core/ui/mediaplayers/videoPlayer/VideoPlayer.ios.kt similarity index 97% rename from coreapp/src/iosMain/kotlin/com/metacto/core/presentation/components/videoPlayer/VideoPlayer.ios.kt rename to ui/media-players/src/iosMain/kotlin/com/metacto/core/ui/mediaplayers/videoPlayer/VideoPlayer.ios.kt index 23babe46..849c3c19 100644 --- a/coreapp/src/iosMain/kotlin/com/metacto/core/presentation/components/videoPlayer/VideoPlayer.ios.kt +++ b/ui/media-players/src/iosMain/kotlin/com/metacto/core/ui/mediaplayers/videoPlayer/VideoPlayer.ios.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.videoPlayer +package com.metacto.core.ui.mediaplayers.videoPlayer import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Box @@ -20,10 +20,10 @@ import androidx.compose.ui.unit.Dp import androidx.compose.ui.viewinterop.UIKitInteropInteractionMode import androidx.compose.ui.viewinterop.UIKitInteropProperties import androidx.compose.ui.viewinterop.UIKitView -import com.metacto.core.domain.DiQualifiers -import com.metacto.core.presentation.components.visibilities.FadeVisibility -import com.metacto.core.utils.extensions.DefaultLaunchedEffect -import com.metacto.core.utils.extensions.noRippleClickable +import com.metacto.core.ui.components.visibilities.FadeVisibility +import com.metacto.core.ui.extensions.DefaultLaunchedEffect +import com.metacto.core.ui.extensions.noRippleClickable +import com.metacto.core.ui.mediaplayers.di.DiQualifiers import kotlinx.cinterop.ExperimentalForeignApi import org.jetbrains.compose.resources.DrawableResource import org.jetbrains.compose.resources.painterResource diff --git a/coreapp/src/iosMain/kotlin/com/metacto/core/presentation/components/videoPlayer/VideoPlayerManager.kt b/ui/media-players/src/iosMain/kotlin/com/metacto/core/ui/mediaplayers/videoPlayer/VideoPlayerManager.kt similarity index 95% rename from coreapp/src/iosMain/kotlin/com/metacto/core/presentation/components/videoPlayer/VideoPlayerManager.kt rename to ui/media-players/src/iosMain/kotlin/com/metacto/core/ui/mediaplayers/videoPlayer/VideoPlayerManager.kt index 175abe79..dc88a14b 100644 --- a/coreapp/src/iosMain/kotlin/com/metacto/core/presentation/components/videoPlayer/VideoPlayerManager.kt +++ b/ui/media-players/src/iosMain/kotlin/com/metacto/core/ui/mediaplayers/videoPlayer/VideoPlayerManager.kt @@ -1,7 +1,7 @@ -package com.metacto.core.presentation.components.videoPlayer +package com.metacto.core.ui.mediaplayers.videoPlayer -import com.metacto.core.utils.extensions.cleanFilePath -import com.metacto.core.utils.extensions.isValidUrl +import com.metacto.core.extensions.cleanFilePath +import com.metacto.core.extensions.isValidUrl import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.IO diff --git a/ui/phone-ui/build.gradle.kts b/ui/phone-ui/build.gradle.kts new file mode 100644 index 00000000..f6c692f7 --- /dev/null +++ b/ui/phone-ui/build.gradle.kts @@ -0,0 +1,137 @@ +import com.android.build.gradle.internal.cxx.configure.gradleLocalProperties +import org.jetbrains.kotlin.gradle.plugin.mpp.apple.XCFramework +import org.jetbrains.kotlin.konan.properties.Properties +import java.io.FileInputStream +import java.io.FileOutputStream + +plugins { + alias(libs.plugins.multiplatform) + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.parcelize) + alias(libs.plugins.compose) + alias(libs.plugins.kotlin.compose) + alias(libs.plugins.maven.publish) + alias(libs.plugins.signing) +} + +private val versionProperties = Properties().apply { + load(FileInputStream(File(rootProject.rootDir, Configs.VERSIONS_PROPERTIES))) +} + +private val currentVersion = versionProperties.getProperty(Configs.PUBLISH_VERSION) as String +private val libName = "phone-ui" +private val libNamespace = "com.metacto.core.ui.phone" + +version = currentVersion +group = Configs.GROUP_ID + +kotlin { + androidTarget { + compilerOptions { + freeCompilerArgs.addAll("-P", "plugin:org.jetbrains.kotlin.parcelize:additionalAnnotation=com.metacto.kmm.core.CommonParcelize") + } + compilations.all { + kotlinOptions { + jvmTarget = libs.versions.jvm.get() + } + } + publishLibraryVariants("debug", "release") + } + + val xcf = XCFramework() + listOf( + iosX64(), + iosArm64(), + iosSimulatorArm64() + ).forEach { + it.binaries.framework(libName) { + baseName = libName + xcf.add(this) + isStatic = true + } + } + + metadata { + compilations.matching { it.name == "iosMain" }.all { + compileTaskProvider.configure { enabled = false } + } + } + + sourceSets { + commonMain.dependencies { + implementation(project(":ui:core-ui")) + api(libs.libphonenumber) + } + + androidMain.dependencies { + // ANDROID ANDROID DEPENDENCIES + } + + iosMain.dependencies { + // IOS DEPENDENCIES + } + } + + task("testClasses") +} + +android { + namespace = libNamespace + compileSdk = libs.versions.compileSdk.get().toInt() + + sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml") + sourceSets["main"].res.srcDirs("src/androidMain/res") + sourceSets["main"].resources.srcDirs("src/commonMain/resources") + sourceSets["main"].res.srcDirs("src/androidMain/res", "src/commonMain/resources") + + defaultConfig { + minSdk = libs.versions.minSdk.get().toInt() + targetSdk = libs.versions.targetSdk.get().toInt() + consumerProguardFiles("consumer-rules.pro") + } + compileOptions { + sourceCompatibility = JavaVersion.toVersion(libs.versions.jvm.get()) + targetCompatibility = JavaVersion.toVersion(libs.versions.jvm.get()) + } +} + +compose.resources { + publicResClass = false + packageOfResClass = "$libNamespace.resources" + generateResClass = always +} + +publishing { + repositories { + val localProperties = gradleLocalProperties(rootDir, providers) + var publishUserRepo = localProperties.getProperty(Configs.PUBLISH_REPO_USER) + var publishTokenRepo = localProperties.getProperty(Configs.PUBLISH_REPO_TOKEN) + + if (publishUserRepo.isNullOrEmpty()) { + publishUserRepo = "" + localProperties.setProperty(Configs.PUBLISH_REPO_USER, publishUserRepo) + } + + if (publishTokenRepo.isNullOrEmpty()) { + publishTokenRepo = "" + localProperties.setProperty(Configs.PUBLISH_REPO_TOKEN, publishTokenRepo) + } + + if (publishUserRepo.isEmpty() || publishTokenRepo.isEmpty()) { + localProperties.store( + FileOutputStream(File(rootDir, Configs.LOCAL_PROPERTIES)), null + ) + } + + repositories { + maven(Configs.MAVEN_URL) { + name = Configs.PUBLISH_MAVEN_REPO_NAME + credentials { + username = publishUserRepo + password = publishTokenRepo + } + } + } + } +} + diff --git a/ui/phone-ui/src/androidMain/kotlin/com/metacto/core/ui/phone/Extensions.android.kt b/ui/phone-ui/src/androidMain/kotlin/com/metacto/core/ui/phone/Extensions.android.kt new file mode 100644 index 00000000..dd0f9293 --- /dev/null +++ b/ui/phone-ui/src/androidMain/kotlin/com/metacto/core/ui/phone/Extensions.android.kt @@ -0,0 +1,11 @@ +package com.metacto.core.ui.phone + +import androidx.compose.runtime.Composable +import androidx.compose.ui.platform.LocalContext +import io.michaelrocks.libphonenumber.kotlin.MetadataLoader +import io.michaelrocks.libphonenumber.kotlin.metadata.source.AssetsMetadataLoader + +@Composable +actual fun defaultMetadataLoader(): MetadataLoader { + return AssetsMetadataLoader(LocalContext.current.applicationContext.assets) +} \ No newline at end of file diff --git a/ui/phone-ui/src/androidMain/kotlin/com/metacto/core/ui/phone/di/Di.android.kt b/ui/phone-ui/src/androidMain/kotlin/com/metacto/core/ui/phone/di/Di.android.kt new file mode 100644 index 00000000..164d2b87 --- /dev/null +++ b/ui/phone-ui/src/androidMain/kotlin/com/metacto/core/ui/phone/di/Di.android.kt @@ -0,0 +1,14 @@ +package com.metacto.core.ui.phone.di + +import io.michaelrocks.libphonenumber.kotlin.MetadataLoader +import io.michaelrocks.libphonenumber.kotlin.metadata.source.AssetsMetadataLoader +import org.koin.android.ext.koin.androidApplication +import org.koin.dsl.module + +internal actual fun platformModule() = module { + // Add Android specific dependencies here + + single { + AssetsMetadataLoader(androidApplication().assets) + } +} \ No newline at end of file diff --git a/ui/phone-ui/src/commonMain/kotlin/com/metacto/core/ui/phone/Extensions.kt b/ui/phone-ui/src/commonMain/kotlin/com/metacto/core/ui/phone/Extensions.kt new file mode 100644 index 00000000..afa7e38d --- /dev/null +++ b/ui/phone-ui/src/commonMain/kotlin/com/metacto/core/ui/phone/Extensions.kt @@ -0,0 +1,19 @@ +package com.metacto.core.ui.phone + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import io.michaelrocks.libphonenumber.kotlin.MetadataLoader +import io.michaelrocks.libphonenumber.kotlin.PhoneNumberUtil + +@Composable +fun rememberPhoneNumberUtil(): PhoneNumberUtil { + val metadataLoader = defaultMetadataLoader() + return remember { + PhoneNumberUtil.Companion.createInstance( + metadataLoader = metadataLoader + ) + } +} + +@Composable +expect fun defaultMetadataLoader(): MetadataLoader \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/PhoneNumberVisualTransformation.kt b/ui/phone-ui/src/commonMain/kotlin/com/metacto/core/ui/phone/PhoneNumberVisualTransformation.kt similarity index 99% rename from coreapp/src/commonMain/kotlin/com/metacto/core/utils/PhoneNumberVisualTransformation.kt rename to ui/phone-ui/src/commonMain/kotlin/com/metacto/core/ui/phone/PhoneNumberVisualTransformation.kt index 5bc77651..f7bcfaa3 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/utils/PhoneNumberVisualTransformation.kt +++ b/ui/phone-ui/src/commonMain/kotlin/com/metacto/core/ui/phone/PhoneNumberVisualTransformation.kt @@ -1,4 +1,4 @@ -package com.metacto.core.utils +package com.metacto.core.ui.phone import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.input.OffsetMapping diff --git a/ui/phone-ui/src/commonMain/kotlin/com/metacto/core/ui/phone/di/Di.kt b/ui/phone-ui/src/commonMain/kotlin/com/metacto/core/ui/phone/di/Di.kt new file mode 100644 index 00000000..28cdd90b --- /dev/null +++ b/ui/phone-ui/src/commonMain/kotlin/com/metacto/core/ui/phone/di/Di.kt @@ -0,0 +1,17 @@ +package com.metacto.core.ui.phone.di + +import io.michaelrocks.libphonenumber.kotlin.PhoneNumberUtil +import org.koin.core.module.Module +import org.koin.dsl.module + +fun phoneUIModule() = module { + // Common dependencies can be added here + + includes(platformModule()) + + single { + PhoneNumberUtil.createInstance(get()) + } +} + +internal expect fun platformModule(): Module \ No newline at end of file diff --git a/ui/phone-ui/src/iosMain/kotlin/com/metacto/core/ui/phone/Extensions.ios.kt b/ui/phone-ui/src/iosMain/kotlin/com/metacto/core/ui/phone/Extensions.ios.kt new file mode 100644 index 00000000..e143d2a6 --- /dev/null +++ b/ui/phone-ui/src/iosMain/kotlin/com/metacto/core/ui/phone/Extensions.ios.kt @@ -0,0 +1,10 @@ +package com.metacto.core.ui.phone + +import androidx.compose.runtime.Composable +import io.michaelrocks.libphonenumber.kotlin.MetadataLoader +import io.michaelrocks.libphonenumber.kotlin.metadata.init.ComposeResourceMetadataLoader + +@Composable +actual fun defaultMetadataLoader(): MetadataLoader { + return ComposeResourceMetadataLoader() +} \ No newline at end of file diff --git a/ui/phone-ui/src/iosMain/kotlin/com/metacto/core/ui/phone/di/Di.ios.kt b/ui/phone-ui/src/iosMain/kotlin/com/metacto/core/ui/phone/di/Di.ios.kt new file mode 100644 index 00000000..398f6df1 --- /dev/null +++ b/ui/phone-ui/src/iosMain/kotlin/com/metacto/core/ui/phone/di/Di.ios.kt @@ -0,0 +1,13 @@ +package com.metacto.core.ui.phone.di + +import io.michaelrocks.libphonenumber.kotlin.MetadataLoader +import io.michaelrocks.libphonenumber.kotlin.metadata.init.ComposeResourceMetadataLoader +import org.koin.dsl.module + +internal actual fun platformModule() = module { + // Add iOS specific dependencies here + + single { + ComposeResourceMetadataLoader() + } +} \ No newline at end of file diff --git a/ui/sample/build.gradle.kts b/ui/sample/build.gradle.kts new file mode 100644 index 00000000..d7b3b02c --- /dev/null +++ b/ui/sample/build.gradle.kts @@ -0,0 +1,137 @@ +import com.android.build.gradle.internal.cxx.configure.gradleLocalProperties +import org.jetbrains.kotlin.gradle.plugin.mpp.apple.XCFramework +import org.jetbrains.kotlin.konan.properties.Properties +import java.io.FileInputStream +import java.io.FileOutputStream + +plugins { + alias(libs.plugins.multiplatform) + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.parcelize) + alias(libs.plugins.compose) + alias(libs.plugins.kotlin.compose) + alias(libs.plugins.maven.publish) + alias(libs.plugins.signing) +} + +private val versionProperties = Properties().apply { + load(FileInputStream(File(rootProject.rootDir, Configs.VERSIONS_PROPERTIES))) +} + +private val currentVersion = versionProperties.getProperty(Configs.PUBLISH_VERSION) as String +private val libName = "sample-ui" +private val libNamespace = "com.metacto.core.ui.sample" + +version = currentVersion +group = Configs.GROUP_ID + +kotlin { + androidTarget { + compilerOptions { + freeCompilerArgs.addAll("-P", "plugin:org.jetbrains.kotlin.parcelize:additionalAnnotation=com.metacto.kmm.core.CommonParcelize") + } + compilations.all { + kotlinOptions { + jvmTarget = libs.versions.jvm.get() + } + } + publishLibraryVariants("debug", "release") + } + + val xcf = XCFramework() + listOf( + iosX64(), + iosArm64(), + iosSimulatorArm64() + ).forEach { + it.binaries.framework(libName) { + baseName = libName + xcf.add(this) + isStatic = true + } + } + + metadata { + compilations.matching { it.name == "iosMain" }.all { + compileTaskProvider.configure { enabled = false } + } + } + + sourceSets { + commonMain.dependencies { + // Core UI + implementation(project(":ui:core-ui")) + } + + androidMain.dependencies { + // ANDROID ANDROID DEPENDENCIES + } + + iosMain.dependencies { + // IOS DEPENDENCIES + } + } + + task("testClasses") +} + +android { + namespace = libNamespace + compileSdk = libs.versions.compileSdk.get().toInt() + + sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml") + sourceSets["main"].res.srcDirs("src/androidMain/res") + sourceSets["main"].resources.srcDirs("src/commonMain/resources") + sourceSets["main"].res.srcDirs("src/androidMain/res", "src/commonMain/resources") + + defaultConfig { + minSdk = libs.versions.minSdk.get().toInt() + targetSdk = libs.versions.targetSdk.get().toInt() + consumerProguardFiles("consumer-rules.pro") + } + compileOptions { + sourceCompatibility = JavaVersion.toVersion(libs.versions.jvm.get()) + targetCompatibility = JavaVersion.toVersion(libs.versions.jvm.get()) + } +} + +compose.resources { + publicResClass = false + packageOfResClass = "$libNamespace.resources" + generateResClass = always +} + +//publishing { +// repositories { +// val localProperties = gradleLocalProperties(rootDir, providers) +// var publishUserRepo = localProperties.getProperty(Configs.PUBLISH_REPO_USER) +// var publishTokenRepo = localProperties.getProperty(Configs.PUBLISH_REPO_TOKEN) +// +// if (publishUserRepo.isNullOrEmpty()) { +// publishUserRepo = "" +// localProperties.setProperty(Configs.PUBLISH_REPO_USER, publishUserRepo) +// } +// +// if (publishTokenRepo.isNullOrEmpty()) { +// publishTokenRepo = "" +// localProperties.setProperty(Configs.PUBLISH_REPO_TOKEN, publishTokenRepo) +// } +// +// if (publishUserRepo.isEmpty() || publishTokenRepo.isEmpty()) { +// localProperties.store( +// FileOutputStream(File(rootDir, Configs.LOCAL_PROPERTIES)), null +// ) +// } +// +// repositories { +// maven(Configs.MAVEN_URL) { +// name = Configs.PUBLISH_MAVEN_REPO_NAME +// credentials { +// username = publishUserRepo +// password = publishTokenRepo +// } +// } +// } +// } +//} +// diff --git a/ui/sample/src/androidMain/kotlin/com/metacto/core/ui/sample/di/Di.android.kt b/ui/sample/src/androidMain/kotlin/com/metacto/core/ui/sample/di/Di.android.kt new file mode 100644 index 00000000..e06efda7 --- /dev/null +++ b/ui/sample/src/androidMain/kotlin/com/metacto/core/ui/sample/di/Di.android.kt @@ -0,0 +1,7 @@ +package com.metacto.core.ui.sample.di + +import org.koin.dsl.module + +internal actual fun platformModule() = module { + // Add Android specific dependencies here +} \ No newline at end of file diff --git a/ui/sample/src/commonMain/kotlin/com/metacto/core/ui/sample/di/Di.kt b/ui/sample/src/commonMain/kotlin/com/metacto/core/ui/sample/di/Di.kt new file mode 100644 index 00000000..20c1432f --- /dev/null +++ b/ui/sample/src/commonMain/kotlin/com/metacto/core/ui/sample/di/Di.kt @@ -0,0 +1,12 @@ +package com.metacto.core.ui.sample.di + +import org.koin.core.module.Module +import org.koin.dsl.module + +fun sampleModule() = module { + // Common dependencies can be added here + + includes(platformModule()) +} + +internal expect fun platformModule(): Module \ No newline at end of file diff --git a/ui/sample/src/iosMain/kotlin/com/metacto/core/ui/sample/di/Di.ios.kt b/ui/sample/src/iosMain/kotlin/com/metacto/core/ui/sample/di/Di.ios.kt new file mode 100644 index 00000000..5063ae12 --- /dev/null +++ b/ui/sample/src/iosMain/kotlin/com/metacto/core/ui/sample/di/Di.ios.kt @@ -0,0 +1,7 @@ +package com.metacto.core.ui.sample.di + +import org.koin.dsl.module + +internal actual fun platformModule() = module { + // Add iOS specific dependencies here +} \ No newline at end of file diff --git a/ui/youtube/build.gradle.kts b/ui/youtube/build.gradle.kts new file mode 100644 index 00000000..4f398a97 --- /dev/null +++ b/ui/youtube/build.gradle.kts @@ -0,0 +1,138 @@ +import com.android.build.gradle.internal.cxx.configure.gradleLocalProperties +import org.jetbrains.kotlin.gradle.plugin.mpp.apple.XCFramework +import org.jetbrains.kotlin.konan.properties.Properties +import java.io.FileInputStream +import java.io.FileOutputStream + +plugins { + alias(libs.plugins.multiplatform) + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.parcelize) + alias(libs.plugins.compose) + alias(libs.plugins.kotlin.compose) + alias(libs.plugins.maven.publish) + alias(libs.plugins.signing) +} + +private val versionProperties = Properties().apply { + load(FileInputStream(File(rootProject.rootDir, Configs.VERSIONS_PROPERTIES))) +} + +private val currentVersion = versionProperties.getProperty(Configs.PUBLISH_VERSION) as String +private val libName = "youtube" +private val libNamespace = "com.metacto.core.ui.youtube" + +version = currentVersion +group = Configs.GROUP_ID + +kotlin { + androidTarget { + compilerOptions { + freeCompilerArgs.addAll("-P", "plugin:org.jetbrains.kotlin.parcelize:additionalAnnotation=com.metacto.kmm.core.CommonParcelize") + } + compilations.all { + kotlinOptions { + jvmTarget = libs.versions.jvm.get() + } + } + publishLibraryVariants("debug", "release") + } + + val xcf = XCFramework() + listOf( + iosX64(), + iosArm64(), + iosSimulatorArm64() + ).forEach { + it.binaries.framework(libName) { + baseName = libName + xcf.add(this) + isStatic = true + } + } + + metadata { + compilations.matching { it.name == "iosMain" }.all { + compileTaskProvider.configure { enabled = false } + } + } + + sourceSets { + commonMain.dependencies { + implementation(project(":ui:core-ui")) + implementation(libs.webview) + } + + androidMain.dependencies { + api(libs.youtube.core) + api(libs.youtube.customui) + } + + iosMain.dependencies { + // IOS DEPENDENCIES + } + } + + task("testClasses") +} + +android { + namespace = libNamespace + compileSdk = libs.versions.compileSdk.get().toInt() + + sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml") + sourceSets["main"].res.srcDirs("src/androidMain/res") + sourceSets["main"].resources.srcDirs("src/commonMain/resources") + sourceSets["main"].res.srcDirs("src/androidMain/res", "src/commonMain/resources") + + defaultConfig { + minSdk = libs.versions.minSdk.get().toInt() + targetSdk = libs.versions.targetSdk.get().toInt() + consumerProguardFiles("consumer-rules.pro") + } + compileOptions { + sourceCompatibility = JavaVersion.toVersion(libs.versions.jvm.get()) + targetCompatibility = JavaVersion.toVersion(libs.versions.jvm.get()) + } +} + +compose.resources { + publicResClass = false + packageOfResClass = "$libNamespace.resources" + generateResClass = always +} + +publishing { + repositories { + val localProperties = gradleLocalProperties(rootDir, providers) + var publishUserRepo = localProperties.getProperty(Configs.PUBLISH_REPO_USER) + var publishTokenRepo = localProperties.getProperty(Configs.PUBLISH_REPO_TOKEN) + + if (publishUserRepo.isNullOrEmpty()) { + publishUserRepo = "" + localProperties.setProperty(Configs.PUBLISH_REPO_USER, publishUserRepo) + } + + if (publishTokenRepo.isNullOrEmpty()) { + publishTokenRepo = "" + localProperties.setProperty(Configs.PUBLISH_REPO_TOKEN, publishTokenRepo) + } + + if (publishUserRepo.isEmpty() || publishTokenRepo.isEmpty()) { + localProperties.store( + FileOutputStream(File(rootDir, Configs.LOCAL_PROPERTIES)), null + ) + } + + repositories { + maven(Configs.MAVEN_URL) { + name = Configs.PUBLISH_MAVEN_REPO_NAME + credentials { + username = publishUserRepo + password = publishTokenRepo + } + } + } + } +} + diff --git a/ui/youtube/src/androidMain/kotlin/com/metacto/core/ui/youtube/di/Di.android.kt b/ui/youtube/src/androidMain/kotlin/com/metacto/core/ui/youtube/di/Di.android.kt new file mode 100644 index 00000000..8608bcf3 --- /dev/null +++ b/ui/youtube/src/androidMain/kotlin/com/metacto/core/ui/youtube/di/Di.android.kt @@ -0,0 +1,7 @@ +package com.metacto.core.ui.youtube.di + +import org.koin.dsl.module + +internal actual fun platformModule() = module { + // Add Android specific dependencies here +} \ No newline at end of file diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/CommonYouTubePlayer.android.kt b/ui/youtube/src/androidMain/kotlin/com/metacto/core/ui/youtube/player/CommonYouTubePlayer.android.kt similarity index 59% rename from coreapp/src/androidMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/CommonYouTubePlayer.android.kt rename to ui/youtube/src/androidMain/kotlin/com/metacto/core/ui/youtube/player/CommonYouTubePlayer.android.kt index d5593852..db1f748e 100644 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/CommonYouTubePlayer.android.kt +++ b/ui/youtube/src/androidMain/kotlin/com/metacto/core/ui/youtube/player/CommonYouTubePlayer.android.kt @@ -1,6 +1,6 @@ -package com.metacto.core.presentation.components.youtubePlayer +package com.metacto.core.ui.youtube.player -import com.metacto.core.presentation.components.youtubePlayer.model.YouTubeExecCommand +import com.metacto.core.ui.youtube.player.model.YouTubeExecCommand import com.multiplatform.webview.web.WebViewNavigator internal actual fun executeCommand( diff --git a/coreapp/src/androidMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/YouTubePlayer.android.kt b/ui/youtube/src/androidMain/kotlin/com/metacto/core/ui/youtube/player/YouTubePlayer.android.kt similarity index 94% rename from coreapp/src/androidMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/YouTubePlayer.android.kt rename to ui/youtube/src/androidMain/kotlin/com/metacto/core/ui/youtube/player/YouTubePlayer.android.kt index 36abb4f4..e9e46799 100644 --- a/coreapp/src/androidMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/YouTubePlayer.android.kt +++ b/ui/youtube/src/androidMain/kotlin/com/metacto/core/ui/youtube/player/YouTubePlayer.android.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.youtubePlayer +package com.metacto.core.ui.youtube.player import android.app.Activity import android.content.pm.ActivityInfo @@ -15,8 +15,7 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.viewinterop.AndroidView -import com.metacto.core.utils.extensions.OnLifecycleEvent -import com.metacto.strapikmm.util.Logger +import com.metacto.core.ui.extensions.OnLifecycleEvent import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.PlayerConstants import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.YouTubePlayer import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.listeners.AbstractYouTubePlayerListener @@ -24,8 +23,6 @@ import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.listeners.Ful import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.options.IFramePlayerOptions import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.views.YouTubePlayerView -private val logger = Logger("YoutubePlayer") - @Composable actual fun YouTubePlayer( modifier: Modifier, @@ -92,7 +89,6 @@ actual fun YouTubePlayer( error: PlayerConstants.PlayerError, ) { super.onError(youTubePlayer, error) - logger.log("iFramePlayer Error Reason = $error") } } } diff --git a/ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/di/Di.kt b/ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/di/Di.kt new file mode 100644 index 00000000..82c74b01 --- /dev/null +++ b/ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/di/Di.kt @@ -0,0 +1,18 @@ +package com.metacto.core.ui.youtube.di + +import com.metacto.core.ui.di.commonViewModel +import com.metacto.core.ui.youtube.screen.YoutubeViewModel +import org.koin.core.module.Module +import org.koin.dsl.module + +fun youtubeModule() = module { + // Common dependencies can be added here + + includes(platformModule()) + + commonViewModel { + YoutubeViewModel() + } +} + +internal expect fun platformModule(): Module \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/CommonYouTubePlayer.kt b/ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/player/CommonYouTubePlayer.kt similarity index 84% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/CommonYouTubePlayer.kt rename to ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/player/CommonYouTubePlayer.kt index bbd948d3..cad6b197 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/CommonYouTubePlayer.kt +++ b/ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/player/CommonYouTubePlayer.kt @@ -1,15 +1,15 @@ -package com.metacto.core.presentation.components.youtubePlayer +package com.metacto.core.ui.youtube.player import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.remember import androidx.compose.ui.Modifier -import com.metacto.core.presentation.components.youtubePlayer.handler.YouTubeActionHandler -import com.metacto.core.presentation.components.youtubePlayer.model.YouTubeEvent -import com.metacto.core.presentation.components.youtubePlayer.model.YouTubeExecCommand -import com.metacto.core.presentation.components.youtubePlayer.provider.ConstantHTMLContentProvider -import com.metacto.core.presentation.components.youtubePlayer.provider.HTMLContentProvider +import com.metacto.core.ui.youtube.player.handler.YouTubeActionHandler +import com.metacto.core.ui.youtube.player.model.YouTubeEvent +import com.metacto.core.ui.youtube.player.model.YouTubeExecCommand +import com.metacto.core.ui.youtube.player.provider.ConstantHTMLContentProvider +import com.metacto.core.ui.youtube.player.provider.HTMLContentProvider import com.multiplatform.webview.web.WebView import com.multiplatform.webview.web.WebViewNavigator import com.multiplatform.webview.web.rememberWebViewNavigator diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/SimpleYouTubePlayerOptionsBuilder.kt b/ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/player/SimpleYouTubePlayerOptionsBuilder.kt similarity index 98% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/SimpleYouTubePlayerOptionsBuilder.kt rename to ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/player/SimpleYouTubePlayerOptionsBuilder.kt index 63ce43f6..a01d1018 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/SimpleYouTubePlayerOptionsBuilder.kt +++ b/ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/player/SimpleYouTubePlayerOptionsBuilder.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.youtubePlayer +package com.metacto.core.ui.youtube.player import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/YouTubePlayer.kt b/ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/player/YouTubePlayer.kt similarity index 83% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/YouTubePlayer.kt rename to ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/player/YouTubePlayer.kt index 5499fd21..b7708e9b 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/YouTubePlayer.kt +++ b/ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/player/YouTubePlayer.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.youtubePlayer +package com.metacto.core.ui.youtube.player import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/YouTubePlayerHostState.kt b/ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/player/YouTubePlayerHostState.kt similarity index 95% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/YouTubePlayerHostState.kt rename to ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/player/YouTubePlayerHostState.kt index c9ec93bc..61048822 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/YouTubePlayerHostState.kt +++ b/ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/player/YouTubePlayerHostState.kt @@ -1,11 +1,11 @@ -package com.metacto.core.presentation.components.youtubePlayer +package com.metacto.core.ui.youtube.player import androidx.compose.runtime.Stable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue -import com.metacto.core.presentation.components.youtubePlayer.model.YouTubeEvent -import com.metacto.core.presentation.components.youtubePlayer.model.YouTubeExecCommand +import com.metacto.core.ui.youtube.player.model.YouTubeEvent +import com.metacto.core.ui.youtube.player.model.YouTubeExecCommand import kotlinx.coroutines.CancellableContinuation import kotlinx.coroutines.suspendCancellableCoroutine import kotlinx.coroutines.sync.Mutex diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/YouTubePlayerOptionsBuilder.kt b/ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/player/YouTubePlayerOptionsBuilder.kt similarity index 99% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/YouTubePlayerOptionsBuilder.kt rename to ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/player/YouTubePlayerOptionsBuilder.kt index c3e3573d..b8cb0c3e 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/YouTubePlayerOptionsBuilder.kt +++ b/ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/player/YouTubePlayerOptionsBuilder.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.youtubePlayer +package com.metacto.core.ui.youtube.player /** * YouTube player options builder. diff --git a/ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/player/YouTubeVideoId.kt b/ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/player/YouTubeVideoId.kt new file mode 100644 index 00000000..3bb85a19 --- /dev/null +++ b/ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/player/YouTubeVideoId.kt @@ -0,0 +1,3 @@ +package com.metacto.core.ui.youtube.player + +internal data class YouTubeVideoId(val id: String) \ No newline at end of file diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/handler/YouTubeActionHandler.kt b/ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/player/handler/YouTubeActionHandler.kt similarity index 52% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/handler/YouTubeActionHandler.kt rename to ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/player/handler/YouTubeActionHandler.kt index 6ad155be..fbc62d80 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/handler/YouTubeActionHandler.kt +++ b/ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/player/handler/YouTubeActionHandler.kt @@ -1,21 +1,17 @@ -package com.metacto.core.presentation.components.youtubePlayer.handler +package com.metacto.core.ui.youtube.player.handler -import com.metacto.core.presentation.components.youtubePlayer.model.YouTubeEvent -import com.metacto.core.presentation.components.youtubePlayer.model.YouTubeOperation -import com.metacto.strapikmm.util.Logger +import com.metacto.core.ui.youtube.player.model.YouTubeEvent +import com.metacto.core.ui.youtube.player.model.YouTubeOperation internal object YouTubeActionHandler { private val REGEX = "ytplayer://([A-z]+)(\\?data=([A-z\\d.]+))*".toRegex() - private val logger = Logger("YoutubePlayer") fun handleAction(url: String?): YouTubeEvent? { val result = REGEX.matchEntire(url.orEmpty()) return result?.let { matchResult -> val operation = matchResult.groupValues[1].let(YouTubeOperation.Companion::fromStringOrNull) val data = matchResult.groupValues[3] - logger.log("webViewState. OPERATION_HANDLED: Path: $url " + - "Operation: $operation Data: $data") YouTubeEvent.fromStringOrNull(operation, data) } } diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/model/YouTubeEvent.kt b/ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/player/model/YouTubeEvent.kt similarity index 95% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/model/YouTubeEvent.kt rename to ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/player/model/YouTubeEvent.kt index 64d1da48..4a32da62 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/model/YouTubeEvent.kt +++ b/ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/player/model/YouTubeEvent.kt @@ -1,6 +1,6 @@ -package com.metacto.core.presentation.components.youtubePlayer.model +package com.metacto.core.ui.youtube.player.model -import com.metacto.core.presentation.components.youtubePlayer.YouTubeVideoId +import com.metacto.core.ui.youtube.player.YouTubeVideoId import kotlin.time.Duration import kotlin.time.DurationUnit import kotlin.time.toDuration diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/model/YouTubeExecCommand.kt b/ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/player/model/YouTubeExecCommand.kt similarity index 94% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/model/YouTubeExecCommand.kt rename to ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/player/model/YouTubeExecCommand.kt index c7a6e341..99b8592c 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/model/YouTubeExecCommand.kt +++ b/ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/player/model/YouTubeExecCommand.kt @@ -1,6 +1,6 @@ -package com.metacto.core.presentation.components.youtubePlayer.model +package com.metacto.core.ui.youtube.player.model -import com.metacto.core.presentation.components.youtubePlayer.YouTubeVideoId +import com.metacto.core.ui.youtube.player.YouTubeVideoId import kotlin.time.Duration internal sealed interface YouTubeExecCommand { diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/model/YouTubeOperation.kt b/ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/player/model/YouTubeOperation.kt similarity index 88% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/model/YouTubeOperation.kt rename to ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/player/model/YouTubeOperation.kt index 4bfed4f5..558b5223 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/model/YouTubeOperation.kt +++ b/ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/player/model/YouTubeOperation.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.youtubePlayer.model +package com.metacto.core.ui.youtube.player.model internal enum class YouTubeOperation(val operationName: String) { READY("onReady"), diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/provider/ConstantHTMLContentProvider.kt b/ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/player/provider/ConstantHTMLContentProvider.kt similarity index 98% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/provider/ConstantHTMLContentProvider.kt rename to ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/player/provider/ConstantHTMLContentProvider.kt index 82410bad..6be40bda 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/provider/ConstantHTMLContentProvider.kt +++ b/ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/player/provider/ConstantHTMLContentProvider.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.youtubePlayer.provider +package com.metacto.core.ui.youtube.player.provider internal class ConstantHTMLContentProvider : HTMLContentProvider { diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/provider/HTMLContentProvider.kt b/ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/player/provider/HTMLContentProvider.kt similarity index 52% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/provider/HTMLContentProvider.kt rename to ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/player/provider/HTMLContentProvider.kt index d2aa27a0..a80d58d1 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/provider/HTMLContentProvider.kt +++ b/ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/player/provider/HTMLContentProvider.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.youtubePlayer.provider +package com.metacto.core.ui.youtube.player.provider internal interface HTMLContentProvider { fun provideHTMLContent(): String diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/youtube/YoutubeContract.kt b/ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/screen/YoutubeContract.kt similarity index 76% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/youtube/YoutubeContract.kt rename to ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/screen/YoutubeContract.kt index 3c7df3ad..fe4356f8 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/youtube/YoutubeContract.kt +++ b/ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/screen/YoutubeContract.kt @@ -1,8 +1,8 @@ -package com.metacto.core.presentation.youtube +package com.metacto.core.ui.youtube.screen -import com.metacto.core.presentation.base.ViewEvent -import com.metacto.core.presentation.base.ViewSideEffect -import com.metacto.core.presentation.base.ViewState +import com.metacto.core.ui.base.ViewEvent +import com.metacto.core.ui.base.ViewSideEffect +import com.metacto.core.ui.base.ViewState class YoutubeContract { diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/youtube/YoutubeScreen.kt b/ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/screen/YoutubeScreen.kt similarity index 69% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/youtube/YoutubeScreen.kt rename to ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/screen/YoutubeScreen.kt index 3f206910..bf485543 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/youtube/YoutubeScreen.kt +++ b/ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/screen/YoutubeScreen.kt @@ -1,19 +1,18 @@ -package com.metacto.core.presentation.youtube +package com.metacto.core.ui.youtube.screen import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect -import com.metacto.core.presentation.base.BaseScreen -import com.metacto.core.presentation.base.SIDE_EFFECTS_KEY -import com.metacto.core.presentation.base.rememberViewModel -import com.metacto.core.presentation.youtube.YoutubeContract.Event -import com.metacto.core.presentation.youtube.components.YoutubeContent +import com.metacto.core.ui.base.CoreScreen +import com.metacto.core.ui.base.rememberViewModel +import com.metacto.core.ui.youtube.screen.YoutubeContract.Event +import com.metacto.core.ui.youtube.screen.components.YoutubeContent class YoutubeScreen( private val videoId: String, private val shouldAutoPlay: Boolean = true, private val showControls: Boolean = true, private val showFullScreenButton: Boolean = true -) : BaseScreen() { +) : CoreScreen() { override val screenTag: String get() = "YoutubeScreen" @@ -24,7 +23,7 @@ class YoutubeScreen( val viewModel = rememberViewModel() // Init view model - LaunchedEffect(SIDE_EFFECTS_KEY) { + LaunchedEffect(Unit) { viewModel.setEvent( Event.Init( videoId = videoId, diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/youtube/YoutubeViewModel.kt b/ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/screen/YoutubeViewModel.kt similarity index 80% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/youtube/YoutubeViewModel.kt rename to ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/screen/YoutubeViewModel.kt index b9406e11..a2415da5 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/youtube/YoutubeViewModel.kt +++ b/ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/screen/YoutubeViewModel.kt @@ -1,9 +1,9 @@ -package com.metacto.core.presentation.youtube +package com.metacto.core.ui.youtube.screen -import com.metacto.core.presentation.base.CoreViewModel -import com.metacto.core.presentation.youtube.YoutubeContract.Effect -import com.metacto.core.presentation.youtube.YoutubeContract.Event -import com.metacto.core.presentation.youtube.YoutubeContract.State +import com.metacto.core.ui.base.CoreViewModel +import com.metacto.core.ui.youtube.screen.YoutubeContract.Event +import com.metacto.core.ui.youtube.screen.YoutubeContract.State +import com.metacto.core.ui.youtube.screen.YoutubeContract.Effect class YoutubeViewModel : CoreViewModel() { diff --git a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/youtube/components/YoutubeContent.kt b/ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/screen/components/YoutubeContent.kt similarity index 81% rename from coreapp/src/commonMain/kotlin/com/metacto/core/presentation/youtube/components/YoutubeContent.kt rename to ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/screen/components/YoutubeContent.kt index 5636328e..0361ec7e 100644 --- a/coreapp/src/commonMain/kotlin/com/metacto/core/presentation/youtube/components/YoutubeContent.kt +++ b/ui/youtube/src/commonMain/kotlin/com/metacto/core/ui/youtube/screen/components/YoutubeContent.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.youtube.components +package com.metacto.core.ui.youtube.screen.components import androidx.compose.foundation.background import androidx.compose.foundation.layout.Column @@ -9,17 +9,17 @@ import androidx.compose.foundation.layout.navigationBars import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.statusBars import androidx.compose.foundation.layout.windowInsetsPadding -import androidx.compose.material.Icon -import androidx.compose.material.IconButton import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.filled.ArrowBack +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import com.metacto.core.presentation.components.youtubePlayer.YouTubePlayer -import com.metacto.core.presentation.theme.CoreTheme.colors -import com.metacto.core.presentation.theme.CoreTheme.spacings -import com.metacto.core.presentation.youtube.YoutubeContract.Event -import com.metacto.core.presentation.youtube.YoutubeContract.State +import com.metacto.core.ui.theme.CoreTheme.colors +import com.metacto.core.ui.theme.CoreTheme.spacings +import com.metacto.core.ui.youtube.player.YouTubePlayer +import com.metacto.core.ui.youtube.screen.YoutubeContract.Event +import com.metacto.core.ui.youtube.screen.YoutubeContract.State @Composable internal fun YoutubeContent( diff --git a/ui/youtube/src/iosMain/kotlin/com/metacto/core/ui/youtube/di/Di.ios.kt b/ui/youtube/src/iosMain/kotlin/com/metacto/core/ui/youtube/di/Di.ios.kt new file mode 100644 index 00000000..fb0ccbb6 --- /dev/null +++ b/ui/youtube/src/iosMain/kotlin/com/metacto/core/ui/youtube/di/Di.ios.kt @@ -0,0 +1,7 @@ +package com.metacto.core.ui.youtube.di + +import org.koin.dsl.module + +internal actual fun platformModule() = module { + // Add iOS specific dependencies here +} \ No newline at end of file diff --git a/coreapp/src/iosMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/CommonYouTubePlayer.ios.kt b/ui/youtube/src/iosMain/kotlin/com/metacto/core/ui/youtube/player/CommonYouTubePlayer.ios.kt similarity index 60% rename from coreapp/src/iosMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/CommonYouTubePlayer.ios.kt rename to ui/youtube/src/iosMain/kotlin/com/metacto/core/ui/youtube/player/CommonYouTubePlayer.ios.kt index db12ace1..a23859a9 100644 --- a/coreapp/src/iosMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/CommonYouTubePlayer.ios.kt +++ b/ui/youtube/src/iosMain/kotlin/com/metacto/core/ui/youtube/player/CommonYouTubePlayer.ios.kt @@ -1,7 +1,7 @@ -package com.metacto.core.presentation.components.youtubePlayer +package com.metacto.core.ui.youtube.player -import com.metacto.core.presentation.components.youtubePlayer.model.YouTubeExecCommand -import com.metacto.core.utils.extensions.format +import com.metacto.core.extensions.format +import com.metacto.core.ui.youtube.player.model.YouTubeExecCommand import com.multiplatform.webview.web.WebViewNavigator private const val COMMAND_EXECUTOR_PATTERN = "javascript:%s" diff --git a/coreapp/src/iosMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/YouTubePlayer.ios.kt b/ui/youtube/src/iosMain/kotlin/com/metacto/core/ui/youtube/player/YouTubePlayer.ios.kt similarity index 94% rename from coreapp/src/iosMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/YouTubePlayer.ios.kt rename to ui/youtube/src/iosMain/kotlin/com/metacto/core/ui/youtube/player/YouTubePlayer.ios.kt index cee848d4..58ee39fd 100644 --- a/coreapp/src/iosMain/kotlin/com/metacto/core/presentation/components/youtubePlayer/YouTubePlayer.ios.kt +++ b/ui/youtube/src/iosMain/kotlin/com/metacto/core/ui/youtube/player/YouTubePlayer.ios.kt @@ -1,4 +1,4 @@ -package com.metacto.core.presentation.components.youtubePlayer +package com.metacto.core.ui.youtube.player import androidx.compose.runtime.Composable import androidx.compose.runtime.remember diff --git a/version-catalog/build.gradle.kts b/version-catalog/build.gradle.kts new file mode 100644 index 00000000..5a087201 --- /dev/null +++ b/version-catalog/build.gradle.kts @@ -0,0 +1,67 @@ +import com.android.build.gradle.internal.cxx.configure.gradleLocalProperties +import org.jetbrains.kotlin.konan.properties.Properties +import java.io.FileInputStream +import java.io.FileOutputStream + + +plugins { + alias(libs.plugins.version.catalog) + alias(libs.plugins.maven.publish) +} + +catalog { + versionCatalog { + from(files("../gradle/libs.versions.toml")) + } +} + +private val versionProperties = Properties().apply { + load(FileInputStream(File(rootProject.rootDir, Configs.VERSIONS_PROPERTIES))) +} + +private val currentVersion = versionProperties.getProperty(Configs.PUBLISH_VERSION) as String +private val libName = "version-catalog" +group = Configs.GROUP_ID +version = currentVersion + +publishing { + val localProperties = gradleLocalProperties(rootDir, providers) + var publishUserRepo = localProperties.getProperty(Configs.PUBLISH_REPO_USER) + var publishTokenRepo = localProperties.getProperty(Configs.PUBLISH_REPO_TOKEN) + + if (publishUserRepo.isNullOrEmpty()) { + publishUserRepo = "" + localProperties.setProperty(Configs.PUBLISH_REPO_USER, publishUserRepo) + } + + if (publishTokenRepo.isNullOrEmpty()) { + publishTokenRepo = "" + localProperties.setProperty(Configs.PUBLISH_REPO_TOKEN, publishTokenRepo) + } + + if (publishUserRepo.isEmpty() || publishTokenRepo.isEmpty()) { + localProperties.store( + FileOutputStream(File(rootDir, Configs.LOCAL_PROPERTIES)), null + ) + } + + publications { + create("maven") { + from(components["versionCatalog"]) + groupId = Configs.GROUP_ID + artifactId = libName + version = currentVersion + } + } + + repositories { + mavenLocal() + maven(Configs.MAVEN_URL) { + name = Configs.PUBLISH_MAVEN_REPO_NAME + credentials { + username = publishUserRepo + password = publishTokenRepo + } + } + } +} diff --git a/versions.properties b/versions.properties new file mode 100644 index 00000000..624c85b0 --- /dev/null +++ b/versions.properties @@ -0,0 +1 @@ +PUBLISH_CORE_VERSION=0.2.106-alpha