diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..57066b3 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,40 @@ +ads +android-signing-keystore.jks +api-5245190277294621651-718463-f914fb7573c6.json +app +appintro +build +build.gradle +bundledemoji +CHANGELOG +Dockerfile +.dockerignore +extras +Gemfile +Gemfile.lock +.git +.gitignore +.gitlab-ci.yml +.gitmodules +.gradle +gradle +gradle.properties +gradlew +gradlew.bat +handwashing_app_logo.png +handwashing_app_logo.webp +handwashing_icon.png +handwashing_icon.webp +.idea +keystore.properties +LICENSE +local.properties +public +README.md +secrets.properties +settings.gradle +test-app-js +tgs +.vscode +functions/node_modules +functions/ui-debug.log diff --git a/.firebaserc b/.firebaserc new file mode 100644 index 0000000..f92f8a3 --- /dev/null +++ b/.firebaserc @@ -0,0 +1,5 @@ +{ + "projects": { + "default": "handwashing" + } +} diff --git a/.gitignore b/.gitignore index 9752de8..e005d3d 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,4 @@ api-5245190277294621651-718463-f914fb7573c6.json *.jks google-services.json services.xml +test-app-js/ diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml deleted file mode 100644 index 808e28c..0000000 --- a/.gitlab-ci.yml +++ /dev/null @@ -1,128 +0,0 @@ -# This file is a template, and might need editing before it works on your project. -# Read more about how to use this script on this blog post https://about.gitlab.com/2019/01/28/android-publishing-with-gitlab-and-fastlane/ -# You will also need to configure your build.gradle, Dockerfile, and fastlane configuration to make this work. -# If you are looking for a simpler template that does not publish, see the Android template. - -stages: - - environment - - build - - test - - deploy - - internal - - alpha - - beta - - production - - -.updateContainerJob: - image: docker:19.03.0 - variables: - DOCKER_DRIVER: overlay2 - DOCKER_TLS_CERTDIR: "/certs" - # CI_REGISTRY: registry.gitlab.com - stage: environment - services: - - docker:19.03.0-dind - before_script: - - docker info - script: - - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY - - docker pull $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG || true - - docker build --cache-from $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG -t $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG . - - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG - -updateContainer: - extends: .updateContainerJob - only: - changes: - - Dockerfile - -ensureContainer: - extends: .updateContainerJob - allow_failure: true - before_script: - - "mkdir -p ~/.docker && echo '{\"experimental\": \"enabled\"}' > ~/.docker/config.json" - - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY - # Skip update container `script` if the container already exists - # via https://gitlab.com/gitlab-org/gitlab-foss/issues/26866#note_97609397 -> https://stackoverflow.com/a/52077071/796832 - - docker manifest inspect $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG > /dev/null && exit || true - - -.build_job: - image: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG - stage: build - before_script: - # We store this binary file in a variable as hex with this command: `xxd -p android-app.jks` - # Then we convert the hex back to a binary file - - echo "$signing_jks_file_hex" | xxd -r -p - > android-signing-keystore.jks - - "export VERSION_CODE=$CI_PIPELINE_IID && echo $VERSION_CODE" - - "export VERSION_SHA=`echo ${CI_COMMIT_SHA:0:8}` && echo $VERSION_SHA" - after_script: - - rm -f android-signing-keystore.jks || true - artifacts: - paths: - - app/build/outputs - -buildDebug: - extends: .build_job - script: - - bundle exec fastlane buildDebug - -buildRelease: - extends: .build_job - script: - - bundle exec fastlane buildRelease - environment: - name: production - -testDebug: - image: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG - stage: test - dependencies: - - buildDebug - script: - - bundle exec fastlane test - -publishInternal: - image: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG - stage: internal - dependencies: - - buildRelease - when: manual - before_script: - - echo $google_play_service_account_api_key_json > ~/google_play_api_key.json - after_script: - - rm ~/google_play_api_key.json - script: - - bundle exec fastlane internal - -.promote_job: - image: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG - when: manual - dependencies: [] - before_script: - - echo $google_play_service_account_api_key_json > ~/google_play_api_key.json - after_script: - - rm ~/google_play_api_key.json - -promoteAlpha: - extends: .promote_job - stage: alpha - script: - - bundle exec fastlane promote_internal_to_alpha - -promoteBeta: - extends: .promote_job - stage: beta - script: - - bundle exec fastlane promote_alpha_to_beta - -promoteProduction: - extends: .promote_job - stage: production - # We only allow production promotion on `master` because - # it has its own production scoped secret variables - only: - - master - script: - - bundle exec fastlane promote_beta_to_production diff --git a/Dockerfile b/Dockerfile index 33c11ae..9946244 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,97 +1,11 @@ -# ====================================================================== # -# Android SDK Docker Image -# ====================================================================== # - -# Base image -# ---------------------------------------------------------------------- # -FROM ubuntu:18.04 - -# Author -# ---------------------------------------------------------------------- # -LABEL maintainer "thyrlian@gmail.com" - -# support multiarch: i386 architecture -# install Java -# install essential tools -# install Qt -RUN dpkg --add-architecture i386 && \ - apt update -y && \ - apt install -y --no-install-recommends libncurses5:i386 libc6:i386 libstdc++6:i386 lib32gcc1 lib32ncurses5 lib32z1 zlib1g:i386 && \ - apt install -y --no-install-recommends openjdk-8-jdk && \ - apt install -y --no-install-recommends git wget unzip && \ - apt install -y --no-install-recommends qt5-default - -# download and install Gradle -# https://services.gradle.org/distributions/ -ARG GRADLE_VERSION=6.1.1 -ARG GRADLE_DIST=bin -RUN cd /opt && \ - wget -q https://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-${GRADLE_DIST}.zip && \ - unzip gradle*.zip && \ - ls -d */ | sed 's/\/*$//g' | xargs -I{} mv {} gradle && \ - rm gradle*.zip - -# download and install Kotlin compiler -# https://github.com/JetBrains/kotlin/releases/latest -ARG KOTLIN_VERSION=1.3.71 -RUN cd /opt && \ - wget -q https://github.com/JetBrains/kotlin/releases/download/v${KOTLIN_VERSION}/kotlin-compiler-${KOTLIN_VERSION}.zip && \ - unzip *kotlin*.zip && \ - rm *kotlin*.zip - -# download and install Android SDK -# https://developer.android.com/studio/#downloads -ARG ANDROID_SDK_VERSION=4333796 -ENV ANDROID_HOME /opt/android-sdk -RUN mkdir -p ${ANDROID_HOME} && cd ${ANDROID_HOME} && \ - wget -q https://dl.google.com/android/repository/sdk-tools-linux-${ANDROID_SDK_VERSION}.zip && \ - unzip *tools*linux*.zip && \ - rm *tools*linux*.zip - -# set the environment variables -ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64 -ENV GRADLE_HOME /opt/gradle -ENV KOTLIN_HOME /opt/kotlinc -ENV PATH ${PATH}:${GRADLE_HOME}/bin:${KOTLIN_HOME}/bin:${ANDROID_HOME}/emulator:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools:${ANDROID_HOME}/tools/bin -ENV _JAVA_OPTIONS -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -# WORKAROUND: for issue https://issuetracker.google.com/issues/37137213 -ENV LD_LIBRARY_PATH ${ANDROID_HOME}/emulator/lib64:${ANDROID_HOME}/emulator/lib64/qt/lib - -# accept the license agreements of the SDK components -ADD license_accepter.sh /opt/ -RUN chmod +x /opt/license_accepter.sh && /opt/license_accepter.sh $ANDROID_HOME - -# setup adb server -EXPOSE 5037 - -# install and configure SSH server -EXPOSE 22 -ADD sshd-banner /etc/ssh/ -ADD authorized_keys /tmp/ -RUN apt-get update -y && \ - apt-get install -y --no-install-recommends openssh-server supervisor locales && \ - mkdir -p /var/run/sshd /var/log/supervisord && \ - locale-gen en en_US en_US.UTF-8 && \ - apt-get remove -y locales && apt-get autoremove -y && \ - FILE_SSHD_CONFIG="/etc/ssh/sshd_config" && \ - echo "\nBanner /etc/ssh/sshd-banner" >> $FILE_SSHD_CONFIG && \ - echo "\nPermitUserEnvironment=yes" >> $FILE_SSHD_CONFIG && \ - ssh-keygen -q -N "" -f /root/.ssh/id_rsa && \ - FILE_SSH_ENV="/root/.ssh/environment" && \ - touch $FILE_SSH_ENV && chmod 600 $FILE_SSH_ENV && \ - printenv | grep "JAVA_HOME\|GRADLE_HOME\|KOTLIN_HOME\|ANDROID_HOME\|LD_LIBRARY_PATH\|PATH" >> $FILE_SSH_ENV && \ - FILE_AUTH_KEYS="/root/.ssh/authorized_keys" && \ - touch $FILE_AUTH_KEYS && chmod 600 $FILE_AUTH_KEYS && \ - for file in /tmp/*.pub; \ - do if [ -f "$file" ]; then echo "\n" >> $FILE_AUTH_KEYS && cat $file >> $FILE_AUTH_KEYS && echo "\n" >> $FILE_AUTH_KEYS; fi; \ - done && \ - (rm /tmp/*.pub 2> /dev/null || true) - -ADD supervisord.conf /etc/supervisor/conf.d/ -CMD ["/usr/bin/supervisord"] - -# install Fastlane -COPY Gemfile.lock . -COPY Gemfile . -RUN gem install bundle -RUN bundle install \ No newline at end of file +FROM node:lts-alpine +# app directory +WORKDIR /usr/src/app +# Copy neccessary files +COPY ./functions ./functions +COPY ./firebase.json ./ +COPY ./.firebaserc ./ +WORKDIR /usr/src/app/functions +RUN npm i --only=production -g pm2@latest firebase-tools cross-env typescript +RUN npm ci --only=production +CMD ["pm2-runtime", "start", "daemon.json"] diff --git a/Dockerfile.old b/Dockerfile.old deleted file mode 100644 index 64b8d2e..0000000 --- a/Dockerfile.old +++ /dev/null @@ -1,31 +0,0 @@ -FROM openjdk:8-jdk - -# Just matched `app/build.gradle` -ENV ANDROID_COMPILE_SDK "29" -# Just matched `app/build.gradle` -ENV ANDROID_BUILD_TOOLS "29.0.3" -# Version from https://developer.android.com/studio/releases/sdk-tools -ENV ANDROID_SDK_TOOLS "26.1.1" - -ENV ANDROID_HOME /android-sdk-linux -ENV PATH="${PATH}:/android-sdk-linux/platform-tools/" - -# install OS packages -RUN apt --quiet update --yes -RUN apt --quiet install --yes wget tar unzip lib32stdc++6 lib32z1 build-essential ruby ruby-dev -# We use this for xxd hex->binary -RUN apt --quiet install --yes vim-common -# install Android SDK -RUN wget --quiet --output-document=android-sdk.tgz https://dl.google.com/android/android-sdk_r${ANDROID_SDK_TOOLS}-linux.tgz -RUN tar --extract --gzip --file=android-sdk.tgz -RUN echo y | android-sdk-linux/tools/android --silent update sdk --no-ui --all --filter android-${ANDROID_COMPILE_SDK} -RUN echo y | android-sdk-linux/tools/android --silent update sdk --no-ui --all --filter platform-tools -RUN echo y | android-sdk-linux/tools/android --silent update sdk --no-ui --all --filter build-tools-${ANDROID_BUILD_TOOLS} -RUN echo y | android-sdk-linux/tools/android --silent update sdk --no-ui --all --filter extra-android-m2repository -RUN echo y | android-sdk-linux/tools/android --silent update sdk --no-ui --all --filter extra-google-google_play_services -RUN echo y | android-sdk-linux/tools/android --silent update sdk --no-ui --all --filter extra-google-m2repository -# install Fastlane -COPY Gemfile.lock . -COPY Gemfile . -RUN gem install bundle -RUN bundle install \ No newline at end of file diff --git a/Gemfile b/Gemfile deleted file mode 100644 index 7a118b4..0000000 --- a/Gemfile +++ /dev/null @@ -1,3 +0,0 @@ -source "https://rubygems.org" - -gem "fastlane" diff --git a/Gemfile.lock b/Gemfile.lock deleted file mode 100644 index 8674c5e..0000000 --- a/Gemfile.lock +++ /dev/null @@ -1,179 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - CFPropertyList (3.0.2) - addressable (2.7.0) - public_suffix (>= 2.0.2, < 5.0) - atomos (0.1.3) - aws-eventstream (1.0.3) - aws-partitions (1.295.0) - aws-sdk-core (3.93.0) - aws-eventstream (~> 1.0, >= 1.0.2) - aws-partitions (~> 1, >= 1.239.0) - aws-sigv4 (~> 1.1) - jmespath (~> 1.0) - aws-sdk-kms (1.30.0) - aws-sdk-core (~> 3, >= 3.71.0) - aws-sigv4 (~> 1.1) - aws-sdk-s3 (1.61.2) - aws-sdk-core (~> 3, >= 3.83.0) - aws-sdk-kms (~> 1) - aws-sigv4 (~> 1.1) - aws-sigv4 (1.1.1) - aws-eventstream (~> 1.0, >= 1.0.2) - babosa (1.0.3) - claide (1.0.3) - colored (1.2) - colored2 (3.1.2) - commander-fastlane (4.4.6) - highline (~> 1.7.2) - declarative (0.0.10) - declarative-option (0.1.0) - digest-crc (0.5.1) - domain_name (0.5.20190701) - unf (>= 0.0.5, < 1.0.0) - dotenv (2.7.5) - emoji_regex (1.0.1) - excon (0.73.0) - faraday (0.17.3) - multipart-post (>= 1.2, < 3) - faraday-cookie_jar (0.0.6) - faraday (>= 0.7.4) - http-cookie (~> 1.0.0) - faraday_middleware (0.13.1) - faraday (>= 0.7.4, < 1.0) - fastimage (2.1.7) - fastlane (2.145.0) - CFPropertyList (>= 2.3, < 4.0.0) - addressable (>= 2.3, < 3.0.0) - aws-sdk-s3 (~> 1.0) - babosa (>= 1.0.2, < 2.0.0) - bundler (>= 1.12.0, < 3.0.0) - colored - commander-fastlane (>= 4.4.6, < 5.0.0) - dotenv (>= 2.1.1, < 3.0.0) - emoji_regex (>= 0.1, < 2.0) - excon (>= 0.71.0, < 1.0.0) - faraday (~> 0.17) - faraday-cookie_jar (~> 0.0.6) - faraday_middleware (~> 0.13.1) - fastimage (>= 2.1.0, < 3.0.0) - gh_inspector (>= 1.1.2, < 2.0.0) - google-api-client (>= 0.29.2, < 0.37.0) - google-cloud-storage (>= 1.15.0, < 2.0.0) - highline (>= 1.7.2, < 2.0.0) - json (< 3.0.0) - jwt (~> 2.1.0) - mini_magick (>= 4.9.4, < 5.0.0) - multi_xml (~> 0.5) - multipart-post (~> 2.0.0) - plist (>= 3.1.0, < 4.0.0) - public_suffix (~> 2.0.0) - rubyzip (>= 1.3.0, < 2.0.0) - security (= 0.1.3) - simctl (~> 1.6.3) - slack-notifier (>= 2.0.0, < 3.0.0) - terminal-notifier (>= 2.0.0, < 3.0.0) - terminal-table (>= 1.4.5, < 2.0.0) - tty-screen (>= 0.6.3, < 1.0.0) - tty-spinner (>= 0.8.0, < 1.0.0) - word_wrap (~> 1.0.0) - xcodeproj (>= 1.13.0, < 2.0.0) - xcpretty (~> 0.3.0) - xcpretty-travis-formatter (>= 0.0.3) - gh_inspector (1.1.3) - google-api-client (0.36.4) - addressable (~> 2.5, >= 2.5.1) - googleauth (~> 0.9) - httpclient (>= 2.8.1, < 3.0) - mini_mime (~> 1.0) - representable (~> 3.0) - retriable (>= 2.0, < 4.0) - signet (~> 0.12) - google-cloud-core (1.5.0) - google-cloud-env (~> 1.0) - google-cloud-errors (~> 1.0) - google-cloud-env (1.3.1) - faraday (>= 0.17.3, < 2.0) - google-cloud-errors (1.0.0) - google-cloud-storage (1.26.0) - addressable (~> 2.5) - digest-crc (~> 0.4) - google-api-client (~> 0.33) - google-cloud-core (~> 1.2) - googleauth (~> 0.9) - mini_mime (~> 1.0) - googleauth (0.11.0) - faraday (>= 0.17.3, < 2.0) - jwt (>= 1.4, < 3.0) - memoist (~> 0.16) - multi_json (~> 1.11) - os (>= 0.9, < 2.0) - signet (~> 0.12) - highline (1.7.10) - http-cookie (1.0.3) - domain_name (~> 0.5) - httpclient (2.8.3) - jmespath (1.4.0) - json (2.1.0) - jwt (2.1.0) - memoist (0.16.2) - mini_magick (4.10.1) - mini_mime (1.0.2) - multi_json (1.14.1) - multi_xml (0.6.0) - multipart-post (2.0.0) - nanaimo (0.2.6) - naturally (2.2.0) - os (1.1.0) - plist (3.5.0) - public_suffix (2.0.5) - representable (3.0.4) - declarative (< 0.1.0) - declarative-option (< 0.2.0) - uber (< 0.2.0) - retriable (3.1.2) - rouge (2.0.7) - rubyzip (1.3.0) - security (0.1.3) - signet (0.14.0) - addressable (~> 2.3) - faraday (>= 0.17.3, < 2.0) - jwt (>= 1.5, < 3.0) - multi_json (~> 1.10) - simctl (1.6.8) - CFPropertyList - naturally - slack-notifier (2.3.2) - terminal-notifier (2.0.0) - terminal-table (1.8.0) - unicode-display_width (~> 1.1, >= 1.1.1) - tty-cursor (0.7.1) - tty-screen (0.7.1) - tty-spinner (0.9.3) - tty-cursor (~> 0.7) - uber (0.1.0) - unf (0.1.4) - unf_ext - unf_ext (0.0.7.7) - unicode-display_width (1.7.0) - word_wrap (1.0.0) - xcodeproj (1.15.0) - CFPropertyList (>= 2.3.3, < 4.0) - atomos (~> 0.1.3) - claide (>= 1.0.2, < 2.0) - colored2 (~> 3.1) - nanaimo (~> 0.2.6) - xcpretty (0.3.0) - rouge (~> 2.0.7) - xcpretty-travis-formatter (1.0.0) - xcpretty (~> 0.2, >= 0.0.7) - -PLATFORMS - ruby - -DEPENDENCIES - fastlane - -BUNDLED WITH - 2.1.4 diff --git a/ads/build.gradle b/ads/build.gradle index 1a212ef..e279d01 100644 --- a/ads/build.gradle +++ b/ads/build.gradle @@ -22,6 +22,14 @@ android { proguardFiles 'proguard-rules.pro' } } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } } dependencies { @@ -29,7 +37,7 @@ dependencies { implementation project(':app') // https://firebase.google.com/docs/admob/android/quick-start#import_the_mobile_ads_sdk - implementation 'com.google.firebase:firebase-ads:19.1.0' + implementation 'com.google.firebase:firebase-ads:19.2.0' } repositories { mavenCentral() diff --git a/ads/src/main/AndroidManifest.xml b/ads/src/main/AndroidManifest.xml index 8809df0..274f9c0 100644 --- a/ads/src/main/AndroidManifest.xml +++ b/ads/src/main/AndroidManifest.xml @@ -11,6 +11,7 @@ + (null) override fun instance(context: Context?): AdLoader { - val appInstance = instance.get() ?: AdLoaderImpl(context) - if (instance.get() == null) - instance = WeakReference(appInstance) - return appInstance + instance.get()?.let { return it } + synchronized(this) { + val instance = AdLoaderImpl(context) + this.instance = WeakReference(instance) + return instance + } } } @SuppressLint("InflateParams") - override fun loadAdForViewGroup(view: ViewGroup, removeAllViews: Boolean) { + override fun loadAdForViewGroup(view: ViewGroup, removeAllViews: Boolean) = runCatching { if (!isVideoEnded || !isConnected()) - return - val adLoader = AdBase.Builder(view.context, ADMOB_APP_NATIVE_ID) + throw IllegalStateException("Phone is not connected or the video didn't finished") + val adLoader = AdBase.Builder(moduleContext, ADMOB_APP_NATIVE_ID) .forUnifiedNativeAd { ad: UnifiedNativeAd -> - val adView = LayoutInflater.from(view.context) - .inflate(R.layout.native_ad_view, null) as CardView - populateUnifiedNativeAdView(ad, adView) - if (removeAllViews) - view.removeAllViews() - view.addView(adView) + try { + val adView = LayoutInflater.from(moduleContext) + .inflate(R.layout.native_ad_view, null) as CardView + populateUnifiedNativeAdView(ad, adView) + if (removeAllViews) + view.removeAllViews() + view.addView(adView) + } catch (e: Throwable) { + Timber.w(e, "Cannot load ad in view") + } } .withNativeAdOptions(adOptions) .withAdListener(object : AdListener() { override fun onAdFailedToLoad(errorCode: Int) { when (errorCode) { AdRequest.ERROR_CODE_INVALID_REQUEST, - AdRequest.ERROR_CODE_NO_FILL -> - Timber.e("Error while loading the ad: $errorCode") + AdRequest.ERROR_CODE_NO_FILL -> throw IllegalAccessError(errorCode.toString()) else -> return } } }).build() adLoader.loadAd(AdRequest.Builder().build()) - } + }.exceptionOrNull() override fun destroy() { currentNativeAd?.destroy() diff --git a/app/build.gradle b/app/build.gradle index b0c70fc..3db0149 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -32,20 +32,19 @@ def gitCommitHash = { -> } android { - viewBinding.enabled = true + buildFeatures.viewBinding = true compileSdkVersion 29 buildToolsVersion "29.0.3" - android.defaultConfig.vectorDrawables.useSupportLibrary = true - defaultConfig { applicationId "com.javinator9889.handwashingreminder" minSdkVersion 17 targetSdkVersion 29 - versionCode 121 - versionName "1.1.2-${gitCommitHash}" + versionCode 137 + versionName "1.2.0-${gitCommitHash}" multiDexEnabled true resConfigs "en", "es" + vectorDrawables.useSupportLibrary = true testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } @@ -100,14 +99,20 @@ android { kotlinOptions { jvmTarget = JavaVersion.VERSION_1_8.toString() } +} +tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all { + kotlinOptions { + jvmTarget = "1.8" + } } dependencies { + def room_version = "2.2.5" implementation fileTree(dir: 'libs', include: ['*.jar']) api "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" api 'androidx.appcompat:appcompat:1.1.0' - api 'androidx.core:core-ktx:1.2.0' + api 'androidx.core:core-ktx:1.3.0' api 'androidx.legacy:legacy-support-v4:1.0.0' api 'androidx.constraintlayout:constraintlayout:1.1.3' testImplementation 'junit:junit:4.13' @@ -129,16 +134,16 @@ dependencies { // https://developer.android.com/studio/build/multidex api 'androidx.multidex:multidex:2.0.1' // https://github.com/mikepenz/Android-Iconics - api 'com.mikepenz:iconics-core:5.0.2' - api 'com.mikepenz:iconics-views:5.0.2' + api 'com.mikepenz:iconics-core:5.0.3' + api 'com.mikepenz:iconics-views:5.0.3' //noinspection GradleDependency api 'com.mikepenz:google-material-typeface:3.0.1.4.original-kotlin@aar' api 'com.mikepenz:ionicons-typeface:2.0.1.5-kotlin@aar' // https://github.com/mikepenz/AboutLibraries - implementation "com.mikepenz:aboutlibraries-core:${latestAboutLibsRelease}" - implementation "com.mikepenz:aboutlibraries:${latestAboutLibsRelease}" + implementation "com.mikepenz:aboutlibraries-core:$latestAboutLibsRelease" + implementation "com.mikepenz:aboutlibraries:$latestAboutLibsRelease" // https://developer.android.com/kotlin/ktx#play-core - api 'com.google.android.play:core:1.7.2' + api 'com.google.android.play:core:1.7.3' api 'com.google.android.play:core-ktx:1.7.0' // https://developer.android.com/kotlin/ktx#collection implementation 'androidx.collection:collection-ktx:1.1.0' @@ -146,25 +151,28 @@ dependencies { implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" // https://firebase.google.com/docs/android/setup#add-sdks api 'com.google.firebase:firebase-common-ktx:19.3.0' - api 'com.google.firebase:firebase-analytics:17.4.0' - api 'com.google.firebase:firebase-crashlytics:17.0.0' + api 'com.google.firebase:firebase-analytics:17.4.3' + api 'com.google.firebase:firebase-crashlytics:17.1.0' api 'com.google.firebase:firebase-perf:19.0.7' + implementation 'com.google.firebase:firebase-auth:19.3.1' // http://airbnb.io/lottie/#/android?id=getting-started - api "com.airbnb.android:lottie:3.4.0" + api 'com.airbnb.android:lottie:3.4.1' // https://firebase.google.com/docs/remote-config/use-config-android implementation 'com.google.firebase:firebase-config:19.1.4' implementation 'com.google.firebase:firebase-config-ktx:19.1.4' - // https://mvnrepository.com/artifact/androidx.emoji/emoji/1.0.0 - api 'androidx.emoji:emoji:1.0.0' - api 'androidx.emoji:emoji-appcompat:1.0.0' + // https://mvnrepository.com/artifact/androidx.emoji/emoji/ + api 'androidx.emoji:emoji:1.1.0' + api 'androidx.emoji:emoji-appcompat:1.1.0' // https://github.com/mikepenz/FastAdapter - implementation "com.mikepenz:fastadapter:${latestFastAdapterRelease}" + api "com.mikepenz:fastadapter:$latestFastAdapterRelease" + implementation "com.mikepenz:fastadapter-extensions-scroll:$latestFastAdapterRelease" + implementation "com.mikepenz:fastadapter-extensions-ui:$latestFastAdapterRelease" // https://developer.android.com/kotlin/ktx#lifecycle implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.2.0' // https://developer.android.com/kotlin/ktx#viewmodel implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0' // https://developer.android.com/kotlin/ktx#fragment - implementation 'androidx.fragment:fragment-ktx:1.2.4' + implementation 'androidx.fragment:fragment-ktx:1.2.5' // https://developer.android.com/kotlin/ktx#livedata implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.2.0' // https://github.com/JakeWharton/timber @@ -173,23 +181,27 @@ dependencies { implementation 'androidx.lifecycle:lifecycle-viewmodel-savedstate:2.2.0' // https://developer.android.com/reference/kotlin/androidx/preference/package-summary api 'androidx.preference:preference-ktx:1.1.1' - // https://github.com/bumptech/glide - api 'com.github.bumptech.glide:glide:4.11.0' - kapt 'com.github.bumptech.glide:compiler:4.11.0' // https://github.com/afollestad/material-dialogs/ implementation 'com.afollestad.material-dialogs:core:3.3.0' // https://developer.android.com/google/play/billing/billing_library_overview - implementation 'com.android.billingclient:billing:2.2.0' - implementation 'com.android.billingclient:billing-ktx:2.2.0' + implementation 'com.android.billingclient:billing:3.0.0' + implementation 'com.android.billingclient:billing-ktx:3.0.0' // https://github.com/cbeust/klaxon implementation 'com.beust:klaxon:5.2' // https://github.com/SufficientlySecure/html-textview implementation 'org.sufficientlysecure:html-textview:3.9' + // https://github.com/square/okhttp/tree/okhttp_3.12.x + implementation 'com.squareup.okhttp3:okhttp:3.12.11' // https://square.github.io/okio/#releases - implementation 'com.squareup.okio:okio:2.5.0' - // https://github.com/google/conscrypt/ - implementation 'org.conscrypt:conscrypt-android:2.4.0' + implementation 'com.squareup.okio:okio:2.6.0' // https://github.com/deano2390/MaterialShowcaseView implementation 'com.github.deano2390:MaterialShowcaseView:1.3.4' + // https://github.com/PhilJay/MPAndroidChart + implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' + // https://developer.android.com/training/data-storage/room + implementation "androidx.room:room-ktx:$room_version" + kapt "androidx.room:room-compiler:$room_version" + // https://coil-kt.github.io/coil/ + api "io.coil-kt:coil:0.11.0" } apply plugin: 'com.google.gms.google-services' diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 7d0df06..f7b5d2f 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -14,7 +14,11 @@ # Uncomment this to preserve the line number information for # debugging stack traces. --keepattributes *Annotation* +# -keepattributes *Annotation* +# -keepattributes SourceFile,LineNumberTable +-printmapping out.map + +-renamesourcefileattribute SourceFile -keepattributes SourceFile,LineNumberTable # If you keep the line number information, uncomment this to @@ -22,6 +26,11 @@ #-renamesourcefileattribute SourceFile -optimizationpasses 4 +-repackageclasses '' +-allowaccessmodification +-android +-dontpreverify +-optimizations !code/simplification/arithmetic # https://github.com/mikepenz/Android-Iconics#proguard -keep class .R @@ -29,6 +38,21 @@ ; } +-assumenosideeffects class android.util.Log { + public static boolean isLoggable(java.lang.String, int); + public static int v(...); + public static int i(...); + public static int w(...); + public static int d(...); + public static int e(...); +} + +-assumenosideeffects class timber.log.Timber { + public static void d(...); + public static void i(...); + public static void v(...); +} + -keep class com.javinator9889.handwashingreminder.ads.AdLoaderImpl { com.javinator9889.handwashingreminder.ads.AdLoaderImpl$Provider Provider; } @@ -73,14 +97,7 @@ -dontwarn com.bumptech.glide.load.resource.bitmap.VideoDecoder # Klaxon -keep public class kotlin.reflect.jvm.internal.impl.** { public *; } --keep class com.beust.klaxon.** { *; } --keep interface com.beust.klaxon.** { *; } -keep class kotlin.Metadata { *; } #data models -keep class com.javinator9889.handwashingreminder.collections.** { *;} - --keepclassmembers enum * { - public static **[] values(); - public static ** valueOf(java.lang.String); -} diff --git a/app/src/debug/AndroidManifest.xml b/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000..44a6fd2 --- /dev/null +++ b/app/src/debug/AndroidManifest.xml @@ -0,0 +1,14 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 50c40d1..7558e6a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -39,8 +39,6 @@ android:name=".activities.PrivacyTermsActivity" /> - @@ -51,7 +49,19 @@ + android:exported="true"> + + + + + + + + + + { Toast.makeText( this, getString( - R.string.dynamic_module_loading_error, state.errorCode), + R.string.dynamic_module_loading_error, state.errorCode + ), Toast.LENGTH_LONG ).show() Timber.e( diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/activities/LauncherActivity.kt b/app/src/main/java/com/javinator9889/handwashingreminder/activities/LauncherActivity.kt index 67e11f0..915bbb2 100644 --- a/app/src/main/java/com/javinator9889/handwashingreminder/activities/LauncherActivity.kt +++ b/app/src/main/java/com/javinator9889/handwashingreminder/activities/LauncherActivity.kt @@ -19,8 +19,8 @@ package com.javinator9889.handwashingreminder.activities import android.app.Activity +import android.content.Context import android.content.Intent -import android.content.SharedPreferences import android.os.Bundle import android.view.animation.Animation import android.view.animation.AnimationUtils @@ -38,58 +38,62 @@ import com.google.firebase.ktx.Firebase import com.google.firebase.perf.FirebasePerformance import com.google.firebase.remoteconfig.FirebaseRemoteConfigSettings import com.google.firebase.remoteconfig.ktx.remoteConfig +import com.javinator9889.handwashingreminder.BuildConfig import com.javinator9889.handwashingreminder.R import com.javinator9889.handwashingreminder.application.HandwashingApplication -import com.javinator9889.handwashingreminder.emoji.EmojiLoader +import com.javinator9889.handwashingreminder.data.UserProperties +import com.javinator9889.handwashingreminder.gms.activity.ActivityHandler import com.javinator9889.handwashingreminder.gms.ads.AdLoader import com.javinator9889.handwashingreminder.gms.ads.AdsEnabler import com.javinator9889.handwashingreminder.jobs.alarms.AlarmHandler +import com.javinator9889.handwashingreminder.jobs.alarms.Alarms +import com.javinator9889.handwashingreminder.notifications.NotificationsHandler import com.javinator9889.handwashingreminder.utils.* -import com.javinator9889.handwashingreminder.utils.Preferences.Companion.ADS_ENABLED -import com.javinator9889.handwashingreminder.utils.Preferences.Companion.APP_INIT_KEY -import com.javinator9889.handwashingreminder.utils.RemoteConfig.Keys.SPECIAL_EVENT +import com.javinator9889.handwashingreminder.utils.Preferences.ADS_ENABLED +import com.javinator9889.handwashingreminder.utils.Preferences.APP_INIT_KEY +import com.javinator9889.handwashingreminder.utils.RemoteConfig.SPECIAL_EVENT +import com.javinator9889.handwashingreminder.utils.threading.await import com.mikepenz.iconics.Iconics -import javinator9889.localemanager.utils.languagesupport.LanguagesSupport +import javinator9889.localemanager.utils.languagesupport.LanguagesSupport.Language import kotlinx.android.synthetic.main.splash_screen.* import kotlinx.coroutines.* -import org.conscrypt.Conscrypt import timber.log.Timber -import java.security.Security -import java.util.* -import kotlin.collections.ArrayList import com.javinator9889.handwashingreminder.utils.Firebase as FirebaseConf internal const val FAST_START_KEY = "intent:fast_start" internal const val PENDING_INTENT_CODE = 201 class LauncherActivity : AppCompatActivity() { + private val deferreds = mutableSetOf>() private var launchOnInstall = false private var launchFromNotification = false - private var canFinishActivity = false - private lateinit var sharedPreferences: SharedPreferences - private lateinit var app: HandwashingApplication - private lateinit var initDeferred: Deferred + private val app = HandwashingApplication.instance + private val sharedPreferences = + PreferenceManager.getDefaultSharedPreferences(app) + private val dynamicFeatureDeferred = CompletableDeferred() + private val activityIntentDeferred = CompletableDeferred() + private val splitInstallManager = SplitInstallManagerFactory.create(app) init { lifecycleScope.launch { whenCreated { - app = HandwashingApplication.instance - sharedPreferences = - PreferenceManager.getDefaultSharedPreferences(this@LauncherActivity) - with(intent) { - notNull { - launchFromNotification = - it.getBooleanExtra(FAST_START_KEY, false) - } - } - initDeferred = async { initVariables() } + launchFromNotification = + intent.getBooleanExtra(FAST_START_KEY, false) + deferreds.add(async { initVariables() }) } whenStarted { - try { - withContext(Dispatchers.Main) { displayWelcomeScreen() } - withContext(Dispatchers.Main) { installRequiredModules() } - } finally { - initDeferred.await() + progressBar.show() + val welcomeScreenJob = showWelcomeScreenAsync() + deferreds.add(installRequiredModulesAsync()) + activityIntentDeferred.await().run { + Timber.d("Activity Init is now completed! - $this") + if (launchFromNotification) + flags = Intent.FLAG_ACTIVITY_NEW_TASK or + Intent.FLAG_ACTIVITY_CLEAR_TASK + welcomeScreenJob.join() + startActivity(this) + overridePendingTransition(0, android.R.anim.fade_out) + finish() } } } @@ -100,42 +104,41 @@ class LauncherActivity : AppCompatActivity() { setContentView(R.layout.splash_screen) } - private suspend fun displayWelcomeScreen() { - app.firebaseInitDeferred.await() - val isThereAnySpecialEvent = with(Firebase.remoteConfig) { - getBoolean(SPECIAL_EVENT) && !launchFromNotification - } - var sleepDuration = 0L - var animationLoaded = false - val fadeInAnimation = - AnimationUtils.loadAnimation(this, android.R.anim.fade_in) - fadeInAnimation.duration = 300L - fadeInAnimation.setAnimationListener(object : - Animation.AnimationListener { - override fun onAnimationStart(animation: Animation?) {} - - override fun onAnimationRepeat(animation: Animation?) {} - - override fun onAnimationEnd(animation: Animation?) { - logo.playAnimation() - animationLoaded = true + private fun showWelcomeScreenAsync() = + lifecycleScope.launch(Dispatchers.Main) { + app.firebaseInitDeferred.await() + val isThereAnySpecialEvent = with(Firebase.remoteConfig) { + getBoolean(SPECIAL_EVENT) && !launchFromNotification } - }) - if (isThereAnySpecialEvent) { - logo.setAnimation(AnimatedResources.STAY_SAFE_STAY_HOME.res) - logo.enableMergePathsForKitKatAndAbove(true) - logo.addLottieOnCompositionLoadedListener { + var sleepDuration = 0L + val animationLoaded = CompletableDeferred() + val fadeInAnimation = AnimationUtils.loadAnimation( + this@LauncherActivity, + android.R.anim.fade_in + ) + fadeInAnimation.duration = 300L + fadeInAnimation.setAnimationListener(object : + Animation.AnimationListener { + override fun onAnimationStart(animation: Animation?) {} + override fun onAnimationRepeat(animation: Animation?) {} + override fun onAnimationEnd(animation: Animation?) { + animationLoaded.complete(true) + logo.playAnimation() + } + }) + if (isThereAnySpecialEvent) { + logo.setAnimation(AnimatedResources.STAY_SAFE_STAY_HOME.res) + logo.addLottieOnCompositionLoadedListener { + logo.startAnimation(fadeInAnimation) + sleepDuration = logo.duration + } + animationLoaded.await() + delay(sleepDuration) + } else { + logo.setImageResource(R.drawable.handwashing_app_logo) logo.startAnimation(fadeInAnimation) - sleepDuration = logo.duration } - while (!animationLoaded) - delay(10L) - delay(sleepDuration) - } else { - logo.setImageResource(R.drawable.handwashing_app_logo) - logo.startAnimation(fadeInAnimation) } - } override fun onActivityResult( requestCode: Int, @@ -143,49 +146,85 @@ class LauncherActivity : AppCompatActivity() { data: Intent? ) { super.onActivityResult(requestCode, resultCode, data) - if (requestCode == DYNAMIC_FEATURE_INSTALL_RESULT_CODE) { - EmojiLoader.get(this) - if (sharedPreferences.getBoolean(ADS_ENABLED, true)) { - when (resultCode) { - Activity.RESULT_OK -> { - initAds() - data.notNull { - createPackageContext(packageName, 0).also { - SplitCompat.install(it) - } - if (launchFromNotification) - data!!.flags = Intent.FLAG_ACTIVITY_NEW_TASK or - Intent.FLAG_ACTIVITY_CLEAR_TASK - startActivity(data) - finish() - } + if (requestCode != DYNAMIC_FEATURE_INSTALL_RESULT_CODE) { + Timber.i("Unknown request code $requestCode") + return + } + if (Ads.MODULE_NAME in splitInstallManager.installedModules && + sharedPreferences.getBoolean(ADS_ENABLED, true) + ) { + when (resultCode) { + Activity.RESULT_OK -> { + createPackageContext(packageName, 0).also { + SplitCompat.install(it) } - Activity.RESULT_CANCELED -> app.adLoader = null + initAds() } + Activity.RESULT_CANCELED -> app.adLoader = null } - if (!launchOnInstall) { - Intent(this, MainActivity::class.java).also { - if (launchFromNotification) - it.flags = Intent.FLAG_ACTIVITY_NEW_TASK or - Intent.FLAG_ACTIVITY_CLEAR_TASK - startActivity(it) - overridePendingTransition(0, android.R.anim.fade_out) + } + if (sharedPreferences.getBoolean(APP_INIT_KEY, false) && + AppIntro.MODULE_NAME in splitInstallManager.installedModules + ) { + data?.let { + val launchIntent = Intent(data) + createPackageContext(packageName, 0).also { + SplitCompat.install(it) } + Timber.d("Created launch intent $launchIntent") + activityIntentDeferred.complete(launchIntent) } - if (canFinishActivity) - finish() - else - canFinishActivity = true + } else { + Timber.d("Created launch intent at MainActivity") + activityIntentDeferred.complete( + Intent(this, MainActivity::class.java) + ) } + dynamicFeatureDeferred.complete(true) } override fun finish() { Timber.d("Calling finish") + progressBar.hide() + runBlocking(Dispatchers.Default) { deferreds.awaitAll() } super.finish() } - private fun installRequiredModules() { - val modules = ArrayList(MODULE_COUNT) + private fun installRequiredModulesAsync() = lifecycleScope.async { + val (modules, installedModules) = loadRequiredModules() + Timber.d("Required to install modules: $modules") + if (modules.isEmpty()) { + val intent = if (AppIntro.MODULE_NAME in installedModules && + !sharedPreferences.getBoolean(APP_INIT_KEY, false) + ) { + with(Intent()) { + setClassName( + BuildConfig.APPLICATION_ID, + "${AppIntro.PACKAGE_NAME}.${AppIntro.MAIN_ACTIVITY_NAME}" + ) + this + } + } else Intent(this@LauncherActivity, MainActivity::class.java) + Timber.d("Created launch intent $intent") + activityIntentDeferred.complete(intent) + return@async + } + val intent = if (AppIntro.MODULE_NAME in modules) { + createDynamicFeatureActivityIntent( + modules.toTypedArray(), + launchOnInstall, + AppIntro.MAIN_ACTIVITY_NAME, + AppIntro.PACKAGE_NAME + ) + } else { + createDynamicFeatureActivityIntent(modules.toTypedArray()) + } + startActivityForResult(intent, DYNAMIC_FEATURE_INSTALL_RESULT_CODE) + dynamicFeatureDeferred.await() + } + + private fun loadRequiredModules(): Pair, Set> { + val modules = mutableSetOf() val googleApi = GoogleApiAvailability.getInstance() if (sharedPreferences.getBoolean(ADS_ENABLED, true)) modules += Ads.MODULE_NAME @@ -199,32 +238,22 @@ class LauncherActivity : AppCompatActivity() { ) != ConnectionResult.SUCCESS ) modules += BundledEmoji.MODULE_NAME - else - with(SplitInstallManagerFactory.create(this)) { - deferredUninstall(listOf(BundledEmoji.MODULE_NAME)) - } - modules.trimToSize() - val intent = if (launchOnInstall) { - createDynamicFeatureActivityIntent( - modules.toTypedArray(), - launchOnInstall, - AppIntro.MAIN_ACTIVITY_NAME, - AppIntro.PACKAGE_NAME - ) - } else { - createDynamicFeatureActivityIntent(modules.toTypedArray()) - } - startActivityForResult(intent, DYNAMIC_FEATURE_INSTALL_RESULT_CODE) + return (modules - splitInstallManager.installedModules) to + splitInstallManager.installedModules } - private fun initAds() { - val className = "${Ads.PACKAGE_NAME}.${Ads - .CLASS_NAME}\$${Ads.PROVIDER_NAME}" - val adProvider = Class.forName(className).kotlin - .objectInstance as AdLoader.Provider - app.adLoader = adProvider.instance(app) - val adsEnabler = AdsEnabler(app) - adsEnabler.enableAds() + private fun initAds(context: Context = app) { + if (Ads.MODULE_NAME in splitInstallManager.installedModules && + sharedPreferences.getBoolean(ADS_ENABLED, true) + ) { + val className = "${Ads.PACKAGE_NAME}.${Ads + .CLASS_NAME}\$${Ads.PROVIDER_NAME}" + val adProvider = Class.forName(className).kotlin + .objectInstance as AdLoader.Provider + app.adLoader = adProvider.instance(context) + val adsEnabler = AdsEnabler(app) + adsEnabler.enableAds() + } } private fun createDynamicFeatureActivityIntent( @@ -246,32 +275,46 @@ class LauncherActivity : AppCompatActivity() { app.firebaseInitDeferred.await() } Timber.d("Firebase initialized correctly") + Timber.d("Setting-up Firebase custom properties") + val propertiesJob = setupFirebasePropertiesAsync() Timber.d("Initializing Iconics") Iconics.init(this) - Timber.d("Setting-up security providers") - Security.insertProviderAt(Conscrypt.newProvider(), 1) Timber.d("Setting-up activity recognition") + val activityHandler = ActivityHandler.getInstance(this) if (sharedPreferences.getBoolean( Preferences.ACTIVITY_TRACKING_ENABLED, false - ) && with(GoogleApiAvailability.getInstance()) { - isGooglePlayServicesAvailable(this@LauncherActivity) == - ConnectionResult.SUCCESS - } + ) ) { - app.activityHandler.startTrackingActivity() + Timber.d("Tracking is enabled and Play Services are available so starting tracking") + activityHandler.startTrackingActivity() } else { - app.activityHandler.disableActivityTracker() + Timber.d("Tracking is not enabled or Play Services are not available so starting tracking") + activityHandler.disableActivityTracker() } with(AlarmHandler(this)) { scheduleAllAlarms() } + Timber.d("Initializing Ads Provider") + initAds() Timber.d("Adding periodic notifications if not enqueued yet") - Timber.d("Setting-up Firebase custom properties") - setupFirebaseProperties() + Timber.d("Creating alarms notification channels...") + for (alarm in Alarms.values()) { + Timber.d("Creating notification channel for ${alarm.identifier}") + NotificationsHandler( + context = this, + channelId = alarm.channelId, + channelName = getString(R.string.time_notification_channel_name), + channelDesc = getString(R.string.time_notification_channel_desc), + groupId = alarm.identifier, + groupName = getString(alarm.groupName) + ) + } + propertiesJob.join() } - private fun setupFirebaseProperties() { - val firebaseAnalytics = FirebaseAnalytics.getInstance(this) + private fun setupFirebasePropertiesAsync() = lifecycleScope.launch { + val firebaseAnalytics = + FirebaseAnalytics.getInstance(this@LauncherActivity) val firebaseRemoteConfig = Firebase.remoteConfig val firebasePerformance = FirebasePerformance.getInstance() val config = with(FirebaseRemoteConfigSettings.Builder()) { @@ -283,29 +326,24 @@ class LauncherActivity : AppCompatActivity() { Timber.d("Initializing Firebase Remote Config") setConfigSettingsAsync(config) setDefaultsAsync( - when (Locale.getDefault().language) { - Locale(LanguagesSupport.Language.SPANISH).language -> { + when (UserProperties.language) { + Language.SPANISH -> { firebaseAnalytics.setUserProperty( FirebaseConf.Properties.LANGUAGE, - LanguagesSupport.Language.SPANISH + Language.SPANISH ) R.xml.remote_config_defaults_es } else -> { firebaseAnalytics.setUserProperty( FirebaseConf.Properties.LANGUAGE, - LanguagesSupport.Language.ENGLISH + Language.ENGLISH ) R.xml.remote_config_defaults } } ) - fetchAndActivate().addOnSuccessListener { - if (canFinishActivity) - finish() - else - canFinishActivity = true - } + fetchAndActivate().await() } firebaseAnalytics.setAnalyticsCollectionEnabled( sharedPreferences.getBoolean( diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/activities/MainActivity.kt b/app/src/main/java/com/javinator9889/handwashingreminder/activities/MainActivity.kt index 1219b03..d5f91ba 100644 --- a/app/src/main/java/com/javinator9889/handwashingreminder/activities/MainActivity.kt +++ b/app/src/main/java/com/javinator9889/handwashingreminder/activities/MainActivity.kt @@ -19,130 +19,134 @@ package com.javinator9889.handwashingreminder.activities import android.os.Bundle -import android.util.SparseArray import android.view.MenuItem import androidx.annotation.IdRes -import androidx.core.content.edit -import androidx.core.util.forEach -import androidx.core.util.set -import androidx.core.view.forEach -import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentTransaction -import androidx.preference.PreferenceManager +import androidx.fragment.app.commit +import androidx.lifecycle.lifecycleScope +import androidx.lifecycle.whenCreated +import androidx.lifecycle.whenResumed import com.google.android.material.bottomnavigation.BottomNavigationView import com.google.firebase.analytics.FirebaseAnalytics import com.google.firebase.ktx.Firebase -import com.google.firebase.perf.metrics.AddTrace import com.google.firebase.remoteconfig.ktx.remoteConfig import com.javinator9889.handwashingreminder.R import com.javinator9889.handwashingreminder.activities.support.ActionBarBase import com.javinator9889.handwashingreminder.activities.views.fragments.diseases.DiseasesFragment import com.javinator9889.handwashingreminder.activities.views.fragments.news.NewsFragment -import com.javinator9889.handwashingreminder.activities.views.fragments.settings.SettingsView import com.javinator9889.handwashingreminder.activities.views.fragments.washinghands.WashingHandsFragment import com.javinator9889.handwashingreminder.custom.libraries.AppRate -import com.javinator9889.handwashingreminder.utils.Preferences -import com.javinator9889.handwashingreminder.utils.isDebuggable -import com.mikepenz.iconics.IconicsDrawable -import com.mikepenz.iconics.typeface.library.googlematerial.GoogleMaterial -import com.mikepenz.iconics.typeface.library.ionicons.Ionicons +import com.javinator9889.handwashingreminder.data.MainActivityDataHandler +import com.javinator9889.handwashingreminder.firebase.Auth import kotlinx.android.synthetic.main.activity_main.* import kotlinx.android.synthetic.main.how_to_wash_hands_layout.* +import kotlinx.coroutines.Deferred +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import timber.log.Timber import uk.co.deanwild.materialshowcaseview.MaterialShowcaseSequence -import uk.co.deanwild.materialshowcaseview.ShowcaseConfig -import java.lang.ref.WeakReference -import kotlin.concurrent.thread -import kotlin.properties.Delegates -internal const val ARG_CURRENT_ITEM = "bundle:args:current_item" class MainActivity : ActionBarBase(), - BottomNavigationView.OnNavigationItemSelectedListener { + BottomNavigationView.OnNavigationItemSelectedListener, + BottomNavigationView.OnNavigationItemReselectedListener { override val layoutId: Int = R.layout.activity_main - private val fragments: SparseArray> = SparseArray(4) - private var activeFragment by Delegates.notNull<@IdRes Int>() + private val dataHandler = MainActivityDataHandler() + private lateinit var deferredRating: Deferred + private lateinit var deferredShowcase: Deferred - @AddTrace(name = "onCreateMainView") - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - with(FirebaseAnalytics.getInstance(this)) { - setCurrentScreen(this@MainActivity, "Main view", null) - } - with(Firebase.remoteConfig) { - fetchAndActivate() - } - delegateMenuIcons(menu) - val ids = - arrayOf(R.id.diseases, R.id.handwashing, R.id.news, R.id.settings) - menu.setOnNavigationItemSelectedListener(this) - loadTutorial() - suggestRating() - if (savedInstanceState != null) { - for (id in ids) { - val fragment = supportFragmentManager.getFragment( - savedInstanceState, - id.toString() - ) ?: createFragmentForId(id) - fragments[id] = WeakReference(fragment) + init { + lifecycleScope.launch { + whenCreated { + with(Firebase.remoteConfig) { fetchAndActivate() } + launch { dataHandler.setMenuIcons(menu, this@MainActivity) } + menu.setOnNavigationItemSelectedListener(this@MainActivity) + menu.setOnNavigationItemReselectedListener(this@MainActivity) + deferredShowcase = dataHandler.loadShowcaseAsync( + activity = this@MainActivity, + lifecycleOwner = this@MainActivity + ) + deferredRating = dataHandler.suggestRatingAsync( + activity = this@MainActivity, + lifecycleOwner = this@MainActivity + ) + } + whenResumed { + with(FirebaseAnalytics.getInstance(this@MainActivity)) { + setCurrentScreen(this@MainActivity, "Main view", null) + } + deferredShowcase.await()?.let { + withContext(Dispatchers.Main) { + it.start() + } + } + deferredRating.await().run { + withContext(Dispatchers.Main) { + init() + } + } } - activeFragment = savedInstanceState.getInt(ARG_CURRENT_ITEM) - } else { - for (id in ids) - createFragmentForId(id) - activeFragment = R.id.diseases - initFragmentView() } } - protected fun delegateMenuIcons(menu: BottomNavigationView) { - thread(start = true) { - menu.menu.forEach { item -> - val icon = when (item.itemId) { - R.id.diseases -> - IconicsDrawable( - this, Ionicons.Icon.ion_ios_medkit - ) - R.id.news -> - IconicsDrawable( - this, GoogleMaterial.Icon.gmd_chrome_reader_mode - ) - R.id.settings -> - IconicsDrawable( - this, Ionicons.Icon.ion_android_settings - ) - else -> null - } - icon?.let { runOnUiThread { item.icon = it } } + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + if (savedInstanceState == null) + lifecycleScope.launch { + dataHandler.loadFragmentView(supportFragmentManager) } + } + + override fun onDestroy() { + dataHandler.clear() + super.onDestroy() + } + + override fun onRestoreInstanceState(savedInstanceState: Bundle) { + super.onRestoreInstanceState(savedInstanceState) + dataHandler.onRestoreInstanceState( + savedInstanceState, + supportFragmentManager + ) + } + + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + dataHandler.onSaveInstanceState(outState, supportFragmentManager) + } + + override fun finish() { + try { + Auth.logout() + } catch (e: IllegalStateException) { + Timber.w(e, "Auth client was not initialized") + } finally { + super.finish() } } override fun onBackPressed() { - if (activeFragment != R.id.diseases && - activeFragment != R.id.handwashing - ) { - menu.selectedItemId = R.id.diseases - onNavigationItemSelected(menu.menu.findItem(R.id.diseases)) - } else { - if (activeFragment == R.id.diseases) { - with(fragments[activeFragment].get()!! as DiseasesFragment) { - onBackPressed() - } - fragments.clear() + when (dataHandler.activeFragmentId) { + R.id.diseases -> { + (dataHandler.activeFragment as DiseasesFragment).onBackPressed() super.onBackPressed() finish() - } else { - val washingHandsFragment = fragments[activeFragment].get() - ?: createFragmentForId(R.id.handwashing) - as WashingHandsFragment + } + R.id.handwashing -> { + val washingHandsFragment = + dataHandler.activeFragment as WashingHandsFragment if (washingHandsFragment.pager.currentItem != 0) washingHandsFragment.pager.currentItem-- else { menu.selectedItemId = R.id.diseases - onNavigationItemSelected(menu.menu.findItem(R.id.diseases)) + onItemSelected(R.id.diseases) } } + else -> { + menu.selectedItemId = R.id.diseases + onItemSelected(R.id.diseases) + } } } @@ -160,19 +164,14 @@ class MainActivity : ActionBarBase(), return onItemSelected(item.itemId) } - override fun onSaveInstanceState(outState: Bundle) { - super.onSaveInstanceState(outState) - fragments.forEach { id, reference -> - reference.get()?.let { - supportFragmentManager.putFragment( - outState, id.toString(), it - ) + override fun onNavigationItemReselected(item: MenuItem) { + if (item.itemId == R.id.news) + with(dataHandler.activeFragment as NewsFragment) { + goTop() } - } - outState.putInt(ARG_CURRENT_ITEM, activeFragment) } - protected fun onItemSelected(@IdRes id: Int): Boolean { + private fun onItemSelected(@IdRes id: Int): Boolean { return try { loadFragment(id) if (id == R.id.handwashing) @@ -186,106 +185,20 @@ class MainActivity : ActionBarBase(), } } - private fun initFragmentView() { - with(supportFragmentManager.beginTransaction()) { - fragments.forEach { id, reference -> - val fragment = reference.get() ?: createFragmentForId(id) - add(R.id.mainContent, fragment) - hide(fragment) - } - show( - fragments[activeFragment].get() ?: createFragmentForId( - activeFragment - ) - ) - commit() - } - } - private fun loadFragment(@IdRes id: Int) { - if (id == activeFragment) + Timber.d("$id - ${dataHandler.activeFragmentId} | ${id == dataHandler.activeFragmentId}") + if (id == dataHandler.activeFragmentId) return - val fragment = fragments[id].get() ?: return - val displayedFragment = fragments[activeFragment].get()!! - with(supportFragmentManager.beginTransaction()) { - show(fragment) - hide(displayedFragment) - activeFragment = id + supportFragmentManager.commit { + show(dataHandler[id]) + dataHandler.onShow(id) + Timber.d("Showing fragment: ${dataHandler[id]}") + hide(dataHandler.activeFragment) + dataHandler.onHide(id) + Timber.d("Hiding fragment: ${dataHandler.activeFragment}") + dataHandler.activeFragmentId = id setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE) disallowAddToBackStack() - }.commit() - } - - private fun loadTutorial() { - val preferences = - with(PreferenceManager.getDefaultSharedPreferences(this)) { - if (getBoolean(Preferences.INITIAL_TUTORIAL_DONE, false)) - return - else this - } - val config = ShowcaseConfig() - config.delay = 500L - with(MaterialShowcaseSequence(this)) { - setConfig(config) - val dismissText = getString(R.string.got_it) - val diseasesText = getString(R.string.diseases_intro) - val handwashingText = getString(R.string.handwashing_intro) - val newsText = getString(R.string.news_intro) - val settingsText = getString(R.string.settings_intro) - addSequenceItem( - findViewById(R.id.diseases), - diseasesText, - dismissText - ) - addSequenceItem( - findViewById(R.id.handwashing), - handwashingText, - dismissText - ) - addSequenceItem( - findViewById(R.id.news), - newsText, - dismissText - ) - addSequenceItem( - findViewById(R.id.settings), - settingsText, - dismissText - ) - var itemCount = 0 - setOnItemDismissedListener { _, _ -> - if (itemCount++ == 3) - preferences.edit { - putBoolean(Preferences.INITIAL_TUTORIAL_DONE, true) - } - } - start() - } - } - - private fun suggestRating() { - with(AppRate(this)) { - if (!isDebuggable()) { - setMinDaysUntilPrompt(2L) - setMinLaunchesUntilPrompt(5) - } - dialogTitle = R.string.rate_text_title - dialogMessage = R.string.rate_app_message - positiveButtonText = R.string.rate_text - negativeButtonText = R.string.rate_do_not_show - init() - } - } - - private fun createFragmentForId(@IdRes id: Int): Fragment { - val fragment = when (id) { - R.id.diseases -> DiseasesFragment() - R.id.handwashing -> WashingHandsFragment() - R.id.news -> NewsFragment() - R.id.settings -> SettingsView() - else -> Fragment() // this should never happen } - fragments[id] = WeakReference(fragment) - return fragment } } diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/activities/base/BaseVisibleFragmentView.kt b/app/src/main/java/com/javinator9889/handwashingreminder/activities/base/BaseVisibleFragmentView.kt new file mode 100644 index 0000000..113bf33 --- /dev/null +++ b/app/src/main/java/com/javinator9889/handwashingreminder/activities/base/BaseVisibleFragmentView.kt @@ -0,0 +1,23 @@ +/* + * Copyright © 2020 - present | Handwashing reminder by Javinator9889 + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see https://www.gnu.org/licenses/. + * + * Created by Javinator9889 on 11/06/20 - Handwashing reminder. + */ +package com.javinator9889.handwashingreminder.activities.base + +abstract class BaseVisibleFragmentView : BaseFragmentView() { + abstract fun onVisibilityChanged(visibility: Int) +} \ No newline at end of file diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/activities/base/LayoutVisibilityChange.kt b/app/src/main/java/com/javinator9889/handwashingreminder/activities/base/LayoutVisibilityChange.kt new file mode 100644 index 0000000..5468885 --- /dev/null +++ b/app/src/main/java/com/javinator9889/handwashingreminder/activities/base/LayoutVisibilityChange.kt @@ -0,0 +1,23 @@ +/* + * Copyright © 2020 - present | Handwashing reminder by Javinator9889 + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see https://www.gnu.org/licenses/. + * + * Created by Javinator9889 on 11/06/20 - Handwashing reminder. + */ +package com.javinator9889.handwashingreminder.activities.base + +interface LayoutVisibilityChange { + fun onVisibilityChanged(visibility: Int) +} \ No newline at end of file diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/diseases/DiseaseDescriptionFragment.kt b/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/diseases/DiseaseDescriptionFragment.kt index d2130dc..7630a49 100644 --- a/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/diseases/DiseaseDescriptionFragment.kt +++ b/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/diseases/DiseaseDescriptionFragment.kt @@ -22,7 +22,7 @@ import android.os.Bundle import androidx.annotation.LayoutRes import com.javinator9889.handwashingreminder.R import com.javinator9889.handwashingreminder.activities.base.BaseFragmentView -import com.javinator9889.handwashingreminder.activities.views.viewmodels.ParsedHTMLText +import com.javinator9889.handwashingreminder.data.ParsedHTMLText import kotlinx.android.synthetic.main.disease_description.* import kotlin.properties.Delegates diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/diseases/DiseaseExpandedView.kt b/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/diseases/DiseaseExpandedView.kt index b78f581..026a918 100644 --- a/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/diseases/DiseaseExpandedView.kt +++ b/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/diseases/DiseaseExpandedView.kt @@ -23,8 +23,8 @@ import android.os.Bundle import com.google.android.material.tabs.TabLayoutMediator import com.javinator9889.handwashingreminder.R import com.javinator9889.handwashingreminder.activities.support.ActionBarBase -import com.javinator9889.handwashingreminder.activities.views.viewmodels.ParsedHTMLText import com.javinator9889.handwashingreminder.collections.DiseaseTextAdapter +import com.javinator9889.handwashingreminder.data.ParsedHTMLText import kotlinx.android.synthetic.main.disease_view_expanded.* import kotlin.properties.Delegates diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/diseases/DiseaseExtraInformationFragment.kt b/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/diseases/DiseaseExtraInformationFragment.kt index 634879e..f42e9e7 100644 --- a/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/diseases/DiseaseExtraInformationFragment.kt +++ b/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/diseases/DiseaseExtraInformationFragment.kt @@ -22,7 +22,7 @@ import android.os.Bundle import androidx.annotation.LayoutRes import com.javinator9889.handwashingreminder.R import com.javinator9889.handwashingreminder.activities.base.BaseFragmentView -import com.javinator9889.handwashingreminder.activities.views.viewmodels.ParsedHTMLText +import com.javinator9889.handwashingreminder.data.ParsedHTMLText import kotlinx.android.synthetic.main.simple_text_view.* import kotlin.properties.Delegates diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/diseases/DiseasesFragment.kt b/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/diseases/DiseasesFragment.kt index 4284573..b15d819 100644 --- a/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/diseases/DiseasesFragment.kt +++ b/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/diseases/DiseasesFragment.kt @@ -21,80 +21,141 @@ package com.javinator9889.handwashingreminder.activities.views.fragments.disease import android.content.Intent import android.os.Bundle import android.view.View +import android.widget.LinearLayout +import androidx.annotation.StringRes import androidx.core.app.ActivityCompat +import androidx.emoji.text.EmojiCompat +import androidx.fragment.app.activityViewModels import androidx.fragment.app.viewModels -import androidx.lifecycle.Observer import androidx.lifecycle.lifecycleScope -import androidx.lifecycle.whenStarted +import androidx.lifecycle.observe import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView +import com.github.mikephil.charting.data.BarData +import com.github.mikephil.charting.data.BarDataSet +import com.github.mikephil.charting.formatter.ValueFormatter +import com.google.android.material.bottomsheet.BottomSheetBehavior +import com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_COLLAPSED +import com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_EXPANDED +import com.google.android.material.textview.MaterialTextView import com.javinator9889.handwashingreminder.R import com.javinator9889.handwashingreminder.activities.base.BaseFragmentView +import com.javinator9889.handwashingreminder.activities.base.LayoutVisibilityChange import com.javinator9889.handwashingreminder.activities.views.fragments.diseases.adapter.Ads import com.javinator9889.handwashingreminder.activities.views.fragments.diseases.adapter.Disease -import com.javinator9889.handwashingreminder.activities.views.viewmodels.DiseaseInformationFactory import com.javinator9889.handwashingreminder.activities.views.viewmodels.DiseaseInformationViewModel -import com.javinator9889.handwashingreminder.activities.views.viewmodels.ParsedHTMLText import com.javinator9889.handwashingreminder.activities.views.viewmodels.SavedViewModelFactory +import com.javinator9889.handwashingreminder.data.ParsedHTMLText +import com.javinator9889.handwashingreminder.data.room.entities.Handwashing +import com.javinator9889.handwashingreminder.data.viewmodels.HandwashingViewModel +import com.javinator9889.handwashingreminder.emoji.EmojiLoader +import com.javinator9889.handwashingreminder.utils.calendar.CalendarUtils +import com.javinator9889.handwashingreminder.utils.toBarEntry import com.mikepenz.fastadapter.FastAdapter import com.mikepenz.fastadapter.GenericItem import com.mikepenz.fastadapter.adapters.ItemAdapter import com.mikepenz.fastadapter.listeners.ClickEventHook -import kotlinx.android.synthetic.main.diseases_list.* -import kotlinx.android.synthetic.main.diseases_list.view.* +import kotlinx.android.synthetic.main.handwash_count.* +import kotlinx.android.synthetic.main.handwash_count.view.* +import kotlinx.android.synthetic.main.loading_recycler_view.* +import kotlinx.android.synthetic.main.loading_recycler_view.view.* +import kotlinx.android.synthetic.main.main_disease_view.view.* +import kotlinx.coroutines.Deferred import kotlinx.coroutines.launch import timber.log.Timber -class DiseasesFragment : BaseFragmentView() { - override val layoutId: Int = R.layout.diseases_list + +class DiseasesFragment : BaseFragmentView(), LayoutVisibilityChange, + View.OnClickListener { + override val layoutId: Int = R.layout.main_disease_view + private lateinit var parsedHTMLTexts: List private lateinit var fastAdapter: FastAdapter + private lateinit var emojiLoader: Deferred + private lateinit var behavior: BottomSheetBehavior private val upperAdsAdapter: ItemAdapter = ItemAdapter() private val lowerAdsAdapter: ItemAdapter = ItemAdapter() private val diseasesAdapter: ItemAdapter = ItemAdapter() - private val informationFactory = DiseaseInformationFactory() private val informationViewModel: DiseaseInformationViewModel by viewModels { - SavedViewModelFactory(informationFactory, this) + SavedViewModelFactory(DiseaseInformationViewModel.Factory, this) } + private val handwashingViewModel: HandwashingViewModel by activityViewModels() + private var dataSet: BarDataSet? = null init { - lifecycleScope.launch { - whenStarted { - loading.visibility = View.VISIBLE - informationViewModel.parsedHTMLText - .observe(viewLifecycleOwner, Observer { - parsedHTMLTexts = it - upperAdsAdapter.add(Ads()) - lowerAdsAdapter.add(Ads()) - it.forEachIndexed { i, parsedText -> - val animation = - if (i % 2 == 0) R.raw.virus_red - else R.raw.virus_loader - val layoutId = - if (i % 2 == 0) R.layout.disease_card_layout - else R.layout.disease_card_alt_layout - diseasesAdapter.add( - Disease(animation, parsedText, layoutId, i) - ) - } - loading.visibility = View.INVISIBLE - diseasesContainer.visibility = View.VISIBLE - }) + lifecycleScope.launchWhenStarted { + loading.visibility = View.VISIBLE + countLoader.visibility = View.VISIBLE + informationViewModel.parsedHTMLText.observe(viewLifecycleOwner) { + if (it.isEmpty()) + return@observe + lifecycleScope.launch { + parsedHTMLTexts = it + it.forEachIndexed { i, parsedText -> + val animation = + if (i % 2 == 0) R.raw.virus_red + else R.raw.virus_loader + val layoutId = + if (i % 2 == 0) R.layout.disease_card_layout + else R.layout.disease_card_alt_layout + val disease = + Disease(animation, parsedText, layoutId, i) + if (diseasesAdapter.getAdapterPosition(disease) == -1) + diseasesAdapter.add(disease) + } + loading.visibility = View.INVISIBLE + container.visibility = View.VISIBLE + } + } + handwashingViewModel.allData.observe(viewLifecycleOwner) { + lifecycleScope.launch { + dataSet?.let { set -> + Timber.d("Adding new items to dataSet") + set.clear() + for (entry in it.toBarEntry()) + set.addEntry(entry) + } ?: with(BarDataSet(it.toBarEntry(), "")) { + Timber.d("dataSet not created so instantiating it") + valueFormatter = IntFormatter() + dataSet = this + } + countChart.data = BarData(dataSet) + countChart.notifyDataSetChanged() + countChart.fitScreen() + countChart.moveViewToX(0F) + countChart.setVisibleXRangeMaximum(7F) + countChart.invalidate() + val todayAmount = + handwashingViewModel.getAsync(CalendarUtils.today.time) + val weeklyAmount = + handwashingViewModel.getWeeklyCountAsync() + val monthlyAmount = + handwashingViewModel.getMonthlyCountAsync() + setCountText( + countDailyTextView, + R.string.today_washed, + todayAmount.await()?.amount ?: 0 + ) + setCountText( + countWeeklyTextView, + R.string.week_washed, + weeklyAmount.await() + ) + setCountText( + countMonthlyTextView, + R.string.month_washed, + monthlyAmount.await() + ) + countLoader.visibility = View.INVISIBLE + scrollView.visibility = View.VISIBLE + } } } } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - val adapters = listOf(upperAdsAdapter, diseasesAdapter, lowerAdsAdapter) - fastAdapter = FastAdapter.with(adapters) - val rvManager = LinearLayoutManager(context) - with(view.diseasesContainer) { - layoutManager = rvManager - adapter = fastAdapter - } - fastAdapter.addEventHook(DiseaseClickEventHook()) - fastAdapter.withSavedInstanceState(savedInstanceState) + onViewCreatedAsync(view, savedInstanceState) } override fun onSaveInstanceState(outState: Bundle) { @@ -103,8 +164,14 @@ class DiseasesFragment : BaseFragmentView() { } fun onBackPressed() { + if (::behavior.isInitialized) { + if (behavior.state == STATE_EXPANDED) { + behavior.state = STATE_COLLAPSED + return + } + } try { - diseasesContainer.adapter = null + container.adapter = null diseasesAdapter.clear() } catch (e: Exception) { Timber.w(e, "Exception when calling 'onBackPressed'") @@ -113,6 +180,115 @@ class DiseasesFragment : BaseFragmentView() { } } + override fun onVisibilityChanged(visibility: Int) {} + + override fun onClick(v: View?) { + when (v) { + countUpButton -> lifecycleScope.launch { + val createdItem = + handwashingViewModel.getAsync(CalendarUtils.today.time) + .await() + if (createdItem == null) + handwashingViewModel.create( + Handwashing( + CalendarUtils.today.time, + 0 + ) + ) + handwashingViewModel.increment(CalendarUtils.today.time) + leaves.visibility = View.VISIBLE + if (!leaves.isAnimating) + leaves.playAnimation() + } + countDownButton -> lifecycleScope.launch { + val createdItem = + handwashingViewModel.getAsync(CalendarUtils.today.time) + .await() + if (createdItem == null) + handwashingViewModel.create( + Handwashing( + CalendarUtils.today.time, + 0 + ) + ) + handwashingViewModel.decrement(CalendarUtils.today.time) + } + } + } + + private suspend fun setCountText( + view: MaterialTextView, + @StringRes id: Int, + times: Int + ) { + val emojiCompat = emojiLoader.await() + val text = getString( + id, + resources.getQuantityString(R.plurals.times, times, times) + ) + view.text = try { + emojiCompat.process(text) + } catch (_: IllegalStateException) { + text + } + } + + private fun onViewCreatedAsync(view: View, savedInstanceState: Bundle?) = + lifecycleScope.launch { + emojiLoader = EmojiLoader.loadAsync(view.context) + val adapters = + listOf(upperAdsAdapter, diseasesAdapter, lowerAdsAdapter) + fastAdapter = FastAdapter.with(adapters) + val rvManager = LinearLayoutManager(context) + with(view.container) { + layoutManager = rvManager + adapter = fastAdapter + } + fastAdapter.addEventHook(DiseaseClickEventHook()) + fastAdapter.withSavedInstanceState(savedInstanceState) + behavior = BottomSheetBehavior.from(view.contentLayout) + behavior.addBottomSheetCallback(BottomSheetStateCallback()) + view.countChart.setDrawGridBackground(false) + view.countChart.axisLeft.apply { + setDrawGridLines(false) + valueFormatter = IntFormatter() + isGranularityEnabled = true + granularity = 1F + axisMinimum = 0F + } + view.countChart.axisRight.apply { + setDrawGridLines(false) + valueFormatter = IntFormatter() + isGranularityEnabled = true + granularity = 1F + axisMinimum = 0F + } + view.countChart.xAxis.apply { + setDrawGridLines(false) + valueFormatter = IntFormatter() + isGranularityEnabled = true + granularity = 1F + axisMaximum = 0F + } + view.countChart.setVisibleXRangeMaximum(7F) + view.countChart.isAutoScaleMinMaxEnabled = true + view.countChart.legend.isEnabled = false + view.countChart.description.isEnabled = false + view.countChart.invalidate() + view.countUpButton.setOnClickListener(this@DiseasesFragment) + view.countDownButton.setOnClickListener(this@DiseasesFragment) + val countUpText = getText(R.string.add_another) + val countDownText = getText(R.string.reduce_count) + val emojiCompat = emojiLoader.await() + try { + countUpButton.text = emojiCompat.process(countUpText) + countDownButton.text = emojiCompat.process(countDownText) + } catch (_: IllegalStateException) { + countUpButton.text = countUpText + countDownButton.text = countDownText + } + } + private inner class DiseaseClickEventHook : ClickEventHook() { override fun onBind(viewHolder: RecyclerView.ViewHolder) = if (viewHolder is Disease.ViewHolder) viewHolder.cardContainer @@ -139,4 +315,24 @@ class DiseasesFragment : BaseFragmentView() { ) } } -} \ No newline at end of file + + private inner class BottomSheetStateCallback : + BottomSheetBehavior.BottomSheetCallback() { + + override fun onStateChanged(bottomSheet: View, newState: Int) { + if (newState == STATE_EXPANDED) { + if (upperAdsAdapter.adapterItemCount == 0) + upperAdsAdapter.add(Ads()) + if (lowerAdsAdapter.adapterItemCount == 0) + lowerAdsAdapter.add(Ads()) + informationViewModel.parseHtml() + } + } + + override fun onSlide(bottomSheet: View, slideOffset: Float) {} + } + + private inner class IntFormatter : ValueFormatter() { + override fun getFormattedValue(value: Float) = value.toInt().toString() + } +} diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/diseases/adapter/Ads.kt b/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/diseases/adapter/Ads.kt index 5849a81..6417eca 100644 --- a/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/diseases/adapter/Ads.kt +++ b/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/diseases/adapter/Ads.kt @@ -25,6 +25,7 @@ import com.javinator9889.handwashingreminder.application.HandwashingApplication import com.javinator9889.handwashingreminder.utils.notNull import com.mikepenz.fastadapter.FastAdapter import com.mikepenz.fastadapter.items.AbstractItem +import timber.log.Timber class Ads : AbstractItem() { override val layoutRes: Int = R.layout.simple_frame_view @@ -38,7 +39,9 @@ class Ads : AbstractItem() { override fun bindView(item: Ads, payloads: List) { ads.notNull { - it.loadAdForViewGroup(container, false) + it.loadAdForViewGroup(container, false)?.let { e -> + Timber.w(e, "Ads cannot be loaded") + } } } diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/diseases/adapter/Disease.kt b/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/diseases/adapter/Disease.kt index b29fff7..299c205 100644 --- a/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/diseases/adapter/Disease.kt +++ b/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/diseases/adapter/Disease.kt @@ -24,7 +24,7 @@ import androidx.annotation.LayoutRes import androidx.annotation.RawRes import com.google.android.material.card.MaterialCardView import com.javinator9889.handwashingreminder.R -import com.javinator9889.handwashingreminder.activities.views.viewmodels.ParsedHTMLText +import com.javinator9889.handwashingreminder.data.ParsedHTMLText import com.javinator9889.handwashingreminder.graphics.LottieAdaptedPerformanceAnimationView import com.mikepenz.fastadapter.FastAdapter import com.mikepenz.fastadapter.items.AbstractItem @@ -36,9 +36,13 @@ data class Disease( override val type: Int ) : AbstractItem() { + init { + identifier = type.toLong() + } + override fun getViewHolder(v: View): ViewHolder = ViewHolder(v) - class ViewHolder(private val view: View) : + class ViewHolder(view: View) : FastAdapter.ViewHolder(view) { val cardContainer: MaterialCardView = view.findViewById(R.id.cardDiseaseContainer) diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/news/NewsFragment.kt b/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/news/NewsFragment.kt index 6cad6a3..aeebd52 100644 --- a/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/news/NewsFragment.kt +++ b/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/news/NewsFragment.kt @@ -18,40 +18,215 @@ */ package com.javinator9889.handwashingreminder.activities.views.fragments.news +import android.content.Intent +import android.net.Uri import android.os.Bundle import android.view.View import androidx.annotation.LayoutRes -import com.google.firebase.ktx.Firebase -import com.google.firebase.remoteconfig.ktx.remoteConfig +import androidx.fragment.app.viewModels +import androidx.lifecycle.lifecycleScope +import androidx.lifecycle.observe +import androidx.lifecycle.whenStarted +import androidx.recyclerview.widget.DefaultItemAnimator +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.LinearSmoothScroller +import androidx.recyclerview.widget.RecyclerView +import com.afollestad.materialdialogs.MaterialDialog import com.javinator9889.handwashingreminder.R import com.javinator9889.handwashingreminder.activities.base.BaseFragmentView -import com.javinator9889.handwashingreminder.utils.RemoteConfig -import kotlinx.android.synthetic.main.under_construction.* +import com.javinator9889.handwashingreminder.activities.base.LayoutVisibilityChange +import com.javinator9889.handwashingreminder.activities.views.fragments.news.adapter.News +import com.javinator9889.handwashingreminder.activities.views.viewmodels.NewsViewModel +import com.javinator9889.handwashingreminder.data.UserProperties +import com.mikepenz.fastadapter.FastAdapter +import com.mikepenz.fastadapter.GenericItem +import com.mikepenz.fastadapter.adapters.GenericItemAdapter +import com.mikepenz.fastadapter.adapters.ItemAdapter +import com.mikepenz.fastadapter.listeners.ClickEventHook +import com.mikepenz.fastadapter.scroll.EndlessRecyclerOnScrollListener +import com.mikepenz.fastadapter.ui.items.ProgressItem +import kotlinx.android.synthetic.main.loading_recycler_view.* +import kotlinx.android.synthetic.main.loading_recycler_view.view.* +import kotlinx.android.synthetic.main.refreshing_layout.* +import kotlinx.coroutines.launch +import timber.log.Timber -private const val ARG_UNDER_CONSTRUCTION_TEXT = "news:text:content" - -class NewsFragment : BaseFragmentView() { +class NewsFragment : BaseFragmentView(), LayoutVisibilityChange { @LayoutRes - override val layoutId: Int = R.layout.under_construction + override val layoutId: Int = R.layout.refreshing_layout + private lateinit var fastAdapter: FastAdapter + private lateinit var footerAdapter: GenericItemAdapter + private var viewCreated = false + private val newsAdapter = ItemAdapter() + private val newsViewModel: NewsViewModel by viewModels() + private val activeItems = mutableSetOf() + + init { + lifecycleScope.launch { + whenStarted { + loading.visibility = View.VISIBLE + refreshLayout.isEnabled = false + newsViewModel.newsData.observe(viewLifecycleOwner) { + if (::footerAdapter.isInitialized) + footerAdapter.clear() + if (it.hasError && newsAdapter.adapterItemCount == 0) { + errorScreen.visibility = View.VISIBLE + container.visibility = View.INVISIBLE + refreshLayout.isEnabled = true + return@observe + } else errorScreen.visibility = View.INVISIBLE + if (it.id !in activeItems) { + val newsObject = News( + title = it.title, + short = "${it.text.take(200)}…", + url = it.url, + discoverDate = it.discoverDate, + imageUrl = it.elements?.url, + website = it.website?.name, + websiteImageUrl = it.website?.iconURL, + lifecycleOwner = this@NewsFragment + ) + newsAdapter.add(newsObject) + loading.visibility = View.INVISIBLE + container.visibility = View.VISIBLE + refreshLayout.isEnabled = true + activeItems.add(it.id) + } + } + } + } + } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - if (savedInstanceState != null) { - underConstructionText.text = savedInstanceState.getString( - ARG_UNDER_CONSTRUCTION_TEXT - ) - } else { - with(Firebase.remoteConfig) { - underConstructionText.text = - getString(RemoteConfig.WORK_IN_PROGRESS) + footerAdapter = ItemAdapter.items() + fastAdapter = FastAdapter.with(listOf(newsAdapter, footerAdapter)) + val rvManager = LinearLayoutManager(context) + val scrollListener = + object : EndlessRecyclerOnScrollListener(footerAdapter) { + override fun onLoadMore(currentPage: Int) { + view.container.post { + footerAdapter.clear() + Timber.d("Loading more") + val progressItem = ProgressItem() + progressItem.isEnabled = true + footerAdapter.add(progressItem) + lifecycleScope.launch { + newsViewModel.populateData( + from = newsAdapter.adapterItemCount, + amount = 20, + language = UserProperties.language + ) + } + } + } + } + with(view.container) { + layoutManager = rvManager + adapter = fastAdapter + itemAnimator = DefaultItemAnimator() + addOnScrollListener(scrollListener) + } + fastAdapter.addEventHooks(listOf(NewsClickHook(), ShareClickHook())) + fastAdapter.withSavedInstanceState(savedInstanceState) + viewCreated = savedInstanceState == null + refreshLayout.setOnRefreshListener { + refreshLayout.isRefreshing = true + newsAdapter.clear() + activeItems.clear() + footerAdapter.clear() + scrollListener.disable() + lifecycleScope.launch { + newsViewModel.populateData(language = UserProperties.language) + }.invokeOnCompletion { + refreshLayout.isRefreshing = false + scrollListener.enable() + scrollListener.resetPageCount() } + container.visibility = View.INVISIBLE + errorScreen.visibility = View.INVISIBLE } } override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) - outState.putString( - ARG_UNDER_CONSTRUCTION_TEXT, underConstructionText.text.toString() - ) + fastAdapter.saveInstanceState(outState) + } + + fun goTop() { + val smoothScroller = object : LinearSmoothScroller(requireContext()) { + override fun getVerticalSnapPreference(): Int = SNAP_TO_START + } + smoothScroller.targetPosition = 0 + container.layoutManager?.startSmoothScroll(smoothScroller) + } + + private inner class NewsClickHook : ClickEventHook() { + override fun onBind(viewHolder: RecyclerView.ViewHolder) = + if (viewHolder is News.ViewHolder) viewHolder.cardContainer + else null + + override fun onClick( + v: View, + position: Int, + fastAdapter: FastAdapter, + item: News + ) { + val website = Uri.parse(item.url) + with(Intent(Intent.ACTION_VIEW, website)) { + if (resolveActivity(requireContext().packageManager) != null) + startActivity(this) + else { + MaterialDialog(requireContext()).show { + title(R.string.no_app) + message( + text = getString( + R.string.no_app_long, + getString(R.string.browser_err) + ) + ) + positiveButton(android.R.string.ok) + cancelable(true) + cancelOnTouchOutside(true) + } + } + } + } + } + + override fun onVisibilityChanged(visibility: Int) { + if (visibility == View.VISIBLE && viewCreated) { + lifecycleScope.launch { + newsViewModel.populateData(language = UserProperties.language) + } + viewCreated = false + } + } + + private inner class ShareClickHook : ClickEventHook() { + override fun onBind(viewHolder: RecyclerView.ViewHolder) = + if (viewHolder is News.ViewHolder) viewHolder.shareImage + else null + + override fun onClick( + v: View, + position: Int, + fastAdapter: FastAdapter, + item: News + ) { + with(Intent.createChooser(Intent().apply { + action = Intent.ACTION_SEND + putExtra( + Intent.EXTRA_TEXT, + "${item.title} — ${item.url} via Handwashing Reminder" + ) + putExtra(Intent.EXTRA_TITLE, item.title) + item.imageUrl?.let { data = Uri.parse(it) } + flags = Intent.FLAG_GRANT_READ_URI_PERMISSION + type = "text/plain" + }, null)) { + startActivity(this) + } + } } } \ No newline at end of file diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/news/adapter/News.kt b/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/news/adapter/News.kt new file mode 100644 index 0000000..97e04a2 --- /dev/null +++ b/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/news/adapter/News.kt @@ -0,0 +1,104 @@ +/* + * Copyright © 2020 - present | Handwashing reminder by Javinator9889 + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see https://www.gnu.org/licenses/. + * + * Created by Javinator9889 on 3/06/20 - Handwashing reminder. + */ +package com.javinator9889.handwashingreminder.activities.views.fragments.news.adapter + +import android.annotation.SuppressLint +import android.view.View +import android.widget.ImageView +import android.widget.TextView +import androidx.lifecycle.LifecycleOwner +import androidx.lifecycle.lifecycleScope +import coil.api.load +import coil.size.Scale +import com.airbnb.lottie.LottieAnimationView +import com.google.android.material.card.MaterialCardView +import com.javinator9889.handwashingreminder.R +import com.mikepenz.fastadapter.FastAdapter +import com.mikepenz.fastadapter.items.AbstractItem +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import timber.log.Timber +import java.text.DateFormat +import java.util.* + +data class News( + val title: String, + val short: String, + val url: String, + val discoverDate: Date?, + val imageUrl: String?, + val website: String?, + val websiteImageUrl: String?, + val lifecycleOwner: LifecycleOwner, + override val layoutRes: Int = R.layout.news_card_view, + override val type: Int = 1 +) : AbstractItem() { + override fun getViewHolder(v: View) = ViewHolder(v) + + class ViewHolder(private val view: View) : + FastAdapter.ViewHolder(view) { + private val title: TextView = view.findViewById(R.id.title) + private val description: TextView = view.findViewById(R.id.description) + private val imageHeader: LottieAnimationView = + view.findViewById(R.id.imageHeader) + private val websiteLogo: ImageView = view.findViewById(R.id.ws_logo) + private val websiteName: TextView = view.findViewById(R.id.ws_name) + private val publishDate: TextView = view.findViewById(R.id.date) + val cardContainer: MaterialCardView = view.findViewById(R.id.root) + val shareImage: ImageView = view.findViewById(R.id.share) + + @SuppressLint("SetTextI18n") + override fun bindView(item: News, payloads: List) { + val formatter = DateFormat.getDateTimeInstance() + val context = view.context + imageHeader.setAnimation(R.raw.downloading) + item.lifecycleOwner.lifecycleScope.launch(Dispatchers.Main) { + title.text = item.title + description.text = item.short + if (item.imageUrl != null) { + imageHeader.load(item.imageUrl) { + scale(Scale.FILL) + lifecycle(item.lifecycleOwner) + } + } else imageHeader.visibility = View.GONE + if (item.websiteImageUrl != null) { + websiteLogo.load(item.websiteImageUrl) { + scale(Scale.FILL) + lifecycle(item.lifecycleOwner) + } + } else websiteLogo.visibility = View.GONE + websiteName.text = item.website + ?: context.getString(R.string.no_website) + publishDate.text = + item.discoverDate?.let { formatter.format(it) } + ?: context.getString(R.string.no_date) + } + } + + override fun unbindView(item: News) { + Timber.d("Called 'unbind'") + title.text = null + description.text = null + imageHeader.setImageDrawable(null) + websiteLogo.setImageDrawable(null) + websiteName.text = null + publishDate.text = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/settings/ActivityCheckbox.kt b/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/settings/ActivityCheckbox.kt index b2c87ee..a6a3be1 100644 --- a/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/settings/ActivityCheckbox.kt +++ b/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/settings/ActivityCheckbox.kt @@ -27,7 +27,7 @@ import androidx.preference.CheckBoxPreference import com.google.android.gms.common.ConnectionResult import com.google.android.gms.common.GoogleApiAvailability import com.javinator9889.handwashingreminder.R -import com.javinator9889.handwashingreminder.application.HandwashingApplication +import com.javinator9889.handwashingreminder.gms.activity.ActivityHandler import com.javinator9889.handwashingreminder.utils.AndroidVersion import com.javinator9889.handwashingreminder.utils.isAtLeast import com.mikepenz.iconics.IconicsDrawable @@ -89,12 +89,8 @@ class ActivityCheckbox : CheckBoxPreference { firstCheck = false return } - with(HandwashingApplication.instance) { - if (checked) { - activityHandler.startTrackingActivity() - } else { - activityHandler.disableActivityTracker() - } + with(ActivityHandler.getInstance(context)) { + if (checked) startTrackingActivity() else disableActivityTracker() } } } \ No newline at end of file diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/settings/ActivityMultiSelectList.kt b/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/settings/ActivityMultiSelectList.kt deleted file mode 100644 index 8d0db50..0000000 --- a/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/settings/ActivityMultiSelectList.kt +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright © 2020 - present | Handwashing reminder by Javinator9889 - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see https://www.gnu.org/licenses/. - * - * Created by Javinator9889 on 16/04/20 - Handwashing reminder. - */ -package com.javinator9889.handwashingreminder.activities.views.fragments.settings - -import android.content.Context -import android.util.AttributeSet -import androidx.preference.MultiSelectListPreference -import com.javinator9889.handwashingreminder.R -import com.javinator9889.handwashingreminder.application.HandwashingApplication -import com.mikepenz.iconics.IconicsDrawable -import com.mikepenz.iconics.typeface.library.ionicons.Ionicons -import com.mikepenz.iconics.utils.sizeDp -import java.util.* - -class ActivityMultiSelectList : MultiSelectListPreference { - private var isFirstCall = true - constructor(context: Context) : super(context) - constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) - constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : - super(context, attrs, defStyleAttr) - - constructor( - context: Context, attrs: AttributeSet?, defStyleAttr: Int, - defStyleRes: Int - ) : super(context, attrs, defStyleAttr, defStyleRes) - - init { - icon = IconicsDrawable(context, Ionicons.Icon.ion_android_alert).apply { - sizeDp = 20 - } - } - - override fun notifyChanged() { - super.notifyChanged() - if (!isFirstCall) { - loadSummary() - reloadActivityHandler() - } - } - - override fun onSetInitialValue(defaultValue: Any?) { - super.onSetInitialValue(defaultValue) - isFirstCall = false - loadSummary() - } - - private fun loadSummary() { - val builder = StringBuilder() - var isFirstItem = true - var allDisabled = true - selectedItems.forEachIndexed { i, enabled -> - if (enabled) { - allDisabled = false - if (!isFirstItem) - builder.append(", ") - else - isFirstItem = false - builder.append(entries[i].toString().toLowerCase(Locale.ROOT)) - } - } - builder.append('.') - summary = if (allDisabled) - context.getText(R.string.activities_disabled) - else - "${context.getString(R.string.activities_info)} $builder" - } - - private fun reloadActivityHandler() { - with(HandwashingApplication.instance) { - activityHandler.reload() - } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/settings/SettingsView.kt b/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/settings/SettingsView.kt index a7412f5..69e75e7 100644 --- a/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/settings/SettingsView.kt +++ b/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/settings/SettingsView.kt @@ -18,53 +18,29 @@ */ package com.javinator9889.handwashingreminder.activities.views.fragments.settings -import android.content.ClipData -import android.content.ClipDescription -import android.content.Intent -import android.net.Uri import android.os.Bundle import android.view.View -import androidx.annotation.StringRes -import androidx.emoji.text.EmojiCompat -import androidx.lifecycle.lifecycleScope import androidx.preference.ListPreference import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat -import androidx.preference.SwitchPreference -import com.afollestad.materialdialogs.MaterialDialog -import com.android.billingclient.api.BillingClient.BillingResponseCode -import com.google.firebase.analytics.FirebaseAnalytics -import com.google.firebase.perf.FirebasePerformance import com.javinator9889.handwashingreminder.R -import com.javinator9889.handwashingreminder.activities.PrivacyTermsActivity -import com.javinator9889.handwashingreminder.application.HandwashingApplication -import com.javinator9889.handwashingreminder.emoji.EmojiLoader -import com.javinator9889.handwashingreminder.gms.ads.AdsEnabler -import com.javinator9889.handwashingreminder.gms.splitservice.SplitInstallService +import com.javinator9889.handwashingreminder.activities.base.LayoutVisibilityChange +import com.javinator9889.handwashingreminder.data.SettingsLoader import com.javinator9889.handwashingreminder.gms.vendor.BillingService -import com.javinator9889.handwashingreminder.jobs.alarms.Alarms -import com.javinator9889.handwashingreminder.listeners.OnPurchaseFinishedListener -import com.javinator9889.handwashingreminder.utils.* -import com.mikepenz.aboutlibraries.LibsBuilder -import com.mikepenz.iconics.IconicsDrawable -import com.mikepenz.iconics.typeface.IIcon -import com.mikepenz.iconics.typeface.library.ionicons.Ionicons -import com.mikepenz.iconics.utils.sizeDp -import kotlinx.coroutines.* import timber.log.Timber import java.lang.ref.WeakReference class SettingsView : PreferenceFragmentCompat(), - Preference.OnPreferenceChangeListener, OnPurchaseFinishedListener { - private lateinit var firebaseAnalyticsPreference: - WeakReference - private lateinit var firebasePerformancePreference: - WeakReference - private lateinit var adsPreference: WeakReference - private lateinit var donationsPreference: WeakReference - private lateinit var emojiCompat: EmojiCompat - private lateinit var billingService: BillingService - private val app = HandwashingApplication.instance + Preference.OnPreferenceChangeListener, + LayoutVisibilityChange { + lateinit var firebaseAnalyticsPreference: + WeakReference + lateinit var firebasePerformancePreference: + WeakReference + lateinit var adsPreference: WeakReference + lateinit var donationsPreference: WeakReference + lateinit var billingService: BillingService + private val loader = SettingsLoader(view = this, lifecycleOwner = this) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -81,488 +57,18 @@ class SettingsView : PreferenceFragmentCompat(), override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) billingService = BillingService(view.context) - viewLifecycleOwner.lifecycleScope.launch { - val emojiLoader = EmojiLoader.get(view.context) - val share = findPreference("share") - val playStore = findPreference("playstore") - val telegram = findPreference("telegram") - val github = findPreference("github") - val linkedIn = findPreference("linkedin") - val twitter = findPreference("twitter") - val breakfast = findPreference( - Preferences.BREAKFAST_TIME - ) - val lunch = findPreference( - Preferences.LUNCH_TIME - ) - val dinner = findPreference( - Preferences.DINNER_TIME - ) - val firebaseAnalytics = findPreference( - Preferences.ANALYTICS_ENABLED - ) - val firebasePerformance = findPreference( - Preferences.PERFORMANCE_ENABLED - ) - val ads = findPreference(Preferences.ADS_ENABLED) - val donations = - findPreference(Preferences.DONATIONS) - val translations = findPreference("translate") - val suggestions = findPreference("send_suggestions") - val libraries = findPreference("opensource_libs") - val privacyAndTerms = findPreference("tos_privacy") - val deferreds = mutableListOf>() - deferreds.add( - async(Dispatchers.Main) { - share?.let { - it.icon = icon(Ionicons.Icon.ion_android_share) - it.setOnPreferenceClickListener { - with(FirebaseAnalytics.getInstance(requireContext())) { - logEvent(FirebaseAnalytics.Event.SHARE, null) - } - with(Intent.createChooser(Intent().apply { - action = Intent.ACTION_SEND - putExtra( - Intent.EXTRA_TEXT, - getText(R.string.share_text) - ) - putExtra( - Intent.EXTRA_TITLE, - getText(R.string.share_title) - ) - ClipData.Item( - getUriFromRes( - requireContext(), - R.drawable.handwashing_app_logo - ) - ) - clipData = ClipData( - ClipDescription( - getString(R.string.share_label), - arrayOf("image/*") - ), - ClipData.Item( - getUriFromRes( - requireContext(), - R.drawable.handwashing_app_logo - ) - ) - ) - flags = Intent.FLAG_GRANT_READ_URI_PERMISSION - type = "text/plain" - }, null)) { - startActivity(this) - } - true - } - } - }) - deferreds.add( - async(Dispatchers.Main) { - playStore?.let { - it.icon = icon(Ionicons.Icon.ion_android_playstore) - it.setOnPreferenceClickListener { - openWebsite(PLAYSTORE_URL, R.string.playstore_err) - true - } - } - }) - deferreds.add( - async(Dispatchers.Main) { - telegram?.let { - it.setOnPreferenceClickListener { - openWebsite(TELEGRAM_URL, R.string.telegram_err) - true - } - } - }) - deferreds.add( - async(Dispatchers.Main) { - github?.let { - it.icon = icon(Ionicons.Icon.ion_social_github) - it.setOnPreferenceClickListener { - openWebsite(GITHUB_URL, R.string.browser_err) - true - } - } - }) - deferreds.add( - async(Dispatchers.Main) { - twitter?.let { - it.icon = icon(Ionicons.Icon.ion_social_twitter) - it.setOnPreferenceClickListener { - openWebsite(TWITTER_URL, R.string.twitter_err) - true - } - } - }) - deferreds.add( - async(Dispatchers.Main) { - linkedIn?.let { - it.icon = icon(Ionicons.Icon.ion_social_linkedin) - it.setOnPreferenceClickListener { - openWebsite(LINKEDIN_URL, R.string.browser_err) - true - } - } - }) - deferreds.add( - async(Dispatchers.Main) { - firebaseAnalytics?.let { - it.onPreferenceChangeListener = this@SettingsView - it.icon = icon(Ionicons.Icon.ion_arrow_graph_up_right) - firebaseAnalyticsPreference = WeakReference(it) - } - }) - deferreds.add( - async(Dispatchers.Main) { - firebasePerformance?.let { - it.onPreferenceChangeListener = this@SettingsView - it.icon = icon(Ionicons.Icon.ion_speedometer) - firebasePerformancePreference = WeakReference(it) - } - }) - deferreds.add( - async(Dispatchers.Main) { - ads?.let { - it.onPreferenceChangeListener = this@SettingsView - it.icon = icon(Ionicons.Icon.ion_ios_barcode_outline) - adsPreference = WeakReference(it) - } - }) - deferreds.add( - async(Dispatchers.Main) { - donations?.let { - it.onPreferenceChangeListener = this@SettingsView - it.entryValues = if (isDebuggable()) - resources.getTextArray(R.array.in_app_donations_debug) - else - resources.getTextArray(R.array.in_app_donations) - it.icon = icon(Ionicons.Icon.ion_card) - billingService.addOnPurchaseFinishedListener(this@SettingsView) - donationsPreference = WeakReference(it) - } - }) - deferreds.add( - async(Dispatchers.Main) { - translations?.let { - it.icon = icon(Ionicons.Icon.ion_chatbox_working) - it.setOnPreferenceClickListener { - openWebsite(TRANSLATE_URL, R.string.browser_err) - true - } - } - }) - deferreds.add( - async(Dispatchers.Main) { - suggestions?.let { - it.setOnPreferenceClickListener { - with(Intent(Intent.ACTION_SENDTO)) { - type = "*/*" - data = Uri.parse("mailto:") - putExtra(Intent.EXTRA_EMAIL, arrayOf(Email.TO)) - putExtra(Intent.EXTRA_SUBJECT, Email.SUBJECT) - putExtra(Intent.EXTRA_TEXT, getDeviceInfo()) - if (resolveActivity(requireContext().packageManager) - != null - ) { - startActivity(this) - } else { - MaterialDialog(requireContext()).show { - title(R.string.no_app) - message( - text = getString( - R.string.no_app_long, - getString(R.string.sending_email) - ) - ) - positiveButton(android.R.string.ok) - cancelable(true) - cancelOnTouchOutside(true) - } - } - } - true - } - it.icon = icon(Ionicons.Icon.ion_chatbubbles) - } - }) - deferreds.add( - async(Dispatchers.Main) { - libraries?.let { - it.setOnPreferenceClickListener { - val bundle = Bundle(1).apply { - putString("view", "libs") - } - with(FirebaseAnalytics.getInstance(requireContext())) { - logEvent( - FirebaseAnalytics.Event.VIEW_ITEM, - bundle - ) - } - LibsBuilder() - .withAutoDetect(true) - .withFields(R.string::class.java.fields) - .withCheckCachedDetection(true) - .withSortEnabled(true) - .withAboutVersionShown(true) - .withAboutVersionShownCode(true) - .withAboutVersionShownName(true) - .withShowLoadingProgress(true) - .withActivityTitle(getString(R.string.app_name)) - .start(requireContext()) - true - } - it.icon = icon(Ionicons.Icon.ion_code) - } - }) - deferreds.add( - async(Dispatchers.Main) { - privacyAndTerms?.let { - it.setOnPreferenceClickListener { - Intent( - requireContext(), - PrivacyTermsActivity::class.java - ).run { - startActivity(this) - } - true - } - it.icon = icon(Ionicons.Icon.ion_android_cloud_done) - } - }) - deferreds.add( - async(Dispatchers.Main) { - emojiCompat = emojiLoader.await() - breakfast?.let { - it.icon = icon(Ionicons.Icon.ion_coffee) - it.alarm = Alarms.BREAKFAST_ALARM - try { - it.title = - emojiCompat.process(getText(R.string.breakfast_pref_title)) - it.summaryText = - emojiCompat.process(getText(R.string.breakfast_pref_summ)) - } catch (_: IllegalStateException) { - it.title = getText(R.string.breakfast_pref_title) - it.summaryText = - getText(R.string.breakfast_pref_summ) - } finally { - it.updateSummary() - } - } - lunch?.let { - it.icon = icon(Ionicons.Icon.ion_android_restaurant) - it.alarm = Alarms.LUNCH_ALARM - try { - it.title = - emojiCompat.process(getText(R.string.lunch_pref_title)) - it.summaryText = - emojiCompat.process(getText(R.string.lunch_pref_summ)) - } catch (_: IllegalStateException) { - it.title = getText(R.string.lunch_pref_title) - it.summaryText = getText(R.string.lunch_pref_summ) - } finally { - it.updateSummary() - } - } - dinner?.let { - it.icon = icon(Ionicons.Icon.ion_ios_moon_outline) - it.alarm = Alarms.DINNER_ALARM - try { - it.title = - emojiCompat.process(getText(R.string.dinner_pref_title)) - it.summaryText = - emojiCompat.process(getText(R.string.dinner_pref_summ)) - } catch (_: IllegalStateException) { - it.title = getText(R.string.dinner_pref_title) - it.summaryText = getText(R.string.dinner_pref_summ) - } finally { - it.updateSummary() - } - } - }) - deferreds.awaitAll() - } } override fun onPreferenceChange( preference: Preference?, newValue: Any? ): Boolean { - return when { - ::firebaseAnalyticsPreference.isInitialized && - preference == firebaseAnalyticsPreference.get() -> { - val enabled = newValue as Boolean - with(FirebaseAnalytics.getInstance(requireContext())) { - setAnalyticsCollectionEnabled(enabled) - if (!enabled) - setCurrentScreen(requireActivity(), null, null) - } - true - } - ::firebasePerformancePreference.isInitialized && - preference == firebasePerformancePreference.get() -> { - val enabled = newValue as Boolean - with(FirebasePerformance.getInstance()) { - isPerformanceCollectionEnabled = enabled - } - true - } - ::adsPreference.isInitialized && - preference == adsPreference.get() -> { - val enabled = newValue as Boolean - var ret = false - val adEnabler = AdsEnabler(app) - if (enabled) { - adEnabler.enableAds() - with(SplitInstallService.getInstance(app)) { - deferredInstall(Ads.MODULE_NAME) - } - ret = true - } else { - MaterialDialog(requireContext()).show { - title(R.string.ads_explanation_title) - try { - message( - text = emojiCompat.process( - context.getText(R.string.ads_explanation_desc) - ) - ) - } catch (_: IllegalStateException) { - message(R.string.ads_explanation_desc) - } - positiveButton(android.R.string.cancel) { - ret = false - } - negativeButton(R.string.disable) { - ret = true - adEnabler.disableAds() - app.adLoader = null - with(SplitInstallService.getInstance(app)) { - deferredUninstall(Ads.MODULE_NAME) - } - (preference as SwitchPreference).isChecked = - false - } - cancelOnTouchOutside(false) - cancelable(false) - } - } - ret - } - ::donationsPreference.isInitialized && - preference == donationsPreference.get() -> { - Timber.d("Purchase clicked - $newValue") - val purchaseId = newValue as String - if (isConnected()) - billingService.doPurchase(purchaseId, requireActivity()) - else { - if (context == null) - return false - MaterialDialog(requireContext()).show { - title(R.string.no_internet_connection) - message(R.string.no_internet_connection_long) - positiveButton(android.R.string.ok) - cancelable(true) - cancelOnTouchOutside(true) - } - } - false - } - else -> true - } + Timber.d("Preference $preference changed - ${preference?.key}") + return loader.onPreferenceChange(preference, newValue) } - override fun onPurchaseFinished(token: String, resultCode: Int) { - if (context == null) - return - val context = requireContext() - when (resultCode) { - BillingResponseCode.OK -> { - try { - MaterialDialog(context) - .title(R.string.donation_thanks) - .message( - text = emojiCompat - .process(context.getText(R.string.donation_desc)) - ) - .positiveButton(android.R.string.ok) - } catch (_: IllegalStateException) { - MaterialDialog(context) - .title(R.string.donation_thanks) - .message(R.string.donation_desc) - .positiveButton(android.R.string.ok) - } - } - BillingResponseCode.USER_CANCELED -> { - try { - MaterialDialog(context) - .title(R.string.donation_cancelled) - .message( - text = emojiCompat.process( - context.getText(R.string.donation_cancelled_desc) - ) - ) - .positiveButton(android.R.string.ok) - } catch (_: IllegalStateException) { - MaterialDialog(context) - .title(R.string.donation_cancelled) - .message(R.string.donation_cancelled_desc) - .positiveButton(android.R.string.ok) - } - } - else -> { - try { - MaterialDialog(context) - .title(R.string.donation_error) - .message( - text = emojiCompat.process( - context.getText(R.string.donation_error_desc) - ) - ) - .positiveButton(android.R.string.ok) - } catch (_: IllegalStateException) { - MaterialDialog(context) - .title(R.string.donation_error) - .message(R.string.donation_error_desc) - .positiveButton(android.R.string.ok) - } - } - }.show() - } - - private fun icon(icon: IIcon): IconicsDrawable = - IconicsDrawable(requireContext(), icon).apply { sizeDp = 20 } - - private fun openWebsite(url: String, @StringRes onErrString: Int) { - openWebsite(url, getString(onErrString)) - } - - private fun openWebsite(url: String, onErrString: String) { - if (context == null) - return - val website = Uri.parse(url) - val bundle = Bundle(1).apply { putString("url", url) } - with(FirebaseAnalytics.getInstance(requireContext())) { - logEvent(FirebaseAnalytics.Event.VIEW_ITEM, bundle) - } - with(Intent(Intent.ACTION_VIEW, website)) { - if (resolveActivity(requireContext().packageManager) != - null - ) startActivity(this) - else - MaterialDialog(requireContext()).show { - title(R.string.no_app) - message( - text = getString( - R.string.no_app_long, - onErrString - ) - ) - positiveButton(android.R.string.ok) - cancelable(true) - cancelOnTouchOutside(true) - } - } + override fun onVisibilityChanged(visibility: Int) { + if (visibility == View.VISIBLE) + loader.loadViews() } } \ No newline at end of file diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/washinghands/SliderView.kt b/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/washinghands/SliderView.kt index a48fca7..27dc1a3 100644 --- a/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/washinghands/SliderView.kt +++ b/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/washinghands/SliderView.kt @@ -27,10 +27,10 @@ import androidx.fragment.app.viewModels import androidx.lifecycle.Observer import androidx.lifecycle.lifecycleScope import androidx.lifecycle.whenStarted +import coil.api.load import com.javinator9889.handwashingreminder.R import com.javinator9889.handwashingreminder.activities.base.BaseFragmentView import com.javinator9889.handwashingreminder.activities.views.viewmodels.* -import com.javinator9889.handwashingreminder.graphics.GlideApp import kotlinx.android.synthetic.main.wash_your_hands_demo.* import kotlinx.coroutines.launch import timber.log.Timber @@ -69,9 +69,7 @@ class SliderView : BaseFragmentView() { }) washingHandsModel.image.observe(viewLifecycleOwner, Observer { try { - GlideApp.with(this@SliderView) - .load(it) - .into(image) + image.load(it) } catch (e: Exception) { Timber.e(e, "Error while loading Glide view") image.setImageResource(it) @@ -124,10 +122,7 @@ class SliderView : BaseFragmentView() { video.requestFocus() video.start() try { - GlideApp.with(this) - .load(drawableId) - .centerInside() - .into(image) + image.load(drawableId) } catch (e: Exception) { Timber.e(e, "Error while loading Glide view") image.setImageResource(drawableId) diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/washinghands/WashingHandsFragment.kt b/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/washinghands/WashingHandsFragment.kt index 05afd44..f02bd10 100644 --- a/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/washinghands/WashingHandsFragment.kt +++ b/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/fragments/washinghands/WashingHandsFragment.kt @@ -27,6 +27,7 @@ import androidx.viewpager2.widget.ViewPager2 import com.google.android.material.tabs.TabLayoutMediator import com.javinator9889.handwashingreminder.R import com.javinator9889.handwashingreminder.activities.base.BaseFragmentView +import com.javinator9889.handwashingreminder.activities.base.LayoutVisibilityChange import kotlinx.android.synthetic.main.how_to_wash_hands_layout.view.* import kotlinx.android.synthetic.main.privacy_terms.* import timber.log.Timber @@ -34,7 +35,7 @@ import java.lang.ref.WeakReference internal const val NUM_PAGES = 8 -class WashingHandsFragment : BaseFragmentView() { +class WashingHandsFragment : BaseFragmentView(), LayoutVisibilityChange { override val layoutId: Int = R.layout.how_to_wash_hands_layout private val items = arrayOfNulls>(NUM_PAGES) @@ -91,4 +92,6 @@ class WashingHandsFragment : BaseFragmentView() { } } } + + override fun onVisibilityChanged(visibility: Int) {} } \ No newline at end of file diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/viewmodels/DiseaseInformationViewModel.kt b/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/viewmodels/DiseaseInformationViewModel.kt index e978ada..89b5868 100644 --- a/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/viewmodels/DiseaseInformationViewModel.kt +++ b/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/viewmodels/DiseaseInformationViewModel.kt @@ -18,24 +18,24 @@ */ package com.javinator9889.handwashingreminder.activities.views.viewmodels -import android.os.Parcel -import android.os.Parcelable import android.text.Spanned -import android.text.TextUtils -import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.ViewModel -import androidx.lifecycle.liveData +import androidx.lifecycle.viewModelScope import com.beust.klaxon.Klaxon import com.google.firebase.ktx.Firebase import com.google.firebase.remoteconfig.ktx.remoteConfig import com.javinator9889.handwashingreminder.collections.DiseasesInformation import com.javinator9889.handwashingreminder.collections.DiseasesList -import com.javinator9889.handwashingreminder.collections.DiseasesListWrapper -import com.javinator9889.handwashingreminder.utils.RemoteConfig.Keys.DISEASES_JSON +import com.javinator9889.handwashingreminder.data.ParsedHTMLText +import com.javinator9889.handwashingreminder.utils.RemoteConfig.DISEASES_JSON +import com.javinator9889.handwashingreminder.utils.notNull import kotlinx.coroutines.* import org.sufficientlysecure.htmltextview.HtmlFormatter import org.sufficientlysecure.htmltextview.HtmlFormatterBuilder +import timber.log.Timber +import java.util.concurrent.atomic.AtomicBoolean private const val DATA_KEY = "text:html:text" private const val PARSED_JSON_KEY = "text:json:parsed" @@ -43,62 +43,72 @@ private const val PARSED_JSON_KEY = "text:json:parsed" class DiseaseInformationViewModel( private val state: SavedStateHandle ) : ViewModel() { - val parsedHTMLText: LiveData> = liveData { - emitSource(state.getLiveData(DATA_KEY, parseHTML())) + private val informationList: DiseasesList = loadHtmlData() + private val isHTMLParsed = AtomicBoolean(false) + val parsedHTMLText: MutableLiveData> = + state.getLiveData(DATA_KEY, emptyList()) + + private fun loadHtmlData(): DiseasesList { + if (state.contains(PARSED_JSON_KEY) && + state.get>(PARSED_JSON_KEY) != null + ) + return DiseasesList(state.get(PARSED_JSON_KEY)!!) + val diseasesString = with(Firebase.remoteConfig) { + getString(DISEASES_JSON) + } + return Klaxon().parse(diseasesString) + ?: DiseasesList(emptyList()) } - private suspend fun parseHTML(): List { - val informationList = withContext(Dispatchers.IO) { - if (state.contains(PARSED_JSON_KEY) && - state.get>(PARSED_JSON_KEY) != null - ) - DiseasesList( - state.get>(PARSED_JSON_KEY)!! - ) - val diseasesString = - with(Firebase.remoteConfig) { - getString(DISEASES_JSON) - } - Klaxon().parse(diseasesString) - } ?: return emptyList() - state.set( - PARSED_JSON_KEY, - DiseasesListWrapper(informationList.diseases) + fun parseHtml() = viewModelScope.launch { + Timber.d("Parsing HTML") + if (!state.get>(DATA_KEY) + .isNullOrEmpty() || isHTMLParsed.get() ) - return withContext(Dispatchers.Default) { - val parsedItemsList = - ArrayList(informationList.diseases.size) - val deferreds = - ArrayList>>(informationList.diseases.size) - informationList.diseases.forEach { information -> - val htmlDef = listOf( - async { createHTML(information.name) }, - async { createHTML(information.shortDescription) }, - async { createHTML(information.longDescription) }, - async { createHTML(information.provider) }, - async { createHTML(information.website) }, - async { createHTML(information.symptoms) }, - async { createHTML(information.prevention) } + return@launch + val parsedItemsList = + ArrayList(informationList.diseases.size) + val deferreds = mutableListOf>>() + informationList.diseases.forEach { disease -> + deferreds.add( + listOf( + async { createHTML(disease.name) }, + async { createHTML(disease.shortDescription) }, + async { createHTML(disease.longDescription) }, + async { createHTML(disease.provider) }, + async { createHTML(disease.website) }, + async { createHTML(disease.symptoms) }, + async { createHTML(disease.prevention) } ) - deferreds.add(htmlDef) - } - deferreds.forEachIndexed { i, infoList -> - val data = infoList.awaitAll() + ) + } + deferreds.forEachIndexed { i, htmlData -> + launch { + val data = htmlData.awaitAll() parsedItemsList.add( i, ParsedHTMLText( - data[0], - data[1], - data[2], - data[3], - data[4], - data[5], - data[6] + name = data[0], + shortDescription = data[1], + longDescription = data[2], + provider = data[3], + website = data[4], + symptoms = data[5], + prevention = data[6] ) ) + withContext(Dispatchers.Main) { + state[DATA_KEY] = parsedItemsList + } + }.invokeOnCompletion { + it.notNull { + viewModelScope.launch(context = Dispatchers.Main) { + state[DATA_KEY] = parsedItemsList + parsedHTMLText.value = parsedItemsList + } + } } - state.set(DATA_KEY, parsedItemsList) - parsedItemsList } + isHTMLParsed.set(true) } private fun createHTML(htmlText: String): Spanned = @@ -107,54 +117,10 @@ class DiseaseInformationViewModel( isRemoveTrailingWhiteSpace = true HtmlFormatter.formatHtml(this) } -} - -class DiseaseInformationFactory : - ViewModelAssistedFactory { - override fun create(handle: SavedStateHandle) = - DiseaseInformationViewModel(handle) -} - -data class ParsedHTMLText( - val name: CharSequence, - val shortDescription: CharSequence, - val longDescription: CharSequence, - val provider: CharSequence, - val website: CharSequence, - val symptoms: CharSequence, - val prevention: CharSequence -) : Parcelable { - constructor(parcel: Parcel) : this( - TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(parcel), - TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(parcel), - TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(parcel), - TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(parcel), - TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(parcel), - TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(parcel), - TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(parcel) - ) - - override fun writeToParcel(parcel: Parcel, flags: Int) { - TextUtils.writeToParcel(name, parcel, flags) - TextUtils.writeToParcel(shortDescription, parcel, flags) - TextUtils.writeToParcel(longDescription, parcel, flags) - TextUtils.writeToParcel(provider, parcel, flags) - TextUtils.writeToParcel(website, parcel, flags) - TextUtils.writeToParcel(symptoms, parcel, flags) - TextUtils.writeToParcel(prevention, parcel, flags) - } - - override fun describeContents(): Int { - return 0 - } - - companion object CREATOR : Parcelable.Creator { - override fun createFromParcel(parcel: Parcel): ParsedHTMLText { - return ParsedHTMLText(parcel) - } - override fun newArray(size: Int): Array { - return arrayOfNulls(size) - } + companion object Factory : + ViewModelAssistedFactory { + override fun create(handle: SavedStateHandle) = + DiseaseInformationViewModel(handle) } } \ No newline at end of file diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/viewmodels/NewsViewModel.kt b/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/viewmodels/NewsViewModel.kt new file mode 100644 index 0000000..5a0f430 --- /dev/null +++ b/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/viewmodels/NewsViewModel.kt @@ -0,0 +1,86 @@ +/* + * Copyright © 2020 - present | Handwashing reminder by Javinator9889 + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see https://www.gnu.org/licenses/. + * + * Created by Javinator9889 on 3/06/20 - Handwashing reminder. + */ +package com.javinator9889.handwashingreminder.activities.views.viewmodels + +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.ViewModel +import com.beust.klaxon.JsonReader +import com.beust.klaxon.Klaxon +import com.javinator9889.handwashingreminder.collections.* +import com.javinator9889.handwashingreminder.firebase.Auth +import com.javinator9889.handwashingreminder.network.HttpDownloader +import com.javinator9889.handwashingreminder.utils.API_URL +import javinator9889.localemanager.utils.languagesupport.LanguagesSupport.Language +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext +import okhttp3.Headers +import timber.log.Timber +import java.io.Reader +import java.util.* + + +class NewsViewModel : ViewModel() { + val newsData: MutableLiveData = MutableLiveData() + + suspend fun populateData( + from: Int = 0, + amount: Int = 10, + @Language language: String = Language.ENGLISH + ) { + try { + val httpRequest = HttpDownloader() + val klaxon = with(Klaxon()) { + propertyStrategy(newsStrategy) + fieldConverter(KlaxonDate::class, dateConverter) + fieldConverter(KlaxonElements::class, elementConverter) + } + var requestReader: Reader? = null + Auth.init() + val token = Auth.token() + Timber.d("Auth token: $token") + withContext(Dispatchers.IO) { + requestReader = httpRequest.json( + "${API_URL}/api/v1?from=$from&amount=$amount&lang=$language", + headers = Headers.of(mapOf("Authorization" to "Bearer $token")) + ) + } + withContext(Dispatchers.Default) { + JsonReader(requestReader!!).use { reader -> + reader.beginArray { + while (reader.hasNext()) { + newsData.postValue(klaxon.parse(reader)) + } + } + } + } + } catch (e: Throwable) { + Timber.w(e, "Exception while populating data") + withContext(Dispatchers.Main) { + newsData.value = NewsData( + hasError = true, + id = "", + discoverDate = Date(), + title = "", + text = "", + url = "" + ) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/viewmodels/VideoModel.kt b/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/viewmodels/VideoModel.kt index 09c6ed2..ff05116 100644 --- a/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/viewmodels/VideoModel.kt +++ b/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/viewmodels/VideoModel.kt @@ -18,16 +18,17 @@ */ package com.javinator9889.handwashingreminder.activities.views.viewmodels +import android.annotation.SuppressLint import androidx.lifecycle.LiveData import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.ViewModel import androidx.lifecycle.liveData import com.javinator9889.handwashingreminder.application.HandwashingApplication import com.javinator9889.handwashingreminder.network.HttpDownloader -import com.javinator9889.handwashingreminder.utils.Videos.URI.FILENAME -import com.javinator9889.handwashingreminder.utils.Videos.URI.HASH -import com.javinator9889.handwashingreminder.utils.Videos.URI.URL -import com.javinator9889.handwashingreminder.utils.Videos.URI.VideoList +import com.javinator9889.handwashingreminder.utils.Videos.FILENAME +import com.javinator9889.handwashingreminder.utils.Videos.HASH +import com.javinator9889.handwashingreminder.utils.Videos.URL +import com.javinator9889.handwashingreminder.utils.Videos.VideoList import com.javinator9889.handwashingreminder.utils.isConnected import com.javinator9889.handwashingreminder.utils.trace import kotlinx.coroutines.Dispatchers @@ -48,7 +49,8 @@ private const val LIVEDATA_KEY = "videomodel:livedata" class VideoModel( private val state: SavedStateHandle, private val position: Int ) : ViewModel() { - private val cachePath: File = HandwashingApplication.instance.applicationContext.cacheDir + private val cachePath: File = + HandwashingApplication.instance.applicationContext.cacheDir val videos: LiveData = liveData { emitSource(state.getLiveData(LIVEDATA_KEY, loadVideo())) } @@ -116,14 +118,15 @@ class VideoModel( } } + @SuppressLint("DefaultLocale") private fun sameSHA2Hash( hash: String, messageDigest: MessageDigest ): Boolean { val sha2sum = messageDigest.digest() val bigInt = BigInteger(1, sha2sum) - val obtainedHash = String.format("%064x", bigInt) - return obtainedHash.equals(hash, true) + val obtainedHash = String.format("%064x", bigInt).toLowerCase() + return obtainedHash.equals(hash.toLowerCase(), true) } } diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/viewmodels/WashingHandsModel.kt b/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/viewmodels/WashingHandsModel.kt index 79d2c19..15cf317 100644 --- a/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/viewmodels/WashingHandsModel.kt +++ b/app/src/main/java/com/javinator9889/handwashingreminder/activities/views/viewmodels/WashingHandsModel.kt @@ -77,7 +77,7 @@ class WashingHandsModel( private suspend fun processStringArray(@ArrayRes array: Int): CharSequence = with(HandwashingApplication.instance) { - with(EmojiLoader.get(this)) { + with(EmojiLoader.loadAsync(this)) { try { this.await() .process(resources.getStringArray(array)[position]) diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/application/HandwashingApplication.kt b/app/src/main/java/com/javinator9889/handwashingreminder/application/HandwashingApplication.kt index 0b192d7..ab2c123 100644 --- a/app/src/main/java/com/javinator9889/handwashingreminder/application/HandwashingApplication.kt +++ b/app/src/main/java/com/javinator9889/handwashingreminder/application/HandwashingApplication.kt @@ -25,7 +25,6 @@ import androidx.preference.PreferenceManager import com.google.android.play.core.splitcompat.SplitCompat import com.google.firebase.FirebaseApp import com.google.firebase.crashlytics.FirebaseCrashlytics -import com.javinator9889.handwashingreminder.gms.activity.ActivityHandler import com.javinator9889.handwashingreminder.gms.ads.AdLoader import com.javinator9889.handwashingreminder.utils.LogReportTree import com.javinator9889.handwashingreminder.utils.isDebuggable @@ -36,12 +35,20 @@ import timber.log.Timber class HandwashingApplication : BaseApplication() { + private val scope = CoroutineScope(Dispatchers.Default) var adLoader: AdLoader? = null - lateinit var activityHandler: ActivityHandler + set(value) = synchronized(this) { + field = value + } + get() = synchronized(this) { + field + } lateinit var firebaseInitDeferred: Deferred companion object { lateinit var instance: HandwashingApplication + val scope: CoroutineScope + get() = instance.scope } override fun attachBaseContext(base: Context?) { @@ -56,12 +63,11 @@ class HandwashingApplication : BaseApplication() { override fun onCreate() { super.onCreate() instance = this - activityHandler = ActivityHandler(this) firebaseInitDeferred = initFirebaseAppAsync() } private fun initFirebaseAppAsync(): Deferred { - return GlobalScope.async { + return scope.async { withContext(Dispatchers.IO) { FirebaseApp.initializeApp(this@HandwashingApplication) if (isDebuggable()) { diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/collections/DiseaseTextAdapter.kt b/app/src/main/java/com/javinator9889/handwashingreminder/collections/DiseaseTextAdapter.kt index 44b1ddc..441a5f0 100644 --- a/app/src/main/java/com/javinator9889/handwashingreminder/collections/DiseaseTextAdapter.kt +++ b/app/src/main/java/com/javinator9889/handwashingreminder/collections/DiseaseTextAdapter.kt @@ -27,7 +27,7 @@ import com.javinator9889.handwashingreminder.activities.views.fragments.diseases import com.javinator9889.handwashingreminder.activities.views.fragments.diseases.ARG_POSITION import com.javinator9889.handwashingreminder.activities.views.fragments.diseases.DiseaseDescriptionFragment import com.javinator9889.handwashingreminder.activities.views.fragments.diseases.DiseaseExtraInformationFragment -import com.javinator9889.handwashingreminder.activities.views.viewmodels.ParsedHTMLText +import com.javinator9889.handwashingreminder.data.ParsedHTMLText class DiseaseTextAdapter( fm: FragmentActivity, diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/collections/NewsInformation.kt b/app/src/main/java/com/javinator9889/handwashingreminder/collections/NewsInformation.kt new file mode 100644 index 0000000..02e26bd --- /dev/null +++ b/app/src/main/java/com/javinator9889/handwashingreminder/collections/NewsInformation.kt @@ -0,0 +1,181 @@ +/* + * Copyright © 2020 - present | Handwashing reminder by Javinator9889 + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see https://www.gnu.org/licenses/. + * + * Created by Javinator9889 on 3/06/20 - Handwashing reminder. + */ +package com.javinator9889.handwashingreminder.collections + +import android.os.Parcel +import android.os.Parcelable +import com.beust.klaxon.* +import timber.log.Timber +import java.text.SimpleDateFormat +import java.util.* +import kotlin.reflect.KProperty + +data class NewsData( + val id: String, + @KlaxonDate + val discoverDate: Date, + val title: String, + val text: String, + val url: String, + @KlaxonElements + val elements: Elements? = null, + val website: Website? = null, + @Json(ignored = true) + val hasError: Boolean = false +) : Parcelable { + constructor(parcel: Parcel) : this( + parcel.readString()!!, + Date(parcel.readLong()), + parcel.readString()!!, + parcel.readString()!!, + parcel.readString()!!, + parcel.readParcelable(Elements::class.java.classLoader), + parcel.readParcelable(Website::class.java.classLoader), + parcel.readInt() == 1 + ) + + override fun writeToParcel(parcel: Parcel, flags: Int) { + parcel.writeString(id) + parcel.writeLong(discoverDate.time) + parcel.writeString(title) + parcel.writeString(text) + parcel.writeString(url) + parcel.writeParcelable(elements, flags) + parcel.writeParcelable(website, flags) + parcel.writeInt(if (hasError) 1 else 0) + } + + override fun describeContents() = 0 + + companion object CREATOR : Parcelable.Creator { + override fun createFromParcel(parcel: Parcel) = NewsData(parcel) + + override fun newArray(size: Int) = arrayOfNulls(size) + } +} + +data class Elements(val url: String?) : Parcelable { + constructor(parcel: Parcel) : this(parcel.readString()) + + override fun writeToParcel(parcel: Parcel, flags: Int) { + parcel.writeString(url) + } + + override fun describeContents() = 0 + + companion object CREATOR : Parcelable.Creator { + override fun createFromParcel(parcel: Parcel) = Elements(parcel) + + override fun newArray(size: Int) = arrayOfNulls(size) + } +} + +data class Website( + val name: String, + val hostName: String, + val iconURL: String? +) : Parcelable { + constructor(parcel: Parcel) : this( + parcel.readString()!!, + parcel.readString()!!, + parcel.readString()!! + ) + + override fun writeToParcel(parcel: Parcel, flags: Int) { + parcel.writeString(name) + parcel.writeString(hostName) + parcel.writeString(iconURL) + } + + override fun describeContents() = 0 + + companion object CREATOR : Parcelable.Creator { + override fun createFromParcel(parcel: Parcel) = Website(parcel) + + override fun newArray(size: Int) = arrayOfNulls(size) + } +} + +@Target(AnnotationTarget.FIELD) +annotation class KlaxonDate + +val dateConverter = object : Converter { + override fun canConvert(cls: Class<*>) = cls == Date::class.java + + override fun fromJson(jv: JsonValue): Date? = + if (jv.string != null) { + try { + with( + SimpleDateFormat( + "yyyy-MM-dd'T'HH:mm:ss.SSSZ", Locale.US + ) + ) { + parse(jv.string!!) + } + } catch (e: Exception) { + Timber.w(e, "Captured error while parsing date") + null + } + } else throw KlaxonException("Couldn't parse date: ${jv.string}") + + override fun toJson(value: Any) = """ { "discoverDate": $value } """ +} + +@Target(AnnotationTarget.FIELD) +annotation class KlaxonElements + +val elementConverter = object : Converter { + override fun canConvert(cls: Class<*>) = cls == Elements::class.java + + override fun fromJson(jv: JsonValue): Elements? { + Timber.d("Parsing 'KlaxonElements'") + if (jv.array != null) { + Timber.d("Parsing 'Elements'") + val elements = jv.array!! + return try { + Elements(url = (elements[0] as JsonObject)["url"] as String) + } catch (e: Exception) { + Timber.w(e, "Captured exception while parsing Klaxon value") + null + } + } else throw KlaxonException("Couldn't parse array ${jv.array}") + } + + override fun toJson(value: Any) = """ { "imageUrl": "$value" } """ +} + +val newsStrategy = object : PropertyStrategy { + private val acceptedProperties = + setOf( + "id", + "discoverDate", + "title", + "text", + "url", + "elements", + "website", + "url", + "name", + "hostName", + "iconURL" + ) + + override fun accept(property: KProperty<*>) = + property.name in acceptedProperties +} \ No newline at end of file diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/data/MainActivityDataHandler.kt b/app/src/main/java/com/javinator9889/handwashingreminder/data/MainActivityDataHandler.kt new file mode 100644 index 0000000..05bddf0 --- /dev/null +++ b/app/src/main/java/com/javinator9889/handwashingreminder/data/MainActivityDataHandler.kt @@ -0,0 +1,228 @@ +/* + * Copyright © 2020 - present | Handwashing reminder by Javinator9889 + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see https://www.gnu.org/licenses/. + * + * Created by Javinator9889 on 9/06/20 - Handwashing reminder. + */ +package com.javinator9889.handwashingreminder.data + +import android.app.Activity +import android.content.Context +import android.os.Bundle +import android.util.SparseArray +import android.view.MenuItem +import android.view.View +import androidx.annotation.IdRes +import androidx.core.content.edit +import androidx.core.util.forEach +import androidx.core.util.set +import androidx.core.view.forEach +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentManager +import androidx.fragment.app.commit +import androidx.lifecycle.LifecycleOwner +import androidx.lifecycle.lifecycleScope +import androidx.preference.PreferenceManager +import com.google.android.material.bottomnavigation.BottomNavigationView +import com.javinator9889.handwashingreminder.R +import com.javinator9889.handwashingreminder.activities.base.LayoutVisibilityChange +import com.javinator9889.handwashingreminder.activities.views.fragments.diseases.DiseasesFragment +import com.javinator9889.handwashingreminder.activities.views.fragments.news.NewsFragment +import com.javinator9889.handwashingreminder.activities.views.fragments.settings.SettingsView +import com.javinator9889.handwashingreminder.activities.views.fragments.washinghands.WashingHandsFragment +import com.javinator9889.handwashingreminder.custom.libraries.AppRate +import com.javinator9889.handwashingreminder.utils.Preferences +import com.javinator9889.handwashingreminder.utils.isDebuggable +import com.mikepenz.iconics.IconicsDrawable +import com.mikepenz.iconics.typeface.library.googlematerial.GoogleMaterial +import com.mikepenz.iconics.typeface.library.ionicons.Ionicons +import kotlinx.coroutines.Deferred +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.async +import kotlinx.coroutines.withContext +import timber.log.Timber +import uk.co.deanwild.materialshowcaseview.MaterialShowcaseSequence +import uk.co.deanwild.materialshowcaseview.ShowcaseConfig +import java.lang.ref.WeakReference + +internal const val ARG_CURRENT_ITEM = "bundle:args:current_item" +internal val IDS = + arrayOf(R.id.diseases, R.id.handwashing, R.id.news, R.id.settings) + + +class MainActivityDataHandler(@IdRes var activeFragmentId: Int = R.id.diseases) { + private val fragments = + SparseArray>(4) + val activeFragment: Fragment + get() = this[activeFragmentId] + + operator fun get(@IdRes id: Int): Fragment = + fragments[id, null]?.get() ?: createFragmentForId(id) + + fun onSaveInstanceState( + outState: Bundle, + fragmentManager: FragmentManager + ) { + fragments.forEach { id, reference -> + reference.get()?.let { + fragmentManager.putFragment(outState, id.toString(), it) + } + } + outState.putInt(ARG_CURRENT_ITEM, activeFragmentId) + } + + fun onRestoreInstanceState( + savedInstanceState: Bundle, + fragmentManager: FragmentManager + ) { + for (id in IDS) { + val restoredFragment = + fragmentManager.getFragment(savedInstanceState, id.toString()) + ?: createFragmentForId(id) + fragments[id] = WeakReference(restoredFragment) + } + activeFragmentId = savedInstanceState.getInt(ARG_CURRENT_ITEM) + } + + suspend fun setMenuIcons( + view: BottomNavigationView, + context: Context + ) { + view.menu.forEach { item: MenuItem -> + when (item.itemId) { + R.id.diseases -> IconicsDrawable( + context, + Ionicons.Icon.ion_ios_medkit + ) + R.id.news -> IconicsDrawable( + context, + GoogleMaterial.Icon.gmd_chrome_reader_mode + ) + R.id.settings -> IconicsDrawable( + context, + Ionicons.Icon.ion_android_settings + ) + else -> null + }?.run { + withContext(Dispatchers.Main) { + item.icon = this@run + } + } + } + } + + fun loadFragmentView(fragmentManager: FragmentManager) { + fragmentManager.commit { + IDS.forEach { id -> + get(id).also { add(R.id.mainContent, it); hide(it) } + } + show(activeFragment) + onShow(activeFragmentId) + } + } + + fun clear() = fragments.clear() + + fun onShow(@IdRes id: Int) = + (this[id] as LayoutVisibilityChange).onVisibilityChanged(View.VISIBLE) + + fun onHide(@IdRes id: Int) = + (this[id] as LayoutVisibilityChange).onVisibilityChanged(View.INVISIBLE) + + fun loadShowcaseAsync( + activity: Activity, + lifecycleOwner: LifecycleOwner + ): Deferred = + lifecycleOwner.lifecycleScope.async { + val preferences = + with(PreferenceManager.getDefaultSharedPreferences(activity)) { + if (getBoolean(Preferences.INITIAL_TUTORIAL_DONE, false)) + return@async null + else this + } + + val config = ShowcaseConfig() + config.delay = 500L + with(MaterialShowcaseSequence(activity)) { + setConfig(config) + val dismissText = activity.getString(R.string.got_it) + val diseasesText = activity.getString(R.string.diseases_intro) + val handwashingText = + activity.getString(R.string.handwashing_intro) + val newsText = activity.getString(R.string.news_intro) + val settingsText = activity.getString(R.string.settings_intro) + addSequenceItem( + activity.findViewById(R.id.diseases), + diseasesText, + dismissText + ) + addSequenceItem( + activity.findViewById(R.id.handwashing), + handwashingText, + dismissText + ) + addSequenceItem( + activity.findViewById(R.id.news), + newsText, + dismissText + ) + addSequenceItem( + activity.findViewById(R.id.settings), + settingsText, + dismissText + ) + var itemCount = 0 + setOnItemDismissedListener { _, _ -> + if (itemCount++ == 3) + preferences.edit { + putBoolean(Preferences.INITIAL_TUTORIAL_DONE, true) + } + } + this + } + } + + fun suggestRatingAsync( + activity: Activity, + lifecycleOwner: LifecycleOwner + ): Deferred = lifecycleOwner.lifecycleScope.async { + with(AppRate(activity)) { + if (!isDebuggable()) { + setMinDaysUntilPrompt(2L) + setMinLaunchesUntilPrompt(5) + } + dialogTitle = R.string.rate_text_title + dialogMessage = R.string.rate_app_message + positiveButtonText = R.string.rate_text + negativeButtonText = R.string.rate_do_not_show + this + } + } + + private fun createFragmentForId(@IdRes id: Int): Fragment { + if (id !in IDS) + throw IllegalArgumentException("id not in IDs") + Timber.d("Creating fragment for ID $id") + val fragment = when (id) { + R.id.diseases -> DiseasesFragment() + R.id.handwashing -> WashingHandsFragment() + R.id.news -> NewsFragment() + R.id.settings -> SettingsView() + else -> Fragment() // this should never happen + } + fragments[id] = WeakReference(fragment) + return fragment + } +} \ No newline at end of file diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/data/ParsedHTMLText.kt b/app/src/main/java/com/javinator9889/handwashingreminder/data/ParsedHTMLText.kt new file mode 100644 index 0000000..045072b --- /dev/null +++ b/app/src/main/java/com/javinator9889/handwashingreminder/data/ParsedHTMLText.kt @@ -0,0 +1,61 @@ +/* + * Copyright © 2020 - present | Handwashing reminder by Javinator9889 + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see https://www.gnu.org/licenses/. + * + * Created by Javinator9889 on 11/06/20 - Handwashing reminder. + */ +package com.javinator9889.handwashingreminder.data + +import android.os.Parcel +import android.os.Parcelable +import android.text.TextUtils + +data class ParsedHTMLText( + val name: CharSequence, + val shortDescription: CharSequence, + val longDescription: CharSequence, + val provider: CharSequence, + val website: CharSequence, + val symptoms: CharSequence, + val prevention: CharSequence +) : Parcelable { + constructor(parcel: Parcel) : this( + TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(parcel), + TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(parcel), + TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(parcel), + TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(parcel), + TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(parcel), + TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(parcel), + TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(parcel) + ) + + override fun writeToParcel(parcel: Parcel, flags: Int) { + TextUtils.writeToParcel(name, parcel, flags) + TextUtils.writeToParcel(shortDescription, parcel, flags) + TextUtils.writeToParcel(longDescription, parcel, flags) + TextUtils.writeToParcel(provider, parcel, flags) + TextUtils.writeToParcel(website, parcel, flags) + TextUtils.writeToParcel(symptoms, parcel, flags) + TextUtils.writeToParcel(prevention, parcel, flags) + } + + override fun describeContents() = 0 + + companion object CREATOR : Parcelable.Creator { + override fun createFromParcel(parcel: Parcel) = ParsedHTMLText(parcel) + + override fun newArray(size: Int) = arrayOfNulls(size) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/data/SettingsLoader.kt b/app/src/main/java/com/javinator9889/handwashingreminder/data/SettingsLoader.kt new file mode 100644 index 0000000..8892291 --- /dev/null +++ b/app/src/main/java/com/javinator9889/handwashingreminder/data/SettingsLoader.kt @@ -0,0 +1,597 @@ +/* + * Copyright © 2020 - present | Handwashing reminder by Javinator9889 + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see https://www.gnu.org/licenses/. + * + * Created by Javinator9889 on 11/06/20 - Handwashing reminder. + */ +package com.javinator9889.handwashingreminder.data + +import android.content.ClipData +import android.content.ClipDescription +import android.content.Intent +import android.net.Uri +import android.os.Bundle +import android.provider.Settings +import androidx.annotation.StringRes +import androidx.emoji.text.EmojiCompat +import androidx.lifecycle.LifecycleOwner +import androidx.lifecycle.lifecycleScope +import androidx.preference.EditTextPreference +import androidx.preference.ListPreference +import androidx.preference.Preference +import androidx.preference.SwitchPreference +import com.afollestad.materialdialogs.MaterialDialog +import com.android.billingclient.api.BillingClient +import com.google.firebase.analytics.FirebaseAnalytics +import com.google.firebase.perf.FirebasePerformance +import com.javinator9889.handwashingreminder.R +import com.javinator9889.handwashingreminder.activities.PrivacyTermsActivity +import com.javinator9889.handwashingreminder.activities.views.fragments.settings.SettingsView +import com.javinator9889.handwashingreminder.activities.views.fragments.settings.TimePickerPreference +import com.javinator9889.handwashingreminder.application.HandwashingApplication +import com.javinator9889.handwashingreminder.emoji.EmojiLoader +import com.javinator9889.handwashingreminder.gms.ads.AdsEnabler +import com.javinator9889.handwashingreminder.gms.splitservice.SplitInstallService +import com.javinator9889.handwashingreminder.jobs.alarms.Alarms +import com.javinator9889.handwashingreminder.listeners.OnPurchaseFinishedListener +import com.javinator9889.handwashingreminder.utils.* +import com.mikepenz.aboutlibraries.LibsBuilder +import com.mikepenz.iconics.IconicsDrawable +import com.mikepenz.iconics.typeface.IIcon +import com.mikepenz.iconics.typeface.library.ionicons.Ionicons +import com.mikepenz.iconics.utils.sizeDp +import kotlinx.coroutines.* +import timber.log.Timber +import java.lang.ref.WeakReference +import java.util.concurrent.atomic.AtomicBoolean + +class SettingsLoader( + private val view: SettingsView, + private val lifecycleOwner: LifecycleOwner +) : OnPurchaseFinishedListener, Preference.OnPreferenceChangeListener { + private lateinit var emojiLoader: Deferred + private lateinit var emojiCompat: EmojiCompat + private var arePreferencesInitialized = AtomicBoolean(false) + + fun loadViews() { + if (arePreferencesInitialized.get()) + return + val deferreds = mutableSetOf>() + emojiLoader = EmojiLoader.loadAsync(view.requireContext()) + with(view) { + lifecycleOwner.lifecycleScope.launch { + setupPreferenceAsync( + "playstore", + Ionicons.Icon.ion_android_playstore, + onClickListener = { + openWebsite(PLAYSTORE_URL, R.string.playstore_err) + true + }).also { deferreds.add(it) } + setupPreferenceAsync( + "share", + Ionicons.Icon.ion_android_share, + onClickListener = { + with(FirebaseAnalytics.getInstance(requireContext())) { + logEvent(FirebaseAnalytics.Event.SHARE, null) + } + with(Intent.createChooser(Intent().apply { + action = Intent.ACTION_SEND + putExtra( + Intent.EXTRA_TEXT, + getText(R.string.share_text) + ) + putExtra( + Intent.EXTRA_TITLE, + getText(R.string.share_title) + ) + ClipData.Item( + getUriFromRes( + requireContext(), + R.drawable.handwashing_app_logo + ) + ) + clipData = ClipData( + ClipDescription( + getString(R.string.share_label), + arrayOf("image/*") + ), + ClipData.Item( + getUriFromRes( + requireContext(), + R.drawable.handwashing_app_logo + ) + ) + ) + flags = Intent.FLAG_GRANT_READ_URI_PERMISSION + type = "text/plain" + }, null)) { + startActivity(this) + } + true + }).also { deferreds.add(it) } + setupPreferenceAsync("telegram", onClickListener = { + openWebsite(TELEGRAM_URL, R.string.telegram_err) + true + }).also { deferreds.add(it) } + setupPreferenceAsync( + "github", + Ionicons.Icon.ion_social_github, + onClickListener = { + openWebsite(GITHUB_URL, R.string.browser_err) + true + }).also { deferreds.add(it) } + setupPreferenceAsync( + "twitter", + Ionicons.Icon.ion_social_twitter, + onClickListener = { + openWebsite(TWITTER_URL, R.string.twitter_err) + true + }).also { deferreds.add(it) } + setupPreferenceAsync( + "linkedin", + Ionicons.Icon.ion_social_linkedin, + onClickListener = { + openWebsite(LINKEDIN_URL, R.string.browser_err) + true + }).also { deferreds.add(it) } + setupPreferenceAsync( + Preferences.ANALYTICS_ENABLED, + Ionicons.Icon.ion_arrow_graph_up_right, + onChangeListener = this@with, + onInitialized = { it, _ -> + firebaseAnalyticsPreference = WeakReference(it) + } + ).also { deferreds.add(it) } + setupPreferenceAsync( + Preferences.PERFORMANCE_ENABLED, + Ionicons.Icon.ion_ios_speedometer_outline, + onChangeListener = this@with, + onInitialized = { it, _ -> + firebasePerformancePreference = WeakReference(it) + } + ).also { deferreds.add(it) } + setupPreferenceAsync( + Preferences.ADS_ENABLED, + Ionicons.Icon.ion_ios_barcode_outline, + onChangeListener = this@with, + onInitialized = { it, _ -> + adsPreference = WeakReference(it) + } + ).also { deferreds.add(it) } + setupPreferenceAsync( + Preferences.DONATIONS, + Ionicons.Icon.ion_card, + onChangeListener = this@with, + onInitialized = { it, _ -> + it as ListPreference + it.entryValues = if (isDebuggable()) + requireContext().resources.getTextArray(R.array.in_app_donations_debug) + else + requireContext().resources.getTextArray(R.array.in_app_donations) + billingService.addOnPurchaseFinishedListener(this@SettingsLoader) + donationsPreference = WeakReference(it) + } + ).also { deferreds.add(it) } + setupPreferenceAsync( + "translate", + Ionicons.Icon.ion_chatbox_working, + onClickListener = { + openWebsite( + TRANSLATE_URL, + R.string.browser_err + ) + true + } + ).also { deferreds.add(it) } + setupPreferenceAsync( + "send_suggestions", + Ionicons.Icon.ion_chatbubbles, + onClickListener = { + with(Intent(Intent.ACTION_SENDTO)) { + type = "text/plain" + data = Uri.parse("mailto:") + putExtra(Intent.EXTRA_EMAIL, arrayOf(Email.TO)) + putExtra(Intent.EXTRA_SUBJECT, Email.SUBJECT) + putExtra(Intent.EXTRA_TEXT, getDeviceInfo()) + putExtra( + Intent.EXTRA_HTML_TEXT, + getDeviceInfoHTML() + ) + if (resolveActivity(requireContext().packageManager) != null) + startActivity(this) + else MaterialDialog(requireContext()).show { + title(R.string.no_app) + message( + text = getString( + R.string.no_app_long, + getString(R.string.sending_email) + ) + ) + positiveButton(android.R.string.ok) + cancelable(true) + cancelOnTouchOutside(true) + } + } + true + } + ).also { deferreds.add(it) } + setupPreferenceAsync( + "opensource_libs", + Ionicons.Icon.ion_code, + onClickListener = { + val bundle = Bundle(1).apply { + putString("view", "libs") + } + with(FirebaseAnalytics.getInstance(requireContext())) { + logEvent(FirebaseAnalytics.Event.VIEW_ITEM, bundle) + } + LibsBuilder() + .withAutoDetect(true) + .withFields(R.string::class.java.fields) + .withCheckCachedDetection(true) + .withSortEnabled(true) + .withAboutVersionShown(true) + .withAboutVersionShownCode(true) + .withAboutVersionShownName(true) + .withShowLoadingProgress(true) + .withActivityTitle(getString(R.string.app_name)) + .start(requireContext()) + true + } + ).also { deferreds.add(it) } + setupPreferenceAsync( + "tos_privacy", + Ionicons.Icon.ion_android_cloud_done, + onClickListener = { + Intent( + requireContext(), + PrivacyTermsActivity::class.java + ).run { startActivity(this) } + true + } + ).also { deferreds.add(it) } + setupPreferenceAsync( + Preferences.BREAKFAST_TIME, + Ionicons.Icon.ion_coffee, + onInitialized = ::setupTimePickerDialog, + onInitializedArgs = setOf( + "title" to getText(R.string.breakfast_pref_title), + "summary" to getText(R.string.breakfast_pref_summ), + "alarm" to Alarms.BREAKFAST_ALARM + ), + dispatcher = Dispatchers.Main + ).also { deferreds.add(it) } + setupPreferenceAsync( + Preferences.LUNCH_TIME, + Ionicons.Icon.ion_android_restaurant, + onInitialized = ::setupTimePickerDialog, + onInitializedArgs = setOf( + "title" to getText(R.string.lunch_pref_title), + "summary" to getText(R.string.lunch_pref_summ), + "alarm" to Alarms.LUNCH_ALARM + ), + dispatcher = Dispatchers.Main + ).also { deferreds.add(it) } + setupPreferenceAsync( + Preferences.DINNER_TIME, + Ionicons.Icon.ion_ios_moon_outline, + onInitialized = ::setupTimePickerDialog, + onInitializedArgs = setOf( + "title" to getText(R.string.dinner_pref_title), + "summary" to getText(R.string.dinner_pref_summ), + "alarm" to Alarms.DINNER_ALARM + ), + dispatcher = Dispatchers.Main + ).also { deferreds.add(it) } + setupPreferenceAsync( + Preferences.ACTIVITY_MINIMUM_TIME, + Ionicons.Icon.ion_ios_stopwatch_outline, + onInitialized = { it, _ -> + runCatching { + it as EditTextPreference + val timeText = Integer.parseInt(it.text) + val minutes = resources.getQuantityString( + R.plurals.minutes, + timeText, + timeText + ) + it.summary = + getString(R.string.minimum_time_summ, minutes) + } + }, + onChangeListener = this@with + ).also { deferreds.add(it) } + setupPreferenceAsync( + Preferences.PERFORMANCE_ANIMATIONS, + Ionicons.Icon.ion_battery_low + ).also { deferreds.add(it) } + setupPreferenceAsync( + "notifications:settings", + onClickListener = { + val intent = when { + isAtLeast(AndroidVersion.O) -> Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS).apply { + putExtra(Settings.EXTRA_APP_PACKAGE, requireContext().packageName) + } + isAtLeast(AndroidVersion.LOLLIPOP) -> Intent("android.settings.APP_NOTIFICATION_SETTINGS").apply { + putExtra("app_package", requireContext().packageName) + putExtra("app_uid", requireContext().applicationInfo.uid) + } + else -> Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).apply { + addCategory(Intent.CATEGORY_DEFAULT) + data = Uri.parse("package: ${requireContext().packageName}") + } + } + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + requireContext().startActivity(intent) + true + } + ).also { deferreds.add(it) } + deferreds.awaitAll() + arePreferencesInitialized.set(true) + } + } + } + + override fun onPurchaseFinished(token: String, resultCode: Int) { + if (view.context == null) + return + val context = view.requireContext() + if (!::emojiCompat.isInitialized) + runBlocking { emojiCompat = emojiLoader.await() } + when (resultCode) { + BillingClient.BillingResponseCode.OK -> { + try { + MaterialDialog(context) + .title(R.string.donation_thanks) + .message( + text = emojiCompat + .process(context.getText(R.string.donation_desc)) + ) + .positiveButton(android.R.string.ok) + } catch (_: IllegalStateException) { + MaterialDialog(context) + .title(R.string.donation_thanks) + .message(R.string.donation_desc) + .positiveButton(android.R.string.ok) + } + } + BillingClient.BillingResponseCode.USER_CANCELED -> { + try { + MaterialDialog(context) + .title(R.string.donation_cancelled) + .message( + text = emojiCompat.process( + context.getText(R.string.donation_cancelled_desc) + ) + ) + .positiveButton(android.R.string.ok) + } catch (_: IllegalStateException) { + MaterialDialog(context) + .title(R.string.donation_cancelled) + .message(R.string.donation_cancelled_desc) + .positiveButton(android.R.string.ok) + } + } + else -> { + try { + MaterialDialog(context) + .title(R.string.donation_error) + .message( + text = emojiCompat.process( + context.getText(R.string.donation_error_desc) + ) + ) + .positiveButton(android.R.string.ok) + } catch (_: IllegalStateException) { + MaterialDialog(context) + .title(R.string.donation_error) + .message(R.string.donation_error_desc) + .positiveButton(android.R.string.ok) + } + } + }.show() + } + + private fun setupPreferenceAsync( + name: String, + icon: IIcon? = null, + onClickListener: ((Preference) -> Boolean)? = null, + onChangeListener: Preference.OnPreferenceChangeListener? = null, + onInitialized: (suspend (Preference, Collection>?) -> Unit)? = null, + dispatcher: CoroutineDispatcher = Dispatchers.Default, + onInitializedArgs: Collection>? = null + ): Deferred = lifecycleOwner.lifecycleScope.async { + view.findPreference(name)?.let { + icon.notNull { icon -> + it.icon = setupIcon(icon) + } + onClickListener.notNull { listener -> + it.setOnPreferenceClickListener(listener) + } + onChangeListener.notNull { listener -> + it.onPreferenceChangeListener = listener + } + if (onInitialized != null) + withContext(dispatcher) { + onInitialized(it, onInitializedArgs) + } + } + } + + private suspend fun setupTimePickerDialog( + preference: Preference, + args: Collection>? + ) { + if (args == null) + return + var title: CharSequence? = null + var summary: CharSequence? = null + var alarm: Alarms? = null + for (arg in args) + when (arg.first) { + "title" -> title = arg.second as CharSequence + "summary" -> summary = arg.second as CharSequence + "alarm" -> alarm = arg.second as Alarms + } + if (title == null || summary == null || alarm == null) + return + if (!::emojiCompat.isInitialized) + emojiCompat = emojiLoader.await() + preference as TimePickerPreference + try { + preference.title = emojiCompat.process(title) + preference.summaryText = emojiCompat.process(summary) + } catch (_: IllegalStateException) { + preference.title = title + preference.summaryText = summary + } finally { + preference.alarm = alarm + preference.updateSummary() + } + } + + private fun setupIcon(icon: IIcon): IconicsDrawable = + IconicsDrawable(view.requireContext(), icon).apply { sizeDp = 20 } + + private fun openWebsite(url: String, @StringRes onErrString: Int) = + openWebsite(url, view.getString(onErrString)) + + private fun openWebsite(url: String, onErrString: String) { + if (view.context == null) + return + val website = Uri.parse(url) + val bundle = Bundle(1).apply { putString("url", url) } + with(FirebaseAnalytics.getInstance(view.requireContext())) { + logEvent(FirebaseAnalytics.Event.VIEW_ITEM, bundle) + } + with(Intent(Intent.ACTION_VIEW, website)) { + if (resolveActivity(view.requireContext().packageManager) != null) + view.startActivity(this) + else + MaterialDialog(view.requireContext()).show { + title(R.string.no_app) + message( + text = view.context.getString( + R.string.no_app_long, + onErrString + ) + ) + positiveButton(android.R.string.ok) + cancelable(true) + cancelOnTouchOutside(true) + } + } + } + + override fun onPreferenceChange( + preference: Preference?, + newValue: Any? + ): Boolean = + when (preference?.key) { + Preferences.ANALYTICS_ENABLED -> { + val enabled = newValue as Boolean + Timber.d("Analytics collection is $enabled") + with(FirebaseAnalytics.getInstance(view.requireContext())) { + setAnalyticsCollectionEnabled(enabled) + if (!enabled) + setCurrentScreen(view.requireActivity(), null, null) + } + true + } + Preferences.PERFORMANCE_ENABLED -> { + val enabled = newValue as Boolean + Timber.d("Performance is $enabled") + with(FirebasePerformance.getInstance()) { + isPerformanceCollectionEnabled = enabled + } + true + } + Preferences.ADS_ENABLED -> { + val enabled = newValue as Boolean + Timber.d("Ads are enabled $enabled") + var ret = false + val adEnabler = AdsEnabler(HandwashingApplication.instance) + if (enabled) { + adEnabler.enableAds() + with(SplitInstallService.getInstance(view.requireContext())) { + deferredInstall(Ads.MODULE_NAME) + } + ret = true + } else { + MaterialDialog(view.requireContext()).show { + title(R.string.ads_explanation_title) + try { + message( + text = emojiCompat.process( + context.getText(R.string.ads_explanation_desc) + ) + ) + } catch (_: IllegalStateException) { + message(R.string.ads_explanation_desc) + } + positiveButton(android.R.string.cancel) { + ret = false + } + negativeButton(R.string.disable) { + ret = true + adEnabler.disableAds() + HandwashingApplication.instance.adLoader = null + with(SplitInstallService.getInstance(view.context)) { + deferredUninstall(Ads.MODULE_NAME) + } + (preference as SwitchPreference).isChecked = + false + } + cancelOnTouchOutside(false) + cancelable(false) + } + } + ret + } + Preferences.DONATIONS -> { + Timber.d("Purchase clicked - $newValue") + val purchaseId = newValue as String + if (isConnected()) + view.billingService.doPurchase( + purchaseId, + view.requireActivity() + ) + else { + MaterialDialog(view.requireContext()).show { + title(R.string.no_internet_connection) + message(R.string.no_internet_connection_long) + positiveButton(android.R.string.ok) + cancelable(true) + cancelOnTouchOutside(true) + } + } + false + } + Preferences.ACTIVITY_MINIMUM_TIME -> runCatching { + preference as EditTextPreference + Timber.d("Changing activity interval - $newValue") + val timeText = Integer.parseInt(newValue as String) + val minutes = view.resources.getQuantityString( + R.plurals.minutes, + timeText, + timeText + ) + preference.summary = + view.getString(R.string.minimum_time_summ, minutes) + true + }.getOrElse { Timber.w(it); false } + else -> true + } +} diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/data/UserProperties.kt b/app/src/main/java/com/javinator9889/handwashingreminder/data/UserProperties.kt new file mode 100644 index 0000000..ae08fd8 --- /dev/null +++ b/app/src/main/java/com/javinator9889/handwashingreminder/data/UserProperties.kt @@ -0,0 +1,40 @@ +/* + * Copyright © 2020 - present | Handwashing reminder by Javinator9889 + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see https://www.gnu.org/licenses/. + * + * Created by Javinator9889 on 9/06/20 - Handwashing reminder. + */ +package com.javinator9889.handwashingreminder.data + +import javinator9889.localemanager.utils.languagesupport.LanguagesSupport.Language +import java.util.* + + +object UserProperties { + @Language + private lateinit var privateLanguage: String + + @Language + val language: String + get() { + if (::privateLanguage.isInitialized) + return privateLanguage + privateLanguage = when (Locale.getDefault().language) { + Locale(Language.SPANISH).language -> Language.SPANISH + else -> Language.ENGLISH + } + return privateLanguage + } +} \ No newline at end of file diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/data/repositories/HandwashingRepository.kt b/app/src/main/java/com/javinator9889/handwashingreminder/data/repositories/HandwashingRepository.kt new file mode 100644 index 0000000..13d0d6b --- /dev/null +++ b/app/src/main/java/com/javinator9889/handwashingreminder/data/repositories/HandwashingRepository.kt @@ -0,0 +1,37 @@ +/* + * Copyright © 2020 - present | Handwashing reminder by Javinator9889 + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see https://www.gnu.org/licenses/. + * + * Created by Javinator9889 on 24/06/20 - Handwashing reminder. + */ +package com.javinator9889.handwashingreminder.data.repositories + +import androidx.lifecycle.LiveData +import com.javinator9889.handwashingreminder.data.room.dao.HandwashingDao +import com.javinator9889.handwashingreminder.data.room.entities.Handwashing +import java.util.* + +class HandwashingRepository(private val dao: HandwashingDao) { + val allData: LiveData> = dao.getAll() + + suspend fun create(handwashing: Handwashing) = dao.create(handwashing) + suspend fun increment(date: Date) = dao.increment(date) + suspend fun decrement(date: Date) = dao.decrement(date) + suspend fun update(handwashing: Handwashing) = dao.update(handwashing) + suspend fun get(date: Date) = dao.get(date) + suspend fun getBetween(from: Date, to: Date) = dao.getBetween(from, to) + suspend fun delete(date: Date) = dao.delete(date) + suspend fun delete(handwashing: Handwashing) = dao.delete(handwashing) +} \ No newline at end of file diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/data/room/dao/HandwashingDao.kt b/app/src/main/java/com/javinator9889/handwashingreminder/data/room/dao/HandwashingDao.kt new file mode 100644 index 0000000..b2bda5a --- /dev/null +++ b/app/src/main/java/com/javinator9889/handwashingreminder/data/room/dao/HandwashingDao.kt @@ -0,0 +1,54 @@ +/* + * Copyright © 2020 - present | Handwashing reminder by Javinator9889 + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see https://www.gnu.org/licenses/. + * + * Created by Javinator9889 on 24/06/20 - Handwashing reminder. + */ +package com.javinator9889.handwashingreminder.data.room.dao + +import androidx.lifecycle.LiveData +import androidx.room.* +import com.javinator9889.handwashingreminder.data.room.entities.Handwashing +import java.util.* + +@Dao +interface HandwashingDao { + @Query("SELECT * FROM handwashing ORDER BY date ASC") + fun getAll(): LiveData> + + @Query("SELECT * FROM handwashing WHERE date BETWEEN :from AND :to") + suspend fun getBetween(from: Date, to: Date): List + + @Query("SELECT * FROM handwashing WHERE date == :date") + suspend fun get(date: Date): Handwashing? + + @Insert(onConflict = OnConflictStrategy.IGNORE) + suspend fun create(handwashing: Handwashing) + + @Update + suspend fun update(handwashing: Handwashing) + + @Query("UPDATE handwashing SET amount = amount + 1 WHERE date == :date") + suspend fun increment(date: Date) + + @Query("UPDATE handwashing SET amount = CASE WHEN (amount == 0) THEN 0 ELSE amount - 1 END WHERE date == :date") + suspend fun decrement(date: Date) + + @Query("DELETE FROM handwashing WHERE date == :date") + suspend fun delete(date: Date) + + @Delete + suspend fun delete(handwashing: Handwashing) +} \ No newline at end of file diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/data/room/db/HandwashingDatabase.kt b/app/src/main/java/com/javinator9889/handwashingreminder/data/room/db/HandwashingDatabase.kt new file mode 100644 index 0000000..f015888 --- /dev/null +++ b/app/src/main/java/com/javinator9889/handwashingreminder/data/room/db/HandwashingDatabase.kt @@ -0,0 +1,52 @@ +/* + * Copyright © 2020 - present | Handwashing reminder by Javinator9889 + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see https://www.gnu.org/licenses/. + * + * Created by Javinator9889 on 24/06/20 - Handwashing reminder. + */ +package com.javinator9889.handwashingreminder.data.room.db + +import android.content.Context +import androidx.room.Database +import androidx.room.Room +import androidx.room.RoomDatabase +import androidx.room.TypeConverters +import com.javinator9889.handwashingreminder.data.room.dao.HandwashingDao +import com.javinator9889.handwashingreminder.data.room.entities.Handwashing +import com.javinator9889.handwashingreminder.utils.room.Converters + +@Database(entities = [Handwashing::class], version = 1, exportSchema = false) +@TypeConverters(Converters::class) +abstract class HandwashingDatabase : RoomDatabase() { + abstract fun handwashingDao(): HandwashingDao + + companion object { + @Volatile + private var instance: HandwashingDatabase? = null + + fun getDatabase(context: Context): HandwashingDatabase { + instance?.let { return it } + synchronized(this) { + val instance = Room.databaseBuilder( + context.applicationContext, + HandwashingDatabase::class.java, + "handwashing_db" + ).build() + this.instance = instance + return instance + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/data/room/entities/Handwashing.kt b/app/src/main/java/com/javinator9889/handwashingreminder/data/room/entities/Handwashing.kt new file mode 100644 index 0000000..7c3414c --- /dev/null +++ b/app/src/main/java/com/javinator9889/handwashingreminder/data/room/entities/Handwashing.kt @@ -0,0 +1,30 @@ +/* + * Copyright © 2020 - present | Handwashing reminder by Javinator9889 + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see https://www.gnu.org/licenses/. + * + * Created by Javinator9889 on 24/06/20 - Handwashing reminder. + */ +package com.javinator9889.handwashingreminder.data.room.entities + +import androidx.room.ColumnInfo +import androidx.room.Entity +import androidx.room.PrimaryKey +import java.util.* + +@Entity(tableName = "handwashing") +data class Handwashing( + @PrimaryKey @ColumnInfo(name = "date", index = true) val date: Date, + @ColumnInfo(name = "amount") val amount: Int +) \ No newline at end of file diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/data/viewmodels/HandwashingViewModel.kt b/app/src/main/java/com/javinator9889/handwashingreminder/data/viewmodels/HandwashingViewModel.kt new file mode 100644 index 0000000..97d6cf3 --- /dev/null +++ b/app/src/main/java/com/javinator9889/handwashingreminder/data/viewmodels/HandwashingViewModel.kt @@ -0,0 +1,99 @@ +/* + * Copyright © 2020 - present | Handwashing reminder by Javinator9889 + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see https://www.gnu.org/licenses/. + * + * Created by Javinator9889 on 24/06/20 - Handwashing reminder. + */ +package com.javinator9889.handwashingreminder.data.viewmodels + +import android.app.Application +import androidx.lifecycle.AndroidViewModel +import androidx.lifecycle.LiveData +import androidx.lifecycle.viewModelScope +import com.javinator9889.handwashingreminder.data.repositories.HandwashingRepository +import com.javinator9889.handwashingreminder.data.room.db.HandwashingDatabase +import com.javinator9889.handwashingreminder.data.room.entities.Handwashing +import com.javinator9889.handwashingreminder.utils.calendar.CalendarUtils +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.async +import kotlinx.coroutines.launch +import java.util.* + +class HandwashingViewModel(application: Application) : + AndroidViewModel(application) { + private val repository: HandwashingRepository + val allData: LiveData> + + init { + val handwashingDao = + HandwashingDatabase.getDatabase(application).handwashingDao() + repository = HandwashingRepository(handwashingDao) + allData = repository.allData + } + + fun create(handwashing: Handwashing) = + viewModelScope.launch(Dispatchers.IO) { repository.create(handwashing) } + + fun increment(date: Date) = + viewModelScope.launch(Dispatchers.IO) { repository.increment(date) } + + fun decrement(date: Date) = + viewModelScope.launch(Dispatchers.IO) { repository.decrement(date) } + + fun update(handwashing: Handwashing) = + viewModelScope.launch(Dispatchers.IO) { repository.update(handwashing) } + + fun getAsync(date: Date = CalendarUtils.today.time) = + viewModelScope.async(Dispatchers.IO) { repository.get(date) } + + fun getBetweenAsync(from: Date, to: Date) = + viewModelScope.async(Dispatchers.IO) { repository.getBetween(from, to) } + + fun getWeeklyAsync() = getBetweenAsync( + from = CalendarUtils.lastWeek.time, + to = CalendarUtils.today.time + ) + + fun getMonthlyAsync() = getBetweenAsync( + from = CalendarUtils.lastMonth.time, + to = CalendarUtils.today.time + ) + + fun getTodayCountAsync() = viewModelScope.async { + return@async getAsync().await()?.amount + } + + fun getWeeklyCountAsync() = viewModelScope.async { + val weeklyData = getWeeklyAsync().await() + var amount = 0 + for (data in weeklyData) + amount += data.amount + amount + } + + fun getMonthlyCountAsync() = viewModelScope.async { + val monthlyData = getMonthlyAsync().await() + var amount = 0 + for (data in monthlyData) + amount += data.amount + amount + } + + fun delete(date: Date) = + viewModelScope.launch(Dispatchers.IO) { repository.delete(date) } + + fun delete(handwashing: Handwashing) = + viewModelScope.launch(Dispatchers.IO) { repository.delete(handwashing) } +} \ No newline at end of file diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/emoji/EmojiLoader.kt b/app/src/main/java/com/javinator9889/handwashingreminder/emoji/EmojiLoader.kt index 1f6019a..2c2c97c 100644 --- a/app/src/main/java/com/javinator9889/handwashingreminder/emoji/EmojiLoader.kt +++ b/app/src/main/java/com/javinator9889/handwashingreminder/emoji/EmojiLoader.kt @@ -20,37 +20,38 @@ package com.javinator9889.handwashingreminder.emoji import android.content.Context import androidx.emoji.text.EmojiCompat +import com.javinator9889.handwashingreminder.application.HandwashingApplication import kotlinx.coroutines.CompletableDeferred +import kotlinx.coroutines.async import timber.log.Timber object EmojiLoader { - fun get(context: Context): CompletableDeferred { - val deferred = CompletableDeferred() + fun loadAsync(context: Context) = HandwashingApplication.scope.async { try { - with(EmojiCompat.get()) { - deferred.complete(this) - } + EmojiCompat.get() } catch (_: IllegalStateException) { Timber.d("EmojiCompat not initialized yet") val emojiCompat = with(EmojiConfig.get(context)) { EmojiCompat.init(this) } - emojiCompat.registerInitCallback( - object : EmojiCompat.InitCallback() { - override fun onInitialized() { - emojiCompat.unregisterInitCallback(this) - deferred.complete(EmojiCompat.get()) - } + val loadDeferred = CompletableDeferred() + emojiCompat.registerInitCallback(object : + EmojiCompat.InitCallback() { + override fun onInitialized() { + super.onInitialized() + emojiCompat.unregisterInitCallback(this) + loadDeferred.complete(EmojiCompat.get()) + } - override fun onFailed(throwable: Throwable?) { - emojiCompat.unregisterInitCallback(this) - val exception = throwable - ?: RuntimeException("EmojiCompat failed to load") - deferred.completeExceptionally(exception) - } - }) - } finally { - return deferred + override fun onFailed(throwable: Throwable?) { + super.onFailed(throwable) + emojiCompat.unregisterInitCallback(this) + val exception = throwable + ?: RuntimeException("EmojiCompat failed to load") + loadDeferred.completeExceptionally(exception) + } + }) + loadDeferred.await() } } } \ No newline at end of file diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/firebase/Auth.kt b/app/src/main/java/com/javinator9889/handwashingreminder/firebase/Auth.kt new file mode 100644 index 0000000..b3e8704 --- /dev/null +++ b/app/src/main/java/com/javinator9889/handwashingreminder/firebase/Auth.kt @@ -0,0 +1,59 @@ +/* + * Copyright © 2020 - present | Handwashing reminder by Javinator9889 + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see https://www.gnu.org/licenses/. + * + * Created by Javinator9889 on 9/06/20 - Handwashing reminder. + */ +package com.javinator9889.handwashingreminder.firebase + +import com.google.firebase.auth.FirebaseAuth +import com.google.firebase.auth.FirebaseUser +import com.javinator9889.handwashingreminder.utils.threading.await +import timber.log.Timber + + +object Auth { + private lateinit var auth: FirebaseAuth + private lateinit var currentUser: FirebaseUser + private lateinit var privateToken: String + + suspend fun init() { + if (!::auth.isInitialized) + auth = FirebaseAuth.getInstance() + val currentUser = auth.currentUser + if (currentUser == null) { + Timber.d("No user defined lo signing-in") + this.currentUser = auth.signInAnonymously().await().user!! + } else this.currentUser = currentUser + } + + suspend fun token(): String { + if (!::auth.isInitialized || !::currentUser.isInitialized) + throw IllegalStateException("init must be called first") + if (::privateToken.isInitialized) { + Timber.d("Obtaining previous generated token") + return privateToken + } + privateToken = currentUser.getIdToken(true).await().token + ?: throw IllegalStateException("token not valid") + return privateToken + } + + fun logout() { + if (!::auth.isInitialized) + throw IllegalStateException("init must be called first") + auth.signOut() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/gms/activity/ActivityHandler.kt b/app/src/main/java/com/javinator9889/handwashingreminder/gms/activity/ActivityHandler.kt index ac29b8d..47902c0 100644 --- a/app/src/main/java/com/javinator9889/handwashingreminder/gms/activity/ActivityHandler.kt +++ b/app/src/main/java/com/javinator9889/handwashingreminder/gms/activity/ActivityHandler.kt @@ -19,34 +19,60 @@ package com.javinator9889.handwashingreminder.gms.activity import android.app.PendingIntent +import android.app.PendingIntent.FLAG_UPDATE_CURRENT import android.content.Context import android.content.Intent -import androidx.preference.PreferenceManager import com.google.android.gms.location.ActivityRecognition import com.google.android.gms.location.ActivityTransition +import com.google.android.gms.location.ActivityTransition.ACTIVITY_TRANSITION_EXIT import com.google.android.gms.location.ActivityTransitionRequest +import com.google.android.gms.location.DetectedActivity import com.google.android.gms.tasks.Task -import com.javinator9889.handwashingreminder.utils.Preferences import timber.log.Timber +internal const val ACTIVITY_REQUEST_CODE = 64 +internal const val TRANSITIONS_RECEIVER_ACTION = + "com.javinator9889.handwashingreminder.TRANSITIONS_RECEIVER_ACTION" +internal val TRANSITIONS = listOf( + ActivityTransition.Builder() + .setActivityType(DetectedActivity.IN_VEHICLE) + .setActivityTransition(ACTIVITY_TRANSITION_EXIT) + .build(), + ActivityTransition.Builder() + .setActivityType(DetectedActivity.ON_BICYCLE) + .setActivityTransition(ACTIVITY_TRANSITION_EXIT) + .build(), + ActivityTransition.Builder() + .setActivityType(DetectedActivity.RUNNING) + .setActivityTransition(ACTIVITY_TRANSITION_EXIT) + .build(), + ActivityTransition.Builder() + .setActivityType(DetectedActivity.WALKING) + .setActivityTransition(ACTIVITY_TRANSITION_EXIT) + .build() +) -class ActivityHandler(private val context: Context) { - private val requestCode = 51824210 - private val transitions: MutableList = mutableListOf() - private var pendingIntent: PendingIntent +class ActivityHandler private constructor(private val context: Context) { + private val pendingIntent: PendingIntent + get() = createPendingIntent() private var activityRegistered = false - init { - val activitiesSet = createSetOfTransitions() - addTransitions(activitiesSet, transitions) - pendingIntent = createPendingIntent() + companion object { + private var instance: ActivityHandler? = null + + fun getInstance(context: Context): ActivityHandler { + instance?.let { return it } + synchronized(this) { + val instance = ActivityHandler(context.applicationContext) + this.instance = instance + return instance + } + } } fun startTrackingActivity() { - if (transitions.size == 0) - return Timber.d("Starting activity recognition") - with(ActivityTransitionRequest(transitions)) { + with(ActivityTransitionRequest(TRANSITIONS)) { ActivityRecognition.getClient(context) .requestActivityTransitionUpdates(this, pendingIntent).apply { addOnSuccessListener { activityRegistered = true } @@ -60,56 +86,22 @@ class ActivityHandler(private val context: Context) { if (!activityRegistered) return null return ActivityRecognition.getClient(context) - .removeActivityTransitionUpdates(pendingIntent).apply { - addOnSuccessListener { pendingIntent.cancel() } - addOnFailureListener { e: Exception -> Timber.e(e) } - } - } - - fun reload() { - with(createSetOfTransitions()) { - transitions.clear() - addTransitions(this, transitions) - disableActivityTracker()?.let { + .removeActivityTransitionUpdates(pendingIntent).also { it.addOnSuccessListener { - pendingIntent = createPendingIntent() - startTrackingActivity() + pendingIntent.cancel(); activityRegistered = false } + it.addOnFailureListener { e: Exception -> Timber.e(e) } } - } } - private fun createSetOfTransitions(): Set { - val preferences = PreferenceManager.getDefaultSharedPreferences(context) - with(hashSetOf()) { - preferences.getStringSet( - Preferences.ACTIVITIES_ENABLED, - Preferences.DEFAULT_ACTIVITY_SET - )!!.run { - forEach { this@with += Integer.parseInt(it) } - } - return this - } - } - - private fun addTransitions( - activitiesSet: Set, - transitions: MutableList, - activityTransition: Int = ActivityTransition.ACTIVITY_TRANSITION_EXIT - ) { - for (activity in activitiesSet) { - transitions += ActivityTransition.Builder() - .setActivityType(activity) - .setActivityTransition(activityTransition) - .build() - } - } - - private fun createPendingIntent(): PendingIntent { + private fun createPendingIntent(): PendingIntent = with(Intent(context, ActivityReceiver::class.java)) { - return PendingIntent.getBroadcast( - context, requestCode, this, PendingIntent.FLAG_UPDATE_CURRENT + action = TRANSITIONS_RECEIVER_ACTION + PendingIntent.getBroadcast( + context, + ACTIVITY_REQUEST_CODE, + this, + FLAG_UPDATE_CURRENT ) } - } } \ No newline at end of file diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/gms/activity/ActivityReceiver.kt b/app/src/main/java/com/javinator9889/handwashingreminder/gms/activity/ActivityReceiver.kt index c23808f..d7b2845 100644 --- a/app/src/main/java/com/javinator9889/handwashingreminder/gms/activity/ActivityReceiver.kt +++ b/app/src/main/java/com/javinator9889/handwashingreminder/gms/activity/ActivityReceiver.kt @@ -23,6 +23,7 @@ import android.content.Context import android.content.Intent import androidx.annotation.StringRes import androidx.emoji.text.EmojiCompat +import androidx.preference.PreferenceManager import com.google.android.gms.location.ActivityTransition import com.google.android.gms.location.ActivityTransitionResult import com.google.android.gms.location.DetectedActivity @@ -30,54 +31,82 @@ import com.javinator9889.handwashingreminder.R import com.javinator9889.handwashingreminder.emoji.EmojiLoader import com.javinator9889.handwashingreminder.notifications.NotificationsHandler import com.javinator9889.handwashingreminder.utils.ACTIVITY_CHANNEL_ID +import com.javinator9889.handwashingreminder.utils.Preferences +import com.javinator9889.handwashingreminder.utils.calendar.CalendarUtils import com.javinator9889.handwashingreminder.utils.goAsync -import kotlinx.coroutines.CompletableDeferred +import kotlinx.coroutines.Deferred import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext +import timber.log.Timber +import java.io.* +import java.util.* +import java.util.concurrent.TimeUnit class ActivityReceiver : BroadcastReceiver() { /** * {@inheritDoc} */ override fun onReceive(context: Context, intent: Intent) { + Timber.d("Detected user activity - ${intent.action}") if (ActivityTransitionResult.hasResult(intent)) { - val emojiLoader = EmojiLoader.get(context) - val result = ActivityTransitionResult.extractResult(intent)!! - for (event in result.transitionEvents) { - if (event.transitionType != - ActivityTransition.ACTIVITY_TRANSITION_EXIT || - event.activityType == DetectedActivity.UNKNOWN - ) - continue - val notificationHandler = NotificationsHandler( - context, - ACTIVITY_CHANNEL_ID, - context.getString( - R.string.activity_notification_channel_name - ), - context.getString( - R.string.activity_notification_channel_desc + val emojiLoader = EmojiLoader.loadAsync(context) + val result = ActivityTransitionResult.extractResult(intent) + result?.let { + for (event in result.transitionEvents) { + if (event.transitionType != + ActivityTransition.ACTIVITY_TRANSITION_EXIT || + event.activityType == DetectedActivity.UNKNOWN ) - ) - goAsync { - putNotification( - notificationHandler, - emojiLoader, - event.activityType, - context + continue + val notificationHandler = NotificationsHandler( + context, + ACTIVITY_CHANNEL_ID, + context.getString( + R.string.activity_notification_channel_name + ), + context.getString( + R.string.activity_notification_channel_desc + ) ) + goAsync { + putNotification( + notificationHandler, + emojiLoader, + event.activityType, + context + ) + } + break } - break - } + } ?: Timber.w("Received unmatched activity - $intent") } } private suspend fun putNotification( notificationsHandler: NotificationsHandler, - emojiLoader: CompletableDeferred, + emojiLoader: Deferred, detectedActivity: Int, context: Context ) { + val prefs = PreferenceManager.getDefaultSharedPreferences(context) + val timeInBetweenNotifications = + prefs.getString(Preferences.ACTIVITY_MINIMUM_TIME, "15")!!.toInt() + val timeFile = File(context.cacheDir, "activity.time") + var latestNotificationTime = 0L + withContext(Dispatchers.IO) { + if (timeFile.exists()) { + DataInputStream(FileInputStream(timeFile)).use { + latestNotificationTime = it.readLong() + } + } + } + val timeDifference = CalendarUtils.timeBetweenIn( + TimeUnit.MINUTES, + latestNotificationTime + ) + Timber.d("$timeDifference - $timeInBetweenNotifications") + if (timeDifference <= timeInBetweenNotifications) + return val notificationContent = when (detectedActivity) { DetectedActivity.WALKING -> NotificationContent( @@ -100,13 +129,13 @@ class ActivityReceiver : BroadcastReceiver() { R.string.activity_notification_vehicle_content ) else -> throw IllegalArgumentException( - "Activity not recognized" + "Activity not recognized - $detectedActivity" ) } - val emojiCompat = emojiLoader.await() var title = context.getText(notificationContent.title) var content = context.getText(notificationContent.content) try { + val emojiCompat = emojiLoader.await() title = emojiCompat.process(title) content = emojiCompat.process(content) } catch (_: IllegalStateException) { @@ -117,9 +146,15 @@ class ActivityReceiver : BroadcastReceiver() { largeIcon = R.drawable.handwashing_app_logo, title = title, content = content, - longContent = content + longContent = content, + notificationId = 2 ) } + withContext(Dispatchers.IO) { + DataOutputStream(FileOutputStream(timeFile)).use { + it.writeLong(Calendar.getInstance().timeInMillis) + } + } } } diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/gms/ads/AdLoader.kt b/app/src/main/java/com/javinator9889/handwashingreminder/gms/ads/AdLoader.kt index 8ef3b82..4752493 100644 --- a/app/src/main/java/com/javinator9889/handwashingreminder/gms/ads/AdLoader.kt +++ b/app/src/main/java/com/javinator9889/handwashingreminder/gms/ads/AdLoader.kt @@ -28,5 +28,5 @@ interface AdLoader { fun destroy() - fun loadAdForViewGroup(view: ViewGroup, removeAllViews: Boolean = true) + fun loadAdForViewGroup(view: ViewGroup, removeAllViews: Boolean = true): Throwable? } \ No newline at end of file diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/gms/ads/AdsEnabler.kt b/app/src/main/java/com/javinator9889/handwashingreminder/gms/ads/AdsEnabler.kt index dc2f780..4f031b5 100644 --- a/app/src/main/java/com/javinator9889/handwashingreminder/gms/ads/AdsEnabler.kt +++ b/app/src/main/java/com/javinator9889/handwashingreminder/gms/ads/AdsEnabler.kt @@ -26,7 +26,7 @@ import com.javinator9889.handwashingreminder.application.HandwashingApplication const val PACKAGE_NAME = "com.google.android.gms.ads" const val CLASS_NAME = "MobileAdsInitProvider" -class AdsEnabler(private val app: HandwashingApplication) { +class AdsEnabler(app: HandwashingApplication) { private val packageManager = app.packageManager private val componentName = ComponentName(app, "${PACKAGE_NAME}.${CLASS_NAME}") diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/graphics/CustomGraphicsModule.java b/app/src/main/java/com/javinator9889/handwashingreminder/graphics/CustomGraphicsModule.java deleted file mode 100644 index ad9cd59..0000000 --- a/app/src/main/java/com/javinator9889/handwashingreminder/graphics/CustomGraphicsModule.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright © 2020 - present | Handwashing reminder by Javinator9889 - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see https://www.gnu.org/licenses/. - * - * Created by Javinator9889 on 15/04/20 - Handwashing reminder. - */ -package com.javinator9889.handwashingreminder.graphics; - -import android.content.Context; - -import androidx.annotation.NonNull; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.GlideBuilder; -import com.bumptech.glide.Registry; -import com.bumptech.glide.annotation.GlideModule; -import com.bumptech.glide.load.DecodeFormat; -import com.bumptech.glide.module.AppGlideModule; -import com.bumptech.glide.request.RequestOptions; - -@GlideModule -public final class CustomGraphicsModule extends AppGlideModule { - @Override - public void applyOptions(@NonNull Context context, @NonNull GlideBuilder builder) { - builder.setDefaultRequestOptions( - new RequestOptions() - .format(DecodeFormat.PREFER_ARGB_8888) - ); - } - - @Override - public void registerComponents(@NonNull Context context, @NonNull Glide glide, @NonNull Registry registry) { -// super.registerComponents(context, glide, registry); -// glide.getRegistry(). - } -} diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/graphics/LottieAdaptedPerformanceAnimationView.kt b/app/src/main/java/com/javinator9889/handwashingreminder/graphics/LottieAdaptedPerformanceAnimationView.kt index 708d9e9..45e52c6 100644 --- a/app/src/main/java/com/javinator9889/handwashingreminder/graphics/LottieAdaptedPerformanceAnimationView.kt +++ b/app/src/main/java/com/javinator9889/handwashingreminder/graphics/LottieAdaptedPerformanceAnimationView.kt @@ -20,29 +20,36 @@ package com.javinator9889.handwashingreminder.graphics import android.content.Context import android.util.AttributeSet +import androidx.preference.PreferenceManager import com.airbnb.lottie.LottieAnimationView import com.airbnb.lottie.LottieComposition import com.airbnb.lottie.LottieOnCompositionLoadedListener +import com.javinator9889.handwashingreminder.utils.Preferences import com.javinator9889.handwashingreminder.utils.isHighPerformingDevice class LottieAdaptedPerformanceAnimationView : LottieAnimationView, LottieOnCompositionLoadedListener { - constructor(context: Context): super(context) - constructor(context: Context, attrs: AttributeSet): super(context, attrs) - constructor(context: Context, attrs: AttributeSet, attrStyle: Int): + constructor(context: Context) : super(context) + constructor(context: Context, attrs: AttributeSet) : super(context, attrs) + constructor(context: Context, attrs: AttributeSet, attrStyle: Int) : super(context, attrs, attrStyle) + private val areAnimationsEnabled: Boolean + init { addLottieOnCompositionLoadedListener(this) enableMergePathsForKitKatAndAbove(true) setCacheComposition(true) + val preferences = PreferenceManager.getDefaultSharedPreferences(context) + areAnimationsEnabled = + preferences.getBoolean(Preferences.PERFORMANCE_ANIMATIONS, true) } override fun getDuration(): Long = if (isHighPerformingDevice()) super.getDuration() else 100L override fun onCompositionLoaded(composition: LottieComposition?) { - if (!isHighPerformingDevice()) { + if (!isHighPerformingDevice() || !areAnimationsEnabled) { setMinFrame(maxFrame.toInt()) repeatCount = 0 } diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/graphics/RecyclingImageView.java b/app/src/main/java/com/javinator9889/handwashingreminder/graphics/RecyclingImageView.java deleted file mode 100644 index 194d5c9..0000000 --- a/app/src/main/java/com/javinator9889/handwashingreminder/graphics/RecyclingImageView.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright (C) 2013 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.javinator9889.handwashingreminder.graphics; - -import android.content.Context; -import android.graphics.drawable.Drawable; -import android.graphics.drawable.LayerDrawable; -import android.util.AttributeSet; - -import androidx.annotation.DrawableRes; -import androidx.annotation.Nullable; -import androidx.appcompat.widget.AppCompatImageView; - -/** - * Sub-class of ImageView which automatically notifies the drawable when it is - * being displayed. - */ -public class RecyclingImageView extends AppCompatImageView { - @DrawableRes - private Integer mSavedDrawableRes = null; - - public RecyclingImageView(Context context) { - super(context); - } - - public RecyclingImageView(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public void setSavedDrawableRes(@Nullable @DrawableRes Integer mSavedDrawableRes) { - this.mSavedDrawableRes = mSavedDrawableRes; - } - - @Nullable - @DrawableRes - public Integer getSavedDrawableRes() { - return mSavedDrawableRes; - } - - @Override - protected void onWindowVisibilityChanged(int visibility) { - super.onWindowVisibilityChanged(visibility); - if (mSavedDrawableRes != null && - visibility == VISIBLE && - getDrawable() == null) { - try { - GlideApp.with(this) - .load(mSavedDrawableRes) - .centerInside() - .into(this); - } catch (Exception ignored) { - setImageResource(mSavedDrawableRes); - } - } else if (visibility == INVISIBLE || visibility == GONE) - onDetachedFromWindow(); - } - - /** - * @see android.widget.ImageView#onDetachedFromWindow() - */ - @Override - public void onDetachedFromWindow() { - // This has been detached from Window, so clear the drawable - setImageDrawable(null); - - super.onDetachedFromWindow(); - } - - /** - * @see android.widget.ImageView#setImageDrawable(android.graphics.drawable.Drawable) - */ - @Override - public void setImageDrawable(Drawable drawable) { - // Keep hold of previous Drawable - final Drawable previousDrawable = getDrawable(); - - // Call super to set new Drawable - super.setImageDrawable(drawable); - - // Notify new Drawable that it is being displayed - notifyDrawable(drawable, true); - - // Notify old Drawable so it is no longer being displayed - notifyDrawable(previousDrawable, false); - } - - /** - * Notifies the drawable that it's displayed state has changed. - */ - private static void notifyDrawable(Drawable drawable, final boolean isDisplayed) { - if (drawable instanceof RecyclingBitmapDrawable) { - // The drawable is a CountingBitmapDrawable, so notify it - ((RecyclingBitmapDrawable) drawable).setIsDisplayed(isDisplayed); - } else if (drawable instanceof LayerDrawable) { - // The drawable is a LayerDrawable, so recurse on each layer - LayerDrawable layerDrawable = (LayerDrawable) drawable; - for (int i = 0, z = layerDrawable.getNumberOfLayers(); i < z; i++) { - notifyDrawable(layerDrawable.getDrawable(i), isDisplayed); - } - } - } - -} diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/graphics/RecyclingImageView.kt b/app/src/main/java/com/javinator9889/handwashingreminder/graphics/RecyclingImageView.kt new file mode 100644 index 0000000..64a3818 --- /dev/null +++ b/app/src/main/java/com/javinator9889/handwashingreminder/graphics/RecyclingImageView.kt @@ -0,0 +1,103 @@ +/* + * Copyright © 2020 - present | Handwashing reminder by Javinator9889 + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see https://www.gnu.org/licenses/. + * + * Created by Javinator9889 on 1/07/20 - Handwashing reminder. + */ +package com.javinator9889.handwashingreminder.graphics + +import android.content.Context +import android.graphics.drawable.Drawable +import android.graphics.drawable.LayerDrawable +import android.util.AttributeSet +import android.view.View +import androidx.annotation.DrawableRes +import androidx.appcompat.widget.AppCompatImageView +import coil.api.load + +class RecyclingImageView : AppCompatImageView { + constructor(context: Context) : super(context) + constructor(context: Context, attrs: AttributeSet) : super(context, attrs) + constructor( + context: Context, + attrs: AttributeSet, + defStyleAttr: Int + ) : super(context, attrs, defStyleAttr) + + @DrawableRes + var savedDrawableRes: Int? = null + + override fun onWindowVisibilityChanged(visibility: Int) { + super.onWindowVisibilityChanged(visibility) + if (savedDrawableRes != null + && visibility == View.VISIBLE + && drawable != null + ) + try { + load(savedDrawableRes!!) + } catch (ignored: Throwable) { + setImageResource(savedDrawableRes!!) + } + else if (visibility == View.INVISIBLE || visibility == View.GONE) + onDetachedFromWindow() + } + + /** + * @see android.widget.ImageView.onDetachedFromWindow + */ + public override fun onDetachedFromWindow() { + // This has been detached from Window, so clear the drawable + setImageDrawable(null) + super.onDetachedFromWindow() + } + + /** + * @see android.widget.ImageView.setImageDrawable + */ + override fun setImageDrawable(drawable: Drawable?) { + // Keep hold of previous Drawable + val previousDrawable = getDrawable() + + // Call super to set new Drawable + super.setImageDrawable(drawable) + + // Notify new Drawable that it is being displayed + notifyDrawable(drawable, true) + + // Notify old Drawable so it is no longer being displayed + notifyDrawable(previousDrawable, false) + } + + /** + * Notifies the drawable that it's displayed state has changed. + */ + private fun notifyDrawable( + drawable: Drawable?, + isDisplayed: Boolean + ) { + if (drawable is RecyclingBitmapDrawable) { + // The drawable is a CountingBitmapDrawable, so notify it + drawable.setIsDisplayed(isDisplayed) + } else if (drawable is LayerDrawable) { + // The drawable is a LayerDrawable, so recurse on each layer + var i = 0 + val z = drawable.numberOfLayers + while (i < z) { + notifyDrawable(drawable.getDrawable(i), isDisplayed) + i++ + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/jobs/BootCompletedJob.kt b/app/src/main/java/com/javinator9889/handwashingreminder/jobs/BootCompletedJob.kt index 1a614c9..b0ecbe3 100644 --- a/app/src/main/java/com/javinator9889/handwashingreminder/jobs/BootCompletedJob.kt +++ b/app/src/main/java/com/javinator9889/handwashingreminder/jobs/BootCompletedJob.kt @@ -22,7 +22,7 @@ import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import androidx.preference.PreferenceManager -import com.javinator9889.handwashingreminder.application.HandwashingApplication +import com.javinator9889.handwashingreminder.gms.activity.ActivityHandler import com.javinator9889.handwashingreminder.jobs.alarms.AlarmHandler import com.javinator9889.handwashingreminder.utils.Preferences import timber.log.Timber @@ -30,16 +30,19 @@ import timber.log.Timber class BootCompletedJob : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { if (intent.action == Intent.ACTION_BOOT_COMPLETED) { - val app = HandwashingApplication.instance + val activityHandler = ActivityHandler.getInstance(context) val preferences = PreferenceManager.getDefaultSharedPreferences(context) if (preferences.getBoolean( Preferences.ACTIVITY_TRACKING_ENABLED, false ) - ) - app.activityHandler.startTrackingActivity() - else - app.activityHandler.disableActivityTracker() + ) { + Timber.d("Device rebooted so starting activity as it's enabled") + activityHandler.startTrackingActivity() + } else { + Timber.d("Device rebooted but not starting activity as it isn't enabled") + activityHandler.disableActivityTracker() + } Timber.d("Enqueuing notifications as the device has rebooted") with(AlarmHandler(context)) { scheduleAllAlarms() diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/jobs/HandsWashedReceiver.kt b/app/src/main/java/com/javinator9889/handwashingreminder/jobs/HandsWashedReceiver.kt new file mode 100644 index 0000000..08b0fbd --- /dev/null +++ b/app/src/main/java/com/javinator9889/handwashingreminder/jobs/HandsWashedReceiver.kt @@ -0,0 +1,77 @@ +/* + * Copyright © 2020 - present | Handwashing reminder by Javinator9889 + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see https://www.gnu.org/licenses/. + * + * Created by Javinator9889 on 2/07/20 - Handwashing reminder. + */ +package com.javinator9889.handwashingreminder.jobs + +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.widget.Toast +import androidx.core.app.NotificationManagerCompat +import com.javinator9889.handwashingreminder.R +import com.javinator9889.handwashingreminder.data.repositories.HandwashingRepository +import com.javinator9889.handwashingreminder.data.room.db.HandwashingDatabase +import com.javinator9889.handwashingreminder.data.room.entities.Handwashing +import com.javinator9889.handwashingreminder.emoji.EmojiLoader +import com.javinator9889.handwashingreminder.utils.calendar.CalendarUtils +import com.javinator9889.handwashingreminder.utils.goAsync +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext + +internal const val HANDS_WASHED_CODE = 128 +internal const val HANDS_WASHED_ACTION = + "com.javinator9889.handwashingreminder.HANDSWASHED_EVENT" + +class HandsWashedReceiver : BroadcastReceiver() { + override fun onReceive(context: Context, intent: Intent) { + val emojiLoader = EmojiLoader.loadAsync(context) + val repository = + with(HandwashingDatabase.getDatabase(context).handwashingDao()) { + HandwashingRepository(this) + } + with(NotificationManagerCompat.from(context)) { + cancel(1) + } + goAsync { + val createdItem = withContext(Dispatchers.IO) { + repository.get(CalendarUtils.today.time) + } + if (createdItem == null) { + withContext(Dispatchers.IO) { + repository.create(Handwashing(CalendarUtils.today.time, 0)) + } + } + withContext(Dispatchers.IO) { + repository.increment(CalendarUtils.today.time) + } + val emojiCompat = emojiLoader.await() + val toastText = context.getText(R.string.hurray) + withContext(Dispatchers.Main) { + try { + Toast.makeText( + context, + emojiCompat.process(toastText), + Toast.LENGTH_LONG + ).show() + } catch (_: IllegalStateException) { + Toast.makeText(context, toastText, Toast.LENGTH_LONG).show() + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/jobs/alarms/Alarms.kt b/app/src/main/java/com/javinator9889/handwashingreminder/jobs/alarms/Alarms.kt index 4353aa2..3e0593e 100644 --- a/app/src/main/java/com/javinator9889/handwashingreminder/jobs/alarms/Alarms.kt +++ b/app/src/main/java/com/javinator9889/handwashingreminder/jobs/alarms/Alarms.kt @@ -18,14 +18,36 @@ */ package com.javinator9889.handwashingreminder.jobs.alarms +import androidx.annotation.StringRes +import com.javinator9889.handwashingreminder.R import com.javinator9889.handwashingreminder.utils.Preferences enum class Alarms( val identifier: String, val code: Int, - val preferenceKey: String + val preferenceKey: String, + @StringRes val groupName: Int, + val channelId: String ) { - BREAKFAST_ALARM("alarms:breakfast", 0, Preferences.BREAKFAST_TIME), - LUNCH_ALARM("alarms:lunch", 1, Preferences.LUNCH_TIME), - DINNER_ALARM("alarms:dinner", 2, Preferences.DINNER_TIME) + BREAKFAST_ALARM( + "alarms:breakfast", + 0, + Preferences.BREAKFAST_TIME, + R.string.breakfast_notifications, + "notifications:breakfast" + ), + LUNCH_ALARM( + "alarms:lunch", + 1, + Preferences.LUNCH_TIME, + R.string.lunch_notifications, + "notifications:lunch" + ), + DINNER_ALARM( + "alarms:dinner", + 2, + Preferences.DINNER_TIME, + R.string.dinner_notifications, + "notifications:dinner" + ) } \ No newline at end of file diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/jobs/workers/ScheduledNotificationWorker.kt b/app/src/main/java/com/javinator9889/handwashingreminder/jobs/workers/ScheduledNotificationWorker.kt index 10d633c..ac7f67e 100644 --- a/app/src/main/java/com/javinator9889/handwashingreminder/jobs/workers/ScheduledNotificationWorker.kt +++ b/app/src/main/java/com/javinator9889/handwashingreminder/jobs/workers/ScheduledNotificationWorker.kt @@ -18,16 +18,22 @@ */ package com.javinator9889.handwashingreminder.jobs.workers +import android.app.PendingIntent import android.content.Context +import android.content.Intent import androidx.annotation.ArrayRes import androidx.annotation.StringRes +import androidx.core.app.NotificationCompat import com.javinator9889.handwashingreminder.R import com.javinator9889.handwashingreminder.application.HandwashingApplication import com.javinator9889.handwashingreminder.emoji.EmojiLoader +import com.javinator9889.handwashingreminder.jobs.HANDS_WASHED_ACTION +import com.javinator9889.handwashingreminder.jobs.HANDS_WASHED_CODE +import com.javinator9889.handwashingreminder.jobs.HandsWashedReceiver import com.javinator9889.handwashingreminder.jobs.alarms.AlarmHandler import com.javinator9889.handwashingreminder.jobs.alarms.Alarms +import com.javinator9889.handwashingreminder.notifications.Action import com.javinator9889.handwashingreminder.notifications.NotificationsHandler -import com.javinator9889.handwashingreminder.utils.TIME_CHANNEL_ID import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.withContext @@ -43,12 +49,14 @@ abstract class ScheduledNotificationWorker(context: Context) { suspend fun doWork() = coroutineScope { try { val startTime = System.currentTimeMillis() - val emojiLoader = EmojiLoader.get(context) + val emojiLoader = EmojiLoader.loadAsync(context) val notificationsHandler = NotificationsHandler( context = context, - channelId = TIME_CHANNEL_ID, + channelId = alarm.channelId, channelName = getString(R.string.time_notification_channel_name), - channelDesc = getString(R.string.time_notification_channel_desc) + channelDesc = getString(R.string.time_notification_channel_desc), + groupId = alarm.identifier, + groupName = getString(alarm.groupName) ) val emojiCompat = emojiLoader.await() var title = getText(titleRes) @@ -57,14 +65,29 @@ abstract class ScheduledNotificationWorker(context: Context) { try { title = emojiCompat.process(title) content = emojiCompat.process(content) - } catch (_: IllegalStateException) { } + } catch (_: IllegalStateException) { + } + val washedPendingIntent = PendingIntent.getBroadcast( + context, + HANDS_WASHED_CODE, + Intent(context, HandsWashedReceiver::class.java).apply { + action = HANDS_WASHED_ACTION + }, + PendingIntent.FLAG_UPDATE_CURRENT + ) withContext(Dispatchers.Main) { notificationsHandler.createNotification( iconDrawable = R.drawable.ic_stat_handwashing, largeIcon = R.drawable.handwashing_app_logo, title = title, content = content, - longContent = content + longContent = content, + priority = NotificationCompat.PRIORITY_MAX, + action = Action( + R.drawable.ic_stat_handwashing, + getString(R.string.just_washed), + washedPendingIntent + ) ) } Timber.d( diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/network/HttpDownloader.kt b/app/src/main/java/com/javinator9889/handwashingreminder/network/HttpDownloader.kt index ad4dced..df7561f 100644 --- a/app/src/main/java/com/javinator9889/handwashingreminder/network/HttpDownloader.kt +++ b/app/src/main/java/com/javinator9889/handwashingreminder/network/HttpDownloader.kt @@ -18,14 +18,20 @@ */ package com.javinator9889.handwashingreminder.network -import okhttp3.CacheControl -import okhttp3.OkHttpClient -import okhttp3.Request +import com.javinator9889.handwashingreminder.application.HandwashingApplication +import okhttp3.* import okio.BufferedSource import java.io.IOException +import java.io.Reader +import java.util.concurrent.TimeUnit class HttpDownloader : OkHttpDownloader { - private val client = OkHttpClient() + private val client: OkHttpClient = OkHttpClient.Builder() + .cache(Cache(HandwashingApplication.instance.cacheDir, 2024 * 10)) + .callTimeout(5, TimeUnit.SECONDS) + .readTimeout(1, TimeUnit.MINUTES) + .followRedirects(true) + .build() override fun downloadFile(url: String): BufferedSource { val request = with(Request.Builder()) { @@ -41,4 +47,20 @@ class HttpDownloader : OkHttpDownloader { return body()!!.source() } } + + fun json(url: String, headers: Headers? = null): Reader { + val request = with(Request.Builder()) { + url(url) + cacheControl(CacheControl.FORCE_NETWORK) + headers?.let { headers(it) } + build() + } + with(client.newCall(request).execute()) { + if (!isSuccessful) { + close() + throw IOException("Unexpected code $this") + } + return body()!!.charStream() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/notifications/NotificationsHandler.kt b/app/src/main/java/com/javinator9889/handwashingreminder/notifications/NotificationsHandler.kt index e16ec20..5b1c3f7 100644 --- a/app/src/main/java/com/javinator9889/handwashingreminder/notifications/NotificationsHandler.kt +++ b/app/src/main/java/com/javinator9889/handwashingreminder/notifications/NotificationsHandler.kt @@ -19,6 +19,7 @@ package com.javinator9889.handwashingreminder.notifications import android.app.NotificationChannel +import android.app.NotificationChannelGroup import android.app.NotificationManager import android.app.PendingIntent import android.content.Context @@ -31,7 +32,6 @@ import androidx.annotation.DrawableRes import androidx.annotation.StringRes import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat -import androidx.core.content.edit import androidx.preference.PreferenceManager import com.javinator9889.handwashingreminder.R import com.javinator9889.handwashingreminder.activities.FAST_START_KEY @@ -47,20 +47,29 @@ class NotificationsHandler( private val context: Context, private val channelId: String, private val channelName: String = "", - private val channelDesc: String = "" + private val channelDesc: String = "", + groupId: String = "", + groupName: String = "" ) { private val preferences: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(context) - private val notificationId = 1 private val vibrationPattern = longArrayOf(300L, 300L, 300L, 300L) + private val manager = + context.getSystemService(Context.NOTIFICATION_SERVICE) as + NotificationManager init { - if (isNotificationChannelCreated() || createChannelRequired()) { - createNotificationChannel() - preferences.edit { - putBoolean(Preferences.CREATE_CHANNEL_KEY, false) - } + if (groupId.isNotEmpty() && groupName.isNotEmpty() + && isAtLeast(AndroidVersion.O) + ) { + manager.createNotificationChannelGroup( + NotificationChannelGroup( + groupId, + groupName + ) + ) } + createNotificationChannel(groupId) } fun createNotification( @@ -69,7 +78,9 @@ class NotificationsHandler( @StringRes title: Int, @StringRes content: Int, priority: Int = NotificationCompat.PRIORITY_DEFAULT, - @StringRes longContent: Int = -1 + @StringRes longContent: Int = -1, + action: Action? = null, + notificationId: Int = -1 ) { val longContentProcessed = if (longContent != -1) context.getText(longContent) else null @@ -79,7 +90,9 @@ class NotificationsHandler( context.getText(title), context.getText(content), priority, - longContentProcessed + longContentProcessed, + action, + notificationId ) } @@ -89,7 +102,9 @@ class NotificationsHandler( title: CharSequence, content: CharSequence, priority: Int = NotificationCompat.PRIORITY_DEFAULT, - longContent: CharSequence? = null + longContent: CharSequence? = null, + action: Action? = null, + notificationId: Int = -1 ) { val bitmapIcon = if (isAtLeast(AndroidVersion.JELLY_BEAN_MR2)) { if (isAtLeast(AndroidVersion.P)) { @@ -111,7 +126,9 @@ class NotificationsHandler( title, content, priority, - longContent + longContent, + action, + notificationId ) } @@ -121,7 +138,9 @@ class NotificationsHandler( title: CharSequence, content: CharSequence, priority: Int = NotificationCompat.PRIORITY_DEFAULT, - longContent: CharSequence? = null + longContent: CharSequence? = null, + action: Action? = null, + notificationId: Int = -1 ) { val notifyIntent = Intent(context, LauncherActivity::class.java).apply { flags = @@ -148,6 +167,9 @@ class NotificationsHandler( setPriority(priority) setVibrate(vibrationPattern) setContentIntent(notifyPendingIntent) + action?.let { + addAction(action.drawable, action.text, action.pendingIntent) + } addAction( R.drawable.ic_share_black, context.getString(R.string.share), @@ -160,12 +182,13 @@ class NotificationsHandler( build() }.let { with(NotificationManagerCompat.from(context)) { - notify(notificationId, it) + val id = if (notificationId == -1) 1 else notificationId + notify(id, it) } } } - private fun createNotificationChannel() { + private fun createNotificationChannel(groupId: String = "") { if (isAtLeast(AndroidVersion.O)) { val importance = NotificationManager.IMPORTANCE_HIGH val that = this @@ -175,19 +198,15 @@ class NotificationsHandler( description = channelDesc vibrationPattern = that.vibrationPattern enableVibration(true) + if (groupId.isNotEmpty()) + group = groupId } - val notificationManager: NotificationManager = - context.getSystemService(Context.NOTIFICATION_SERVICE) as - NotificationManager - notificationManager.createNotificationChannel(channel) + manager.createNotificationChannel(channel) } } private fun isNotificationChannelCreated(): Boolean { if (isAtLeast(AndroidVersion.O)) { - val manager = context - .getSystemService(Context.NOTIFICATION_SERVICE) as - NotificationManager val channel = manager.getNotificationChannel(channelId) channel?.let { return it.importance != NotificationManager.IMPORTANCE_NONE @@ -198,7 +217,12 @@ class NotificationsHandler( } } - private fun createChannelRequired(): Boolean { - return preferences.getBoolean(Preferences.CREATE_CHANNEL_KEY, true) - } -} \ No newline at end of file + private fun createChannelRequired() = + preferences.getBoolean(Preferences.CREATE_CHANNEL_KEY, true) +} + +data class Action( + @DrawableRes val drawable: Int, + val text: CharSequence, + val pendingIntent: PendingIntent +) \ No newline at end of file diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/utils/Android.kt b/app/src/main/java/com/javinator9889/handwashingreminder/utils/Android.kt index eadf927..5a0f2a4 100644 --- a/app/src/main/java/com/javinator9889/handwashingreminder/utils/Android.kt +++ b/app/src/main/java/com/javinator9889/handwashingreminder/utils/Android.kt @@ -50,9 +50,9 @@ fun isHighPerformingDevice(): Boolean { getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager val isLowRamDevice = if (isAtLeast(AndroidVersion.KITKAT_WATCH)) - !activityManager.isLowRamDevice + activityManager.isLowRamDevice else true - return isLowRamDevice && + return !isLowRamDevice && Runtime.getRuntime().availableProcessors() >= 4 && activityManager.memoryClass >= 128 } @@ -99,6 +99,9 @@ fun getDeviceInfo(): String = with(StringBuilder()) { toString() } +fun getDeviceInfoHTML(): String = + getDeviceInfo().replace(Regex("(\r\n|\n)"), "
") + fun getUriFromRes(context: Context, @AnyRes resId: Int): Uri = with(context.resources) { Uri.Builder() diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/utils/Collections.kt b/app/src/main/java/com/javinator9889/handwashingreminder/utils/Collections.kt index 7d8746c..dca5620 100644 --- a/app/src/main/java/com/javinator9889/handwashingreminder/utils/Collections.kt +++ b/app/src/main/java/com/javinator9889/handwashingreminder/utils/Collections.kt @@ -18,12 +18,18 @@ */ package com.javinator9889.handwashingreminder.utils +import android.util.SparseArray +import androidx.core.util.set +import com.github.mikephil.charting.data.BarEntry +import com.javinator9889.handwashingreminder.data.room.entities.Handwashing +import com.javinator9889.handwashingreminder.utils.calendar.CalendarUtils import java.util.* +import java.util.concurrent.TimeUnit import kotlin.Comparator import kotlin.collections.ArrayList import kotlin.math.abs -fun Array?.notEmpty(f: (it: Array) -> Unit) { +fun Collection?.notEmpty(f: (it: Collection) -> Unit) { if (!this.isNullOrEmpty()) f(this) } @@ -45,4 +51,28 @@ fun List.closest(): Date { val diff2 = abs(date2.time - now) return@Comparator diff1.compareTo(diff2) }) +} + +fun List.toBarEntry(): List { + val entryBars = mutableListOf() + val daysSorted = mutableListOf() + val daysEntriesArray = SparseArray(size) + for (entry in this) { + val daysBetween = + (CalendarUtils.today.time.time - entry.date.time).run { + -TimeUnit.DAYS.convert(this, TimeUnit.MILLISECONDS).toInt() + } + daysEntriesArray[daysBetween] = entry.amount.toFloat() + daysSorted.add(daysBetween) + } + daysSorted.sort() + for (daysDifference in daysSorted) { + entryBars.add( + BarEntry( + daysDifference.toFloat(), + daysEntriesArray[daysDifference] + ) + ) + } + return entryBars } \ No newline at end of file diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/utils/Constants.kt b/app/src/main/java/com/javinator9889/handwashingreminder/utils/Constants.kt index 07886d4..3b6ab6f 100644 --- a/app/src/main/java/com/javinator9889/handwashingreminder/utils/Constants.kt +++ b/app/src/main/java/com/javinator9889/handwashingreminder/utils/Constants.kt @@ -23,147 +23,103 @@ import com.google.android.gms.location.DetectedActivity const val TIME_CHANNEL_ID = "timeNotificationsChannel" const val ACTIVITY_CHANNEL_ID = "activityNotificationsChannel" -class Preferences { - companion object { - const val CREATE_CHANNEL_KEY = "notifications:channel:create" - const val APP_INIT_KEY = "app:initialized" - const val ADS_ENABLED = "app:ads:enabled" - const val BREAKFAST_TIME = "app:breakfast" - const val LUNCH_TIME = "app:lunch" - const val DINNER_TIME = "app:dinner" - const val ANALYTICS_ENABLED = "firebase:analytics" - const val PERFORMANCE_ENABLED = "firebase:performance" - const val ACTIVITY_TRACKING_ENABLED = "activity:gms:tracking" - const val ACTIVITIES_ENABLED = "activity:gms:activities:enabled" - val DEFAULT_ACTIVITY_SET = setOf( - DetectedActivity.IN_VEHICLE.toString(), - DetectedActivity.ON_BICYCLE.toString(), - DetectedActivity.RUNNING.toString(), - DetectedActivity.WALKING.toString() - ) - const val DONATIONS = "donations" - const val INITIAL_TUTORIAL_DONE = "app:tutorial:is_done" - } +object Preferences { + const val CREATE_CHANNEL_KEY = "notifications:channel:create" + const val APP_INIT_KEY = "app:initialized" + const val ADS_ENABLED = "app:ads:enabled" + const val BREAKFAST_TIME = "app:breakfast" + const val LUNCH_TIME = "app:lunch" + const val DINNER_TIME = "app:dinner" + const val ANALYTICS_ENABLED = "firebase:analytics" + const val PERFORMANCE_ENABLED = "firebase:performance" + const val ACTIVITY_TRACKING_ENABLED = "activity:gms:tracking" + const val ACTIVITIES_ENABLED = "activity:gms:activities:enabled" + val DEFAULT_ACTIVITY_SET = setOf( + DetectedActivity.IN_VEHICLE.toString(), + DetectedActivity.ON_BICYCLE.toString(), + DetectedActivity.RUNNING.toString(), + DetectedActivity.WALKING.toString() + ) + const val DONATIONS = "donations" + const val INITIAL_TUTORIAL_DONE = "app:tutorial:is_done" + const val ACTIVITY_MINIMUM_TIME = "activity:gms:minimumInterval" + const val PERFORMANCE_ANIMATIONS = "app:performance:animations" } -class TimeConfig { - companion object { - const val BREAKFAST_ID = 0L - const val LUNCH_ID = 1L - const val DINNER_ID = 2L - } +object TimeConfig { + const val BREAKFAST_ID = 0L + const val LUNCH_ID = 1L + const val DINNER_ID = 2L } -class AppIntro { - companion object Modules { - const val MODULE_NAME = "appintro" - const val PACKAGE_NAME = - "com.javinator9889.handwashingreminder.appintro" - const val MAIN_ACTIVITY_NAME = "IntroActivity" - } +object AppIntro { + const val MODULE_NAME = "appintro" + const val PACKAGE_NAME = "com.javinator9889.handwashingreminder.appintro" + const val MAIN_ACTIVITY_NAME = "IntroActivity" } -class Ads { - companion object Modules { - const val MODULE_NAME = "ads" - const val PACKAGE_NAME = "com.javinator9889.handwashingreminder.ads" - const val CLASS_NAME = "AdLoaderImpl" - const val PROVIDER_NAME = "Provider" - } +object Ads { + const val MODULE_NAME = "ads" + const val PACKAGE_NAME = "com.javinator9889.handwashingreminder.ads" + const val CLASS_NAME = "AdLoaderImpl" + const val PROVIDER_NAME = "Provider" } -class BundledEmoji { - companion object Modules { - const val MODULE_NAME = "bundledemoji" - const val PACKAGE_NAME = "com.javinator9889.handwashingreminder.bundledemoji" - const val CLASS_NAME = "BundledEmojiConfig" - } +object BundledEmoji { + const val MODULE_NAME = "bundledemoji" + const val PACKAGE_NAME = + "com.javinator9889.handwashingreminder.bundledemoji" + const val CLASS_NAME = "BundledEmojiConfig" } -class OkHttp { - companion object Modules { - const val MODULE_NAME = "okhttp" - const val PACKAGE_NAME = "com.javinator9889.handwashingreminder.okhttp" - const val CLASS_NAME = "OkHttpDownloader" - const val PROVIDER_NAME = "Provider" - } +object RemoteConfig { + const val SPECIAL_EVENT = "special_event" + const val ANIMATION_NAME = "animation_name" + const val WORK_IN_PROGRESS = "work_in_progress_message" + const val DISEASES_JSON = "diseases" } -class OkHttpLegacy { - companion object Modules { - const val MODULE_NAME = "okhttplegacy" - const val PACKAGE_NAME = "com.javinator9889.handwashingreminder.okhttplegacy" - const val CLASS_NAME = "OkHttpDownloader" - const val PROVIDER_NAME = "Provider" - } -} - -class RemoteConfig { - companion object Keys { - const val SPECIAL_EVENT = "special_event" - const val ANIMATION_NAME = "animation_name" - const val WORK_IN_PROGRESS = "work_in_progress_message" - const val DISEASES_JSON = "diseases" - } -} - -class Workers { - companion object Keys { - const val WHO = "workers:key_id" - const val BREAKFAST = 0 - const val LUNCH = 1 - const val DINNER = 2 - const val BREAKFAST_UUID = "workers:breakfast" - const val LUNCH_UUID = "workers:lunch" - const val DINNER_UUID = "workers:dinner" - const val HOUR = "worker:hour" - const val MINUTE = "worker:minute" - } -} - -class Videos { - companion object URI { - const val URL = "video:url" - const val HASH = "video:hash" - const val FILENAME = "video:name" - val VideoList = arrayOf( - hashMapOf( - URL to "https://cloud.javinator9889.com/s/j4tAXFpNmcZ7WRG/download", - HASH to "4bab6874bf8b091accaaf01b07cbc16cbba661411b4dbdb4b2a9f4c033ce8889", - FILENAME to "first-step.mp4" - ), - hashMapOf( - URL to "https://cloud.javinator9889.com/s/XRDj6LBwb92mSNc/download", - HASH to "dc42473a8150d1f258d26e22d455500dcef9ee3c13122e183d712f8b5b8ecf0d", - FILENAME to "second-step.mp4" - ), - hashMapOf( - URL to "https://cloud.javinator9889.com/s/bQNtM9LPsfLYqjy/download", - HASH to "d8c83722a72466780ba00a6df3cf5fec30f662d538041c49e5cd1f6228d9a009", - FILENAME to "third-step.mp4" - ), - hashMapOf( - URL to "https://cloud.javinator9889.com/s/3G4npX58tkqXxx9/download", - HASH to "2e1ce76a465be9a0c4de53d607d4a6285c393094e88d63673571ab9355e09825", - FILENAME to "fourth-step.mp4" - ), - hashMapOf( - URL to "https://cloud.javinator9889.com/s/D9CPyBWQ5MbEsbE/download", - HASH to "e2b8893019af37a59b7dc3f9dfdf1788d781498ed8c67fa50997d26cc3beb27b", - FILENAME to "fifth-step.mp4" - ), - hashMapOf( - URL to "https://cloud.javinator9889.com/s/NZ23LBigk5pAXqR/download", - HASH to "b8831875e52841dd9d1bb3bb575fc1759cf69f93af868c3bb9098d7483be30f9", - FILENAME to "sixth-step.mp4" - ), - hashMapOf( - URL to "https://cloud.javinator9889.com/s/zMRz6nWqi6rsNen/download", - HASH to "d414da0b1cdc818bea8028b7ac1f4e9702fcad6546cae83575b3dd908caa0f3d", - FILENAME to "seventh-step.mp4" - ) +object Videos { + const val URL = "video:url" + const val HASH = "video:hash" + const val FILENAME = "video:name" + val VideoList = arrayOf( + hashMapOf( + URL to "https://cloud.javinator9889.com/s/j4tAXFpNmcZ7WRG/download", + HASH to "4bab6874bf8b091accaaf01b07cbc16cbba661411b4dbdb4b2a9f4c033ce8889", + FILENAME to "first-step.mp4" + ), + hashMapOf( + URL to "https://cloud.javinator9889.com/s/XRDj6LBwb92mSNc/download", + HASH to "dc42473a8150d1f258d26e22d455500dcef9ee3c13122e183d712f8b5b8ecf0d", + FILENAME to "second-step.mp4" + ), + hashMapOf( + URL to "https://cloud.javinator9889.com/s/bQNtM9LPsfLYqjy/download", + HASH to "d8c83722a72466780ba00a6df3cf5fec30f662d538041c49e5cd1f6228d9a009", + FILENAME to "third-step.mp4" + ), + hashMapOf( + URL to "https://cloud.javinator9889.com/s/3G4npX58tkqXxx9/download", + HASH to "2e1ce76a465be9a0c4de53d607d4a6285c393094e88d63673571ab9355e09825", + FILENAME to "fourth-step.mp4" + ), + hashMapOf( + URL to "https://cloud.javinator9889.com/s/D9CPyBWQ5MbEsbE/download", + HASH to "e2b8893019af37a59b7dc3f9dfdf1788d781498ed8c67fa50997d26cc3beb27b", + FILENAME to "fifth-step.mp4" + ), + hashMapOf( + URL to "https://cloud.javinator9889.com/s/NZ23LBigk5pAXqR/download", + HASH to "b8831875e52841dd9d1bb3bb575fc1759cf69f93af868c3bb9098d7483be30f9", + FILENAME to "sixth-step.mp4" + ), + hashMapOf( + URL to "https://cloud.javinator9889.com/s/zMRz6nWqi6rsNen/download", + HASH to "d414da0b1cdc818bea8028b7ac1f4e9702fcad6546cae83575b3dd908caa0f3d", + FILENAME to "seventh-step.mp4" ) - } + ) } object Email { @@ -178,11 +134,14 @@ object Firebase { } const val TRANSLATE_URL = "https://s.javinator9889.com/hwtranslate" -const val PLAYSTORE_URL = "https://play.google.com/store/apps/details?id=com.javinator9889.handwashingreminder" +const val PLAYSTORE_URL = + "https://play.google.com/store/apps/details?id=com.javinator9889.handwashingreminder" const val TELEGRAM_URL = "https://t.me/handwash" const val TWITTER_URL = "https://twitter.com/javinator9889" const val LINKEDIN_URL = "https://www.linkedin.com/in/javinator9889" const val GITHUB_URL = "https://github.com/Javinator9889/Handwashing-reminder" +const val API_URL = + "https://us-central1-handwashing.cloudfunctions.net/www-webApi" const val MODULE_COUNT = 3 const val DYNAMIC_FEATURE_INSTALL_RESULT_CODE = 32 diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/utils/LogReportTree.kt b/app/src/main/java/com/javinator9889/handwashingreminder/utils/LogReportTree.kt index f7aa96f..ca54fee 100644 --- a/app/src/main/java/com/javinator9889/handwashingreminder/utils/LogReportTree.kt +++ b/app/src/main/java/com/javinator9889/handwashingreminder/utils/LogReportTree.kt @@ -36,8 +36,11 @@ class LogReportTree : Timber.Tree() { t: Throwable? ) { when (priority) { - Log.DEBUG, Log.VERBOSE -> return - Log.WARN -> crashlytics.log("W: $tag: $message") + Log.DEBUG, Log.VERBOSE, Log.INFO -> return + Log.WARN -> { + crashlytics.log("W: $tag: $message") + t?.let { crashlytics.recordException(it) } + } Log.ERROR -> { crashlytics.log("E/$tag: $message") t?.let { crashlytics.recordException(t) } diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/utils/Time.kt b/app/src/main/java/com/javinator9889/handwashingreminder/utils/Time.kt index f49c0c6..16301a5 100644 --- a/app/src/main/java/com/javinator9889/handwashingreminder/utils/Time.kt +++ b/app/src/main/java/com/javinator9889/handwashingreminder/utils/Time.kt @@ -19,52 +19,15 @@ package com.javinator9889.handwashingreminder.utils import androidx.annotation.IntRange -import java.time.* +import java.time.LocalDateTime +import java.time.LocalTime +import java.time.ZoneId +import java.time.ZoneOffset import java.time.temporal.ChronoUnit import java.util.* -import kotlin.math.abs - fun formatTime(time: Int) = if (time < 10) "0$time" else time.toString() -fun runAt( - @IntRange(from = 0, to = 23) hour: Int, - @IntRange(from = 0, to = 59) minute: Int -): Long = - if (isAtLeast(AndroidVersion.O)) { - // trigger at hour:minute - val alarmTime = LocalTime.of(hour, minute) - var now = LocalDateTime.now().truncatedTo(ChronoUnit.MINUTES) - val nowTime = now.toLocalTime() - // check if is the same time or if today's time has passed so - // then schedule for next day - if (nowTime == alarmTime || nowTime.isAfter(alarmTime)) { - now = now.plusDays(1) - } - now = now - .withHour(alarmTime.hour) - .withMinute(alarmTime.minute) - abs(Duration.between(LocalDateTime.now(), now).toMillis()) - } else { - // get current time - val now = Calendar.getInstance() - // get again current time but truncate it to minutes and with the - // specified hour:minute provided - val alarm = Calendar.getInstance().apply { - set(Calendar.HOUR_OF_DAY, hour) - set(Calendar.MINUTE, minute) - set(Calendar.SECOND, 0) - } - val nowTime = now.time - val alarmTime = alarm.time - // check if they are the same time or if today's time has passed so - // then schedule for next day - if (nowTime == alarmTime || nowTime.after(alarmTime)) { - alarm.add(Calendar.HOUR_OF_DAY, 24) - } - abs(alarm.timeInMillis - now.timeInMillis) - } - fun timeAt( @IntRange(from = 0, to = 23) hour: Int, @IntRange(from = 0, to = 59) minute: Int diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/utils/calendar/Calendar.kt b/app/src/main/java/com/javinator9889/handwashingreminder/utils/calendar/Calendar.kt new file mode 100644 index 0000000..58f2a1d --- /dev/null +++ b/app/src/main/java/com/javinator9889/handwashingreminder/utils/calendar/Calendar.kt @@ -0,0 +1,58 @@ +/* + * Copyright © 2020 - present | Handwashing reminder by Javinator9889 + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see https://www.gnu.org/licenses/. + * + * Created by Javinator9889 on 24/06/20 - Handwashing reminder. + */ +package com.javinator9889.handwashingreminder.utils.calendar + +import java.util.* +import java.util.concurrent.TimeUnit + +object CalendarUtils { + val today: Calendar + get() = with(Calendar.getInstance()) { + this[Calendar.HOUR_OF_DAY] = 0 + this[Calendar.MINUTE] = 0 + this[Calendar.SECOND] = 0 + this[Calendar.MILLISECOND] = 0 + this + } + + val lastWeek: Calendar + get() { + val aWeekAgo = today + aWeekAgo.add(Calendar.DAY_OF_MONTH, -7) + return aWeekAgo + } + + val lastMonth: Calendar + get() { + val aMonthAgo = today + aMonthAgo.add(Calendar.MONTH, -1) + return aMonthAgo + } + + fun timeBetweenIn( + unit: TimeUnit, + to: Long, + from: Long = today.timeInMillis + ): Long = unit.convert(timeBetween(to, from), TimeUnit.MILLISECONDS) + + fun timeBetween( + to: Long, + from: Long = today.timeInMillis + ): Long = from - to +} \ No newline at end of file diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/utils/room/Converters.kt b/app/src/main/java/com/javinator9889/handwashingreminder/utils/room/Converters.kt new file mode 100644 index 0000000..1ba8dbd --- /dev/null +++ b/app/src/main/java/com/javinator9889/handwashingreminder/utils/room/Converters.kt @@ -0,0 +1,30 @@ +/* + * Copyright © 2020 - present | Handwashing reminder by Javinator9889 + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see https://www.gnu.org/licenses/. + * + * Created by Javinator9889 on 24/06/20 - Handwashing reminder. + */ +package com.javinator9889.handwashingreminder.utils.room + +import androidx.room.TypeConverter +import java.util.* + +class Converters { + @TypeConverter + fun fromTimestamp(value: Long?): Date? = value?.let { Date(it) } + + @TypeConverter + fun dateToTimestamp(date: Date?): Long? = date?.time +} \ No newline at end of file diff --git a/app/src/main/java/com/javinator9889/handwashingreminder/utils/threading/Task.kt b/app/src/main/java/com/javinator9889/handwashingreminder/utils/threading/Task.kt new file mode 100644 index 0000000..5a9cff7 --- /dev/null +++ b/app/src/main/java/com/javinator9889/handwashingreminder/utils/threading/Task.kt @@ -0,0 +1,30 @@ +/* + * Copyright © 2020 - present | Handwashing reminder by Javinator9889 + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see https://www.gnu.org/licenses/. + * + * Created by Javinator9889 on 28/06/20 - Handwashing reminder. + */ +package com.javinator9889.handwashingreminder.utils.threading + +import com.google.android.gms.tasks.Task +import kotlinx.coroutines.CompletableDeferred + +suspend inline fun Task.await(): T { + val taskDeferred = CompletableDeferred() + addOnSuccessListener { taskDeferred.complete(it) } + addOnCanceledListener { taskDeferred.cancel() } + addOnFailureListener { taskDeferred.completeExceptionally(it) } + return taskDeferred.await() +} \ No newline at end of file diff --git a/app/src/main/res/drawable/divider_shape.xml b/app/src/main/res/drawable/divider_shape.xml new file mode 100644 index 0000000..a778e11 --- /dev/null +++ b/app/src/main/res/drawable/divider_shape.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/src/main/res/drawable/ic_calendar_month.xml b/app/src/main/res/drawable/ic_calendar_month.xml new file mode 100644 index 0000000..4e887d9 --- /dev/null +++ b/app/src/main/res/drawable/ic_calendar_month.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_calendar_today.xml b/app/src/main/res/drawable/ic_calendar_today.xml new file mode 100644 index 0000000..d8c83b9 --- /dev/null +++ b/app/src/main/res/drawable/ic_calendar_today.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_calendar_week.xml b/app/src/main/res/drawable/ic_calendar_week.xml new file mode 100644 index 0000000..0d93165 --- /dev/null +++ b/app/src/main/res/drawable/ic_calendar_week.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/shadowed_divider.xml b/app/src/main/res/drawable/shadowed_divider.xml new file mode 100644 index 0000000..c7c3a90 --- /dev/null +++ b/app/src/main/res/drawable/shadowed_divider.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/diseases_list.xml b/app/src/main/res/layout/diseases_list.xml deleted file mode 100644 index 0c67738..0000000 --- a/app/src/main/res/layout/diseases_list.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/dynamic_content_pb.xml b/app/src/main/res/layout/dynamic_content_pb.xml index 27e8018..5d42059 100644 --- a/app/src/main/res/layout/dynamic_content_pb.xml +++ b/app/src/main/res/layout/dynamic_content_pb.xml @@ -33,7 +33,7 @@ app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toBottomOf="@+id/animattedView"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/loading_recycler_view.xml b/app/src/main/res/layout/loading_recycler_view.xml new file mode 100644 index 0000000..800d5f7 --- /dev/null +++ b/app/src/main/res/layout/loading_recycler_view.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/main_disease_view.xml b/app/src/main/res/layout/main_disease_view.xml new file mode 100644 index 0000000..cc32275 --- /dev/null +++ b/app/src/main/res/layout/main_disease_view.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/news_card_view.xml b/app/src/main/res/layout/news_card_view.xml new file mode 100644 index 0000000..46e81a7 --- /dev/null +++ b/app/src/main/res/layout/news_card_view.xml @@ -0,0 +1,163 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/preference_edit_text.xml b/app/src/main/res/layout/preference_edit_text.xml new file mode 100644 index 0000000..fe704d1 --- /dev/null +++ b/app/src/main/res/layout/preference_edit_text.xml @@ -0,0 +1,31 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/refreshing_layout.xml b/app/src/main/res/layout/refreshing_layout.xml new file mode 100644 index 0000000..a7d5744 --- /dev/null +++ b/app/src/main/res/layout/refreshing_layout.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/splash_screen.xml b/app/src/main/res/layout/splash_screen.xml index 91f5235..b3e14dd 100644 --- a/app/src/main/res/layout/splash_screen.xml +++ b/app/src/main/res/layout/splash_screen.xml @@ -28,6 +28,7 @@ app:lottie_loop="false" /> + + \ No newline at end of file diff --git a/app/src/main/res/raw/downloading.json b/app/src/main/res/raw/downloading.json new file mode 100644 index 0000000..2f7b54b --- /dev/null +++ b/app/src/main/res/raw/downloading.json @@ -0,0 +1 @@ +{"v":"5.4.3","fr":29.9700012207031,"ip":0,"op":70.0000028511585,"w":307,"h":389,"nm":"refresh-button","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-44,"ix":10},"p":{"a":0,"k":[154.149,195.327,0],"ix":2},"a":{"a":0,"k":[-2.021,-4,0],"ix":1},"s":{"a":0,"k":[71.946,71.946,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[217,217],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.211764705882,0.211764705882,0.211764705882,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":2,"lj":1,"ml":4,"ml2":{"a":0,"k":4,"ix":8},"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":33,"ix":1}},{"n":"o","nm":"offset","v":{"a":0,"k":0,"ix":7}}],"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[-1.5,-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":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.625],"y":[0]},"n":["0p667_1_0p625_0"],"t":26,"s":[0],"e":[100]},{"t":65.0000026475043}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[1],"y":[0]},"n":["0p667_1_1_0"],"t":7,"s":[0],"e":[100]},{"t":41.0000016699642}],"ix":2},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[-179],"e":[181]},{"t":65.0000026475043}],"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":70.0000028511585,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Shape Layer 3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-44,"ix":10},"p":{"a":0,"k":[154.149,195.327,0],"ix":2},"a":{"a":0,"k":[-2.021,-4,0],"ix":1},"s":{"a":0,"k":[71.946,71.946,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[217,217],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.31397151573,0.909803921569,0.778370337393,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":2,"lj":1,"ml":4,"ml2":{"a":0,"k":4,"ix":8},"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":33,"ix":1}},{"n":"o","nm":"offset","v":{"a":0,"k":0,"ix":7}}],"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[-1.5,-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":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.625],"y":[0]},"n":["0p667_1_0p625_0"],"t":26,"s":[0],"e":[100]},{"t":65.0000026475043}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[1],"y":[0]},"n":["0p667_1_1_0"],"t":0,"s":[0],"e":[100]},{"t":41.0000016699642}],"ix":2},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[-224],"e":[136]},{"t":65.0000026475043}],"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":70.0000028511585,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Shape Layer 4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-44,"ix":10},"p":{"a":0,"k":[154.149,195.327,0],"ix":2},"a":{"a":0,"k":[-2.021,-4,0],"ix":1},"s":{"a":0,"k":[46.072,46.072,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[217,217],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.862745098039,0.669896324008,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":2,"lj":1,"ml":4,"ml2":{"a":0,"k":4,"ix":8},"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[-1.5,-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":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[1],"y":[0]},"n":["0p667_1_1_0"],"t":0,"s":[100],"e":[0]},{"t":38.0000015477717}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.733],"y":[0.015]},"n":["0p667_1_0p733_0p015"],"t":19,"s":[100],"e":[0]},{"t":60.0000024438501}],"ix":2},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[-319],"e":[-679]},{"t":65.0000026475043}],"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":70.0000028511585,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Shape Layer 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-44,"ix":10},"p":{"a":0,"k":[154.149,195.327,0],"ix":2},"a":{"a":0,"k":[-2.021,-4,0],"ix":1},"s":{"a":0,"k":[46.072,46.072,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[217,217],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.105882352941,0.105882352941,0.105882352941,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":2,"lj":1,"ml":4,"ml2":{"a":0,"k":4,"ix":8},"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[-1.5,-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":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[1],"y":[0]},"n":["0p667_1_1_0"],"t":0,"s":[100],"e":[0]},{"t":38.0000015477717}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.733],"y":[0.015]},"n":["0p667_1_0p733_0p015"],"t":19,"s":[100],"e":[0]},{"t":60.0000024438501}],"ix":2},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[-224],"e":[-584]},{"t":65.0000026475043}],"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":70.0000028511585,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Shape Layer 5","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[4.436],"e":[-355.564]},{"t":69.0000028104276}],"ix":10},"p":{"a":0,"k":[155,194,0],"ix":2},"a":{"a":0,"k":[-1.5,-4,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[217,217],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.317031890271,0.850980392157,0.731588206572,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":1,"lj":1,"ml":4,"ml2":{"a":0,"k":4,"ix":8},"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[-1.5,-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":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":0,"k":85,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":70.0000028511585,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[4.436],"e":[-355.564]},{"t":69.0000028104276}],"ix":10},"p":{"a":0,"k":[155,194,0],"ix":2},"a":{"a":0,"k":[-1.5,-4,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[217,217],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.462745098039,0.359274142396,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":1,"lj":1,"ml":4,"ml2":{"a":0,"k":4,"ix":8},"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[-1.5,-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":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":0,"k":85,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":70.0000028511585,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"refresh-button Outlines","parent":7,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":85.093,"ix":10},"p":{"a":0,"k":[-6.619,-112.041,0],"ix":2},"a":{"a":0,"k":[188.881,115.959,0],"ix":1},"s":{"a":0,"k":[58.516,58.516,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[1.875,-1.875],[-1.875,-1.875],[0,0],[-1.274,0],[-0.898,0.903],[0,0],[1.875,1.875],[1.875,-1.875],[0,0]],"o":[[-1.875,-1.875],[-1.875,1.875],[0,0],[0.899,0.903],[1.277,0],[0,0],[1.875,-1.875],[-1.875,-1.875],[0,0],[0,0]],"v":[[-14.662,-12.188],[-21.451,-12.188],[-21.451,-5.398],[-3.393,12.656],[-0.002,14.063],[3.392,12.656],[21.451,-5.398],[21.451,-12.188],[14.662,-12.188],[-0.002,2.473]],"c":true},"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]],"o":[[0,0]],"v":[[-14.662,-12.188]],"c":false},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.003921568627,0.862745098039,0.670588235294,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[188.943,118.162],"ix":2},"a":{"a":0,"k":[0.062,2.438],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"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}],"ip":0,"op":70.0000028511585,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/app/src/main/res/raw/error_state.json b/app/src/main/res/raw/error_state.json new file mode 100644 index 0000000..08f89b7 --- /dev/null +++ b/app/src/main/res/raw/error_state.json @@ -0,0 +1 @@ +{"v":"5.2.1","fr":60,"ip":0,"op":360,"w":1080,"h":1080,"nm":"Dog swimming","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Dog swimming Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[540,516,0],"ix":2},"a":{"a":0,"k":[540,540,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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[-8.06,11.343],[-11.941,-35.223],[-16.119,-22.985],[28.488,-33.207],[17.611,8.657],[-5.075,48.953],[4.528,38.096]],"o":[[8.955,0.298],[11.939,35.222],[16.119,22.983],[-9.371,10.923],[-17.612,-8.656],[5.074,-48.954],[-3.178,-26.736]],"v":[[-39.699,-119.399],[9.852,-85.967],[47.163,-2.089],[47.163,91.937],[9.809,104.369],[-7.623,40.432],[-34.236,-72.736]],"c":true}],"e":[{"i":[[5.991,-0.491],[-11.941,-35.223],[-16.119,-22.985],[-3.121,-28.827],[-1.816,19.539],[36.665,51.678],[13.478,41.397]],"o":[[8.955,0.298],[11.939,35.222],[16.119,22.983],[4.709,43.498],[0.233,-2.509],[-8.038,-4.369],[-9.432,-28.969]],"v":[[-39.699,-119.399],[9.852,-85.967],[47.163,-2.089],[79.663,70.687],[38.559,92.869],[14.627,13.932],[-6.736,-71.236]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":180,"s":[{"i":[[5.991,-0.491],[-11.941,-35.223],[-16.119,-22.985],[-3.121,-28.827],[-1.816,19.539],[36.665,51.678],[13.478,41.397]],"o":[[8.955,0.298],[11.939,35.222],[16.119,22.983],[4.709,43.498],[0.233,-2.509],[-8.038,-4.369],[-9.432,-28.969]],"v":[[-39.699,-119.399],[9.852,-85.967],[47.163,-2.089],[79.663,70.687],[38.559,92.869],[14.627,13.932],[-6.736,-71.236]],"c":true}],"e":[{"i":[[-8.06,11.343],[-11.941,-35.223],[-16.119,-22.985],[28.488,-33.207],[17.611,8.657],[-5.075,48.953],[4.528,38.096]],"o":[[8.955,0.298],[11.939,35.222],[16.119,22.983],[-9.371,10.923],[-17.612,-8.656],[5.074,-48.954],[-3.178,-26.736]],"v":[[-39.699,-119.399],[9.852,-85.967],[47.163,-2.089],[47.163,91.937],[9.809,104.369],[-7.623,40.432],[-34.236,-72.736]],"c":true}]},{"t":359}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.552999997606,0.463000009574,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[659.708,424.639],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"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":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[-18.507,15.785],[-12.701,0],[-6.895,-8.738],[29.619,0]],"o":[[6.23,-5.313],[12.7,0],[6.895,8.738],[-29.619,0]],"v":[[-63.756,-6.071],[-23.114,-10.863],[21.519,-1.561],[-20.348,16.48]],"c":true}],"e":[{"i":[[-35.58,30.35],[-24.418,0],[-13.255,-16.801],[56.945,0]],"o":[[11.977,-10.215],[24.417,0],[13.256,16.8],[-56.945,0]],"v":[[-78.101,-17.058],[0.037,-26.271],[85.847,-8.386],[5.355,26.298]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":180,"s":[{"i":[[-35.58,30.35],[-24.418,0],[-13.255,-16.801],[56.945,0]],"o":[[11.977,-10.215],[24.417,0],[13.256,16.8],[-56.945,0]],"v":[[-78.101,-17.058],[0.037,-26.271],[85.847,-8.386],[5.355,26.298]],"c":true}],"e":[{"i":[[-18.508,15.785],[-12.701,0],[-6.895,-8.738],[29.619,0]],"o":[[6.23,-5.313],[12.7,0],[6.895,8.738],[-29.619,0]],"v":[[-63.756,-6.071],[-23.114,-10.863],[21.519,-1.561],[-20.348,16.48]],"c":true}]},{"t":359}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.6,0.677999997606,0.976000019148,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[872.896,754.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":60,"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,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[5.44,10.815]],"o":[[0,0],[0,0]],"v":[[-0.026,10.194],[-2.72,-10.195]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.992156922583,0.580392156863,0.20000001496,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":7,"ix":5},"lc":2,"lj":1,"ml":10,"ml2":{"a":0,"k":10,"ix":8},"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[660.225,621.047],"e":[735.225,602.047],"to":[12.5,-3.16666674613953],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":180,"s":[735.225,602.047],"e":[660.225,621.047],"to":[0,0],"ti":[12.5,-3.16666674613953]},{"t":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 2","np":2,"cix":2,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[5.439,10.814]],"o":[[0,0],[0,0]],"v":[[-1.759,11.392],[-2.719,-11.393]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.992156922583,0.6,0.231372563979,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":7,"ix":5},"lc":2,"lj":1,"ml":10,"ml2":{"a":0,"k":10,"ix":8},"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[623.612,624.245],"e":[701.612,604.245],"to":[13,-3.33333325386047],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":180,"s":[701.612,604.245],"e":[623.612,624.245],"to":[0,0],"ti":[13,-3.33333325386047]},{"t":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 3","np":2,"cix":2,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[0,0],[-8.523,10.648]],"o":[[0,0],[0,0]],"v":[[-10.026,18.194],[-4.22,-6.195]],"c":false}],"e":[{"i":[[0,0],[5.439,10.815]],"o":[[0,0],[0,0]],"v":[[-0.026,10.194],[-2.72,-10.195]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":180,"s":[{"i":[[0,0],[5.439,10.815]],"o":[[0,0],[0,0]],"v":[[-0.026,10.194],[-2.72,-10.195]],"c":false}],"e":[{"i":[[0,0],[-8.523,10.648]],"o":[[0,0],[0,0]],"v":[[-10.026,18.194],[-4.22,-6.195]],"c":false}]},{"t":359}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.992156922817,0.580392181873,0.200000017881,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":7,"ix":5},"lc":2,"lj":1,"ml":10,"ml2":{"a":0,"k":10,"ix":8},"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[457.742,613.547],"e":[515.242,603.047],"to":[9.58333301544189,-1.75],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":180,"s":[515.242,603.047],"e":[457.742,613.547],"to":[0,0],"ti":[9.58333301544189,-1.75]},{"t":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 4","np":2,"cix":2,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[0,0],[-7.409,10.147]],"o":[[0,0],[0,0]],"v":[[-69.76,13.392],[-65.72,-8.893]],"c":false}],"e":[{"i":[[0,0],[5.44,10.814]],"o":[[0,0],[0,0]],"v":[[-1.76,11.392],[-2.72,-11.393]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":180,"s":[{"i":[[0,0],[5.44,10.814]],"o":[[0,0],[0,0]],"v":[[-1.76,11.392],[-2.72,-11.393]],"c":false}],"e":[{"i":[[0,0],[-7.409,10.147]],"o":[[0,0],[0,0]],"v":[[-69.76,13.392],[-65.72,-8.893]],"c":false}]},{"t":359}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.992156922817,0.580392181873,0.200000017881,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":7,"ix":5},"lc":2,"lj":1,"ml":10,"ml2":{"a":0,"k":10,"ix":8},"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[481.629,604.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 5","np":2,"cix":2,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[0,0],[2.194,-16.08]],"o":[[0,0],[0,0]],"v":[[-101.191,1.64],[-102.597,32.36]],"c":false}],"e":[{"i":[[0,0],[2.194,-16.08]],"o":[[0,0],[0,0]],"v":[[0.309,-15.36],[-1.097,15.36]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":180,"s":[{"i":[[0,0],[2.194,-16.08]],"o":[[0,0],[0,0]],"v":[[0.309,-15.36],[-1.097,15.36]],"c":false}],"e":[{"i":[[0,0],[2.194,-16.08]],"o":[[0,0],[0,0]],"v":[[-101.191,1.64],[-102.597,32.36]],"c":false}]},{"t":359}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.109999997008,0.19199999641,0.46699999641,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":7,"ix":5},"lc":2,"lj":1,"ml":10,"ml2":{"a":0,"k":10,"ix":8},"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[627.113,496.521],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"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":2,"cix":2,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[-2.399,14.16],[-3.32,-7.2],[10.559,0]],"o":[[0.916,-5.401],[3.321,7.2],[-10.561,0]],"v":[[-121.101,-5.74],[-78.821,-5.74],[-96.38,19.94]],"c":true}],"e":[{"i":[[-2.399,14.16],[-3.32,-7.2],[10.559,0]],"o":[[0.916,-5.401],[3.321,7.2],[-10.561,0]],"v":[[-21.601,-9.24],[20.679,-9.24],[3.12,16.44]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":180,"s":[{"i":[[-2.399,14.16],[-3.32,-7.2],[10.559,0]],"o":[[0.916,-5.401],[3.321,7.2],[-10.561,0]],"v":[[-21.601,-9.24],[20.679,-9.24],[3.12,16.44]],"c":true}],"e":[{"i":[[-2.399,14.16],[-3.32,-7.2],[10.559,0]],"o":[[0.916,-5.401],[3.321,7.2],[-10.561,0]],"v":[[-121.101,-5.74],[-78.821,-5.74],[-96.38,19.94]],"c":true}]},{"t":359}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.109999997008,0.19199999641,0.46699999641,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[623.29,480.081],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"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":2,"cix":2,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[0.603,4.731],[5.963,2.379],[1.536,-7.998],[-5.111,0.295]],"o":[[-0.549,-4.31],[-5.962,-2.379],[-1.537,7.999],[5.111,-0.295]],"v":[[-44.114,3.099],[-61.539,-5.873],[-76.655,0.409],[-58.093,10.788]],"c":true}],"e":[{"i":[[-0.429,4.75],[5.311,3.607],[3.221,-7.48],[-5.055,-0.812]],"o":[[0.391,-4.327],[-5.31,-3.606],[-3.222,7.481],[5.055,0.812]],"v":[[17.016,5.899],[1.93,-6.612],[-14.184,-3.732],[1.709,10.399]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":180,"s":[{"i":[[-0.429,4.75],[5.311,3.607],[3.221,-7.48],[-5.055,-0.812]],"o":[[0.391,-4.327],[-5.31,-3.606],[-3.222,7.481],[5.055,0.812]],"v":[[17.016,5.899],[1.93,-6.612],[-14.184,-3.732],[1.709,10.399]],"c":true}],"e":[{"i":[[0.603,4.731],[5.963,2.379],[1.536,-7.998],[-5.111,0.295]],"o":[[-0.549,-4.31],[-5.962,-2.379],[-1.537,7.999],[5.111,-0.295]],"v":[[-44.114,3.099],[-61.539,-5.873],[-76.655,0.409],[-58.093,10.788]],"c":true}]},{"t":359}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.552999997606,0.463000009574,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":180,"s":[639.903,387.207],"e":[640.403,398.707],"to":[0.08333333581686,1.91666662693024],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":190,"s":[640.403,398.707],"e":[639.903,387.207],"to":[0,0],"ti":[0.08333333581686,1.91666662693024]},{"t":200}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"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":2,"cix":2,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[-0.898,5.186],[-7.112,1.874],[-1.489,-9.099],[6.003,0.992]],"o":[[0.818,-4.724],[7.112,-1.874],[1.489,9.1],[-6.005,-0.992]],"v":[[-86.955,3.485],[-66.089,-4.233],[-48.546,4.721],[-70.807,13.858]],"c":true}],"e":[{"i":[[1.06,5.155],[-5.935,4.344],[-4.713,-7.924],[5.95,-1.273]],"o":[[-0.966,-4.696],[5.934,-4.345],[4.714,7.925],[-5.952,1.273]],"v":[[-19.974,7.833],[-3.376,-6.981],[16.226,-5.064],[-1.151,11.582]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":180,"s":[{"i":[[1.06,5.155],[-5.935,4.344],[-4.713,-7.924],[5.95,-1.273]],"o":[[-0.966,-4.696],[5.934,-4.345],[4.714,7.925],[-5.952,1.273]],"v":[[-19.974,7.833],[-3.376,-6.981],[16.226,-5.064],[-1.151,11.582]],"c":true}],"e":[{"i":[[-0.898,5.186],[-7.112,1.874],[-1.489,-9.099],[6.003,0.992]],"o":[[0.818,-4.724],[7.112,-1.874],[1.489,9.1],[-6.005,-0.992]],"v":[[-86.955,3.485],[-66.089,-4.233],[-48.546,4.721],[-70.807,13.858]],"c":true}]},{"t":359}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.552999997606,0.463000009574,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":180,"s":[538.372,387.533],"e":[538.372,401.033],"to":[0,2.25],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":190,"s":[538.372,401.033],"e":[538.372,387.533],"to":[0,0],"ti":[0,2.25]},{"t":200}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"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":2,"cix":2,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[0,-7.158],[7.158,0],[0,7.158],[-7.157,0]],"o":[[0,7.158],[-7.157,0],[0,-7.158],[7.158,0]],"v":[[-59.54,-3],[-72.5,9.96],[-85.46,-3],[-72.5,-15.96]],"c":true}],"e":[{"i":[[0,-7.158],[7.158,0],[0,7.158],[-7.157,0]],"o":[[0,7.158],[-7.157,0],[0,-7.158],[7.158,0]],"v":[[12.96,0],[0,12.96],[-12.96,0],[0,-12.96]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":180,"s":[{"i":[[0,-7.158],[7.158,0],[0,7.158],[-7.157,0]],"o":[[0,7.158],[-7.157,0],[0,-7.158],[7.158,0]],"v":[[12.96,0],[0,12.96],[-12.96,0],[0,-12.96]],"c":true}],"e":[{"i":[[0,-7.158],[7.158,0],[0,7.158],[-7.157,0]],"o":[[0,7.158],[-7.157,0],[0,-7.158],[7.158,0]],"v":[[-59.54,-3],[-72.5,9.96],[-85.46,-3],[-72.5,-15.96]],"c":true}]},{"t":359}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.109999997008,0.19199999641,0.46699999641,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[643.97,428.281],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":180,"s":[100,100],"e":[100,0]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":190,"s":[100,0],"e":[100,100]},{"t":200}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"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":2,"cix":2,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[0,-7.158],[7.158,0],[0,7.158],[-7.157,0]],"o":[[0,7.158],[-7.157,0],[0,-7.158],[7.158,0]],"v":[[-51.54,-3.5],[-64.5,9.46],[-77.46,-3.5],[-64.5,-16.46]],"c":true}],"e":[{"i":[[0,-7.158],[7.158,0],[0,7.158],[-7.157,0]],"o":[[0,7.158],[-7.157,0],[0,-7.158],[7.158,0]],"v":[[12.96,0],[0,12.96],[-12.96,0],[0,-12.96]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":180,"s":[{"i":[[0,-7.158],[7.158,0],[0,7.158],[-7.157,0]],"o":[[0,7.158],[-7.157,0],[0,-7.158],[7.158,0]],"v":[[12.96,0],[0,12.96],[-12.96,0],[0,-12.96]],"c":true}],"e":[{"i":[[0,-7.158],[7.158,0],[0,7.158],[-7.157,0]],"o":[[0,7.158],[-7.157,0],[0,-7.158],[7.158,0]],"v":[[-51.54,-3.5],[-64.5,9.46],[-77.46,-3.5],[-64.5,-16.46]],"c":true}]},{"t":359}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.109999997008,0.19199999641,0.46699999641,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[538.689,427.781],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":180,"s":[100,100],"e":[100,0]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":190,"s":[100,0],"e":[100,100]},{"t":200}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"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":2,"cix":2,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[-11.81,22.259],[12.801,-37.76],[14.09,-26.593],[-18.19,-34.801],[-18.911,9.216],[-36.25,82.919],[1.92,28.8]],"o":[[-9.6,0.32],[-12.8,37.76],[-16.69,31.499],[8.201,15.69],[27.089,-13.201],[14.535,-33.249],[-1.919,-28.8]],"v":[[42.56,-128],[4.94,-76.66],[-15.06,-2.24],[-29.06,98.56],[9.161,111.46],[31,16.84],[37,-72.44]],"c":true}],"e":[{"i":[[8.641,12.16],[12.801,-37.76],[17.28,-24.64],[-34.88,-31.36],[-18.88,9.28],[5.44,52.48],[1.92,28.8]],"o":[[-9.6,0.32],[-12.8,37.76],[-17.279,24.64],[34.881,31.36],[18.879,-9.28],[-5.44,-52.48],[-1.919,-28.8]],"v":[[42.56,-128],[-10.56,-92.16],[-50.56,-2.24],[-50.56,98.56],[44.161,112.96],[80,35.84],[56,-77.44]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":180,"s":[{"i":[[8.641,12.16],[12.801,-37.76],[17.28,-24.64],[-34.88,-31.36],[-18.88,9.28],[5.44,52.48],[1.92,28.8]],"o":[[-9.6,0.32],[-12.8,37.76],[-17.279,24.64],[34.881,31.36],[18.879,-9.28],[-5.44,-52.48],[-1.919,-28.8]],"v":[[42.56,-128],[-10.56,-92.16],[-50.56,-2.24],[-50.56,98.56],[44.161,112.96],[80,35.84],[56,-77.44]],"c":true}],"e":[{"i":[[-11.81,22.259],[12.801,-37.76],[14.09,-26.593],[-18.19,-34.801],[-18.911,9.216],[-36.25,82.919],[1.92,28.8]],"o":[[-9.6,0.32],[-12.8,37.76],[-16.69,31.499],[8.201,15.69],[27.089,-13.201],[14.535,-33.249],[-1.919,-28.8]],"v":[[42.56,-128],[4.94,-76.66],[-15.06,-2.24],[-29.06,98.56],[9.161,111.46],[31,16.84],[37,-72.44]],"c":true}]},{"t":359}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.552999997606,0.463000009574,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[398.25,433.241],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"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":2,"cix":2,"ix":13,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[-44.209,1.799],[-17.28,-23.52],[-21.45,-57.281],[-1.39,-13.853],[59.37,-8.121],[6.971,4.199],[43.044,16.239],[-9.269,19.759],[-21.515,28.482]],"o":[[46.707,-1.901],[17.281,23.52],[6.024,16.085],[6.05,60.279],[-29.418,4.024],[-15.529,1.199],[-49.729,-18.761],[19.22,-40.97],[35.723,-9.784]],"v":[[-28.268,-140.65],[61.177,-106.789],[103.698,-23.609],[121.698,37.831],[33.378,141.23],[-35.223,129.91],[-121.023,137.62],[-135.483,28.85],[-123.443,-116.65]],"c":true}],"e":[{"i":[[-44.209,1.799],[-17.28,-23.52],[-2.16,-17.04],[-8.16,-11.28],[16.08,-24.96],[27.84,13.68],[45.36,7.68],[11.054,77.374],[-21.515,28.482]],"o":[[46.707,-1.901],[17.281,23.52],[2.16,17.04],[8.749,12.095],[-16.081,24.96],[-28.08,11.04],[-45.359,-7.68],[-6.399,-44.8],[35.723,-9.784]],"v":[[-28.268,-140.65],[73.677,-101.289],[103.198,-3.609],[121.198,33.831],[128.878,108.23],[58.777,125.91],[-38.523,134.87],[-138.483,11.35],[-123.443,-116.65]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":180,"s":[{"i":[[-44.209,1.799],[-17.28,-23.52],[-2.16,-17.04],[-8.16,-11.28],[16.08,-24.96],[27.84,13.68],[45.36,7.68],[11.054,77.374],[-21.515,28.482]],"o":[[46.707,-1.901],[17.281,23.52],[2.16,17.04],[8.749,12.095],[-16.081,24.96],[-28.08,11.04],[-45.359,-7.68],[-6.399,-44.8],[35.723,-9.784]],"v":[[-28.268,-140.65],[73.677,-101.289],[103.198,-3.609],[121.198,33.831],[128.878,108.23],[58.777,125.91],[-38.523,134.87],[-138.483,11.35],[-123.443,-116.65]],"c":true}],"e":[{"i":[[-44.209,1.799],[-17.28,-23.52],[-21.45,-57.281],[-1.39,-13.853],[59.37,-8.121],[6.971,4.199],[43.044,16.239],[-9.269,19.759],[-21.515,28.482]],"o":[[46.707,-1.901],[17.281,23.52],[6.024,16.085],[6.05,60.279],[-29.418,4.024],[-15.529,1.199],[-49.729,-18.761],[19.22,-40.97],[35.723,-9.784]],"v":[[-28.268,-140.65],[61.177,-106.789],[103.698,-23.609],[121.698,37.831],[33.378,141.23],[-35.223,129.91],[-121.023,137.62],[-135.483,28.85],[-123.443,-116.65]],"c":true}]},{"t":359}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.995999983245,0.760999971278,0.447000002394,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[564.252,421.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 13","np":2,"cix":2,"ix":14,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[0,0],[-61.7,32.678],[0,0]],"o":[[0,0],[-24.913,-44.001],[0,0]],"v":[[-61.944,3.971],[-1.556,21.48],[-34.147,-23.348]],"c":true}],"e":[{"i":[[0,0],[-61.7,32.678],[0,0]],"o":[[0,0],[-24.913,-44.001],[0,0]],"v":[[-71.488,-15.773],[8.894,20.108],[-48.691,-62.092]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":38,"s":[{"i":[[0,0],[-61.7,32.678],[0,0]],"o":[[0,0],[-24.913,-44.001],[0,0]],"v":[[-71.488,-15.773],[8.894,20.108],[-48.691,-62.092]],"c":true}],"e":[{"i":[[0,0],[-61.7,32.678],[0,0]],"o":[[0,0],[-24.913,-44.001],[0,0]],"v":[[-47.944,-9.029],[47.944,14.98],[-20.147,-36.348]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":180,"s":[{"i":[[0,0],[-61.7,32.678],[0,0]],"o":[[0,0],[-24.913,-44.001],[0,0]],"v":[[-47.944,-9.029],[47.944,14.98],[-20.147,-36.348]],"c":true}],"e":[{"i":[[0,0],[-61.7,32.678],[0,0]],"o":[[0,0],[-24.913,-44.001],[0,0]],"v":[[-61.944,3.971],[-1.556,21.48],[-34.147,-23.348]],"c":true}]},{"t":359}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.996078491211,0.678431372549,0.337254901961,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[489.267,540.931],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"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":2,"cix":2,"ix":15,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[0,0],[12.086,-16.079],[-11.965,-11.502],[-20.626,2.179],[5.38,41.823],[0,0]],"o":[[0,0],[-8.157,10.853],[11.965,11.502],[11.845,-1.251],[1.38,-22.677],[0,0]],"v":[[-57.6,-20],[-79.775,7.038],[-80.107,45.994],[-13.535,68.21],[3.93,17.636],[-0.32,-18.74]],"c":true}],"e":[{"i":[[0,0],[9.129,-15.522],[-12.749,-10.222],[-18.974,5.164],[9.108,37.182],[0,0]],"o":[[0,0],[-6.03,11.399],[12.749,10.223],[12.047,-4.432],[-5.465,-23.7],[0,0]],"v":[[-63.6,-66],[-71.581,7.68],[-68.465,45.91],[-1.22,61.816],[8.573,8.745],[-10.264,-55.234]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":38,"s":[{"i":[[0,0],[9.129,-15.522],[-12.749,-10.222],[-18.974,5.164],[9.108,37.182],[0,0]],"o":[[0,0],[-6.03,11.399],[12.749,10.223],[12.047,-4.432],[-5.465,-23.7],[0,0]],"v":[[-63.6,-66],[-71.581,7.68],[-68.465,45.91],[-1.22,61.816],[8.573,8.745],[-10.264,-55.234]],"c":true}],"e":[{"i":[[0,0],[-1.92,-13.44],[-15.68,-5.44],[-12.8,16.32],[23.039,19.839],[0,0]],"o":[[0,0],[1.92,13.44],[15.68,5.44],[12.8,-16.32],[-31.041,-27.52],[0,0]],"v":[[-57.6,-20],[-40.96,10.08],[-24.96,45.6],[44.8,37.92],[25.921,-24.48],[-40.32,-54.24]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":180,"s":[{"i":[[0,0],[-1.92,-13.44],[-15.68,-5.44],[-12.8,16.32],[23.039,19.839],[0,0]],"o":[[0,0],[1.92,13.44],[15.68,5.44],[12.8,-16.32],[-31.041,-27.52],[0,0]],"v":[[-57.6,-20],[-40.96,10.08],[-24.96,45.6],[44.8,37.92],[25.921,-24.48],[-40.32,-54.24]],"c":true}],"e":[{"i":[[0,0],[12.086,-16.079],[-11.965,-11.502],[-20.626,2.179],[5.38,41.823],[0,0]],"o":[[0,0],[-8.157,10.853],[11.965,11.502],[11.845,-1.251],[1.38,-22.677],[0,0]],"v":[[-57.6,-20],[-79.775,7.038],[-80.107,45.994],[-13.535,68.21],[3.93,17.636],[-0.32,-18.74]],"c":true}]},{"t":359}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.995999983245,0.760999971278,0.447000002394,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[483.69,570.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 16","np":2,"cix":2,"ix":16,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[0,0],[12.819,24.122],[6.525,8.762],[0,0],[-0.759,-6.557]],"o":[[0,0],[-7.046,-13.258],[-50.502,2.503],[0,0],[0.82,7.085]],"v":[[-80.019,35.909],[-0.49,19.04],[-24.311,-13.48],[-81.671,11.35],[-79.856,24.697]],"c":true}],"e":[{"i":[[0,0],[12.819,24.122],[6.525,8.762],[0,0],[-0.759,-6.557]],"o":[[0,0],[-7.046,-13.258],[-50.502,2.503],[0,0],[0.82,7.085]],"v":[[-49.17,32.086],[31.212,15.583],[-8.157,-23.448],[-50.517,6.187],[-48.763,20.631]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":84,"s":[{"i":[[0,0],[12.819,24.122],[6.525,8.762],[0,0],[-0.759,-6.557]],"o":[[0,0],[-7.046,-13.258],[-50.502,2.503],[0,0],[0.82,7.085]],"v":[[-49.17,32.086],[31.212,15.583],[-8.157,-23.448],[-50.517,6.187],[-48.763,20.631]],"c":true}],"e":[{"i":[[0,0],[12.819,24.122],[13.172,6.655],[0,0],[-0.759,-6.557]],"o":[[0,0],[-7.046,-13.258],[-50.502,2.503],[0,0],[0.82,7.085]],"v":[[-13.767,28.38],[67.443,11.731],[7.792,-31.623],[-29.817,0.682],[-18.624,16.689]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":180,"s":[{"i":[[0,0],[12.819,24.122],[13.172,6.655],[0,0],[-0.759,-6.557]],"o":[[0,0],[-7.046,-13.258],[-50.502,2.503],[0,0],[0.82,7.085]],"v":[[-13.767,28.38],[67.443,11.731],[7.792,-31.623],[-29.817,0.682],[-18.624,16.689]],"c":true}],"e":[{"i":[[0,0],[12.819,24.122],[6.525,8.762],[0,0],[-0.759,-6.557]],"o":[[0,0],[-7.046,-13.258],[-50.502,2.503],[0,0],[0.82,7.085]],"v":[[-49.17,32.086],[31.212,15.583],[-8.157,-23.448],[-50.517,6.187],[-48.763,20.631]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":272,"s":[{"i":[[0,0],[12.819,24.122],[6.525,8.762],[0,0],[-0.759,-6.557]],"o":[[0,0],[-7.046,-13.258],[-50.502,2.503],[0,0],[0.82,7.085]],"v":[[-49.17,32.086],[31.212,15.583],[-8.157,-23.448],[-50.517,6.187],[-48.763,20.631]],"c":true}],"e":[{"i":[[0,0],[12.819,24.122],[6.525,8.762],[0,0],[-0.759,-6.557]],"o":[[0,0],[-7.046,-13.258],[-50.502,2.503],[0,0],[0.82,7.085]],"v":[[-80.019,35.909],[-0.49,19.04],[-24.311,-13.48],[-81.671,11.35],[-79.856,24.697]],"c":true}]},{"t":359}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.996078491211,0.678431372549,0.337254901961,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[676.036,548.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 17","np":2,"cix":2,"ix":17,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[0,0],[10.787,-21.621],[-15.68,-5.44],[-12.799,16.32],[12.407,32.439],[0,0]],"o":[[0,0],[-6.061,12.148],[15.679,5.44],[12.8,-16.32],[-19.093,-41.561],[0,0]],"v":[[-57.6,-20],[-61.959,27.08],[-45.959,62.6],[23.8,54.92],[28.921,-1.48],[-16.32,-59.24]],"c":true}],"e":[{"i":[[0,0],[-1.92,-13.44],[-15.68,-5.44],[-12.799,16.32],[23.04,19.839],[0,0]],"o":[[0,0],[1.92,13.44],[15.679,5.44],[12.8,-16.32],[-31.041,-27.52],[0,0]],"v":[[-57.6,-20],[-40.959,10.08],[-24.959,45.6],[44.8,37.92],[25.921,-24.48],[-40.32,-54.24]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":180,"s":[{"i":[[0,0],[-1.92,-13.44],[-15.68,-5.44],[-12.799,16.32],[23.04,19.839],[0,0]],"o":[[0,0],[1.92,13.44],[15.679,5.44],[12.8,-16.32],[-31.041,-27.52],[0,0]],"v":[[-57.6,-20],[-40.959,10.08],[-24.959,45.6],[44.8,37.92],[25.921,-24.48],[-40.32,-54.24]],"c":true}],"e":[{"i":[[0,0],[10.787,-21.621],[-15.68,-5.44],[-12.799,16.32],[12.407,32.439],[0,0]],"o":[[0,0],[-6.061,12.148],[15.679,5.44],[12.8,-16.32],[-19.093,-41.561],[0,0]],"v":[[-57.6,-20],[-61.959,27.08],[-45.959,62.6],[23.8,54.92],[28.921,-1.48],[-16.32,-59.24]],"c":true}]},{"t":359}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.995999983245,0.760999971278,0.447000002394,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[651.672,580.041],"e":[703.672,570.041],"to":[8.66666698455811,-1.66666662693024],"ti":[0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":180,"s":[703.672,570.041],"e":[651.672,580.041],"to":[0,0],"ti":[8.66666698455811,-1.66666662693024]},{"t":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 18","np":2,"cix":2,"ix":18,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-38.631],[150.325,0],[0,38.63],[-150.325,0]],"o":[[0,38.63],[-150.325,0],[0,-38.631],[150.325,0]],"v":[[228.96,0],[-2.087,69.947],[-228.96,0],[-2.087,-69.947]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.886274569642,0.792156922583,0.925490255917,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[544.33,539.614],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":70,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 19","np":2,"cix":2,"ix":19,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p667_1_0p167_0p167","t":0,"s":[{"i":[[0,0],[8.637,-160.553],[0,0],[-64.287,88.691],[-23.216,-2.405],[-74.974,-110.169],[3.114,11.391],[72.038,22.96],[0,0],[0,0],[21.175,-3.413],[0,0]],"o":[[0,0],[86.979,67.305],[0,0],[25.386,0.821],[98.964,10.251],[38.02,-41.759],[-12.841,-21.255],[-52.56,-12.96],[0,0],[0,0],[-16.918,7.478],[0,0]],"v":[[-131.05,-94.547],[-295.654,109.668],[-98.734,173.487],[-44.479,-83.844],[58.779,-85.268],[282.997,72.442],[300.23,-32.745],[191.787,-112.796],[102.622,-143.052],[-215.112,-122.818],[-243.595,-113.668],[-260.797,-107.167]],"c":true}],"e":[{"i":[[0,0],[8.637,-160.553],[0,0],[-64.287,88.691],[-20.53,-0.521],[-74.835,-109.965],[3.114,11.391],[72.038,22.96],[0,0],[0,0],[17.24,-6.036],[0,0]],"o":[[0,0],[91.888,44.724],[0,0],[25.586,0.827],[86.669,2.198],[5.129,-19.177],[-12.841,-21.255],[-52.559,-12.96],[0,0],[0,0],[-20.237,8.642],[0,0]],"v":[[-131.05,-94.547],[-212.69,152.868],[55.903,165.633],[26.212,-104.462],[94.965,-103.048],[305.579,19.424],[300.23,-32.745],[191.787,-112.796],[102.622,-143.052],[-232.058,-116.778],[-271.401,-100.686],[-301.84,-85.542]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"n":"0p833_0p833_0p333_0","t":180,"s":[{"i":[[0,0],[8.637,-160.553],[0,0],[-64.287,88.691],[-20.53,-0.521],[-74.835,-109.965],[3.114,11.391],[72.038,22.96],[0,0],[0,0],[17.24,-6.036],[0,0]],"o":[[0,0],[91.888,44.724],[0,0],[25.586,0.827],[86.669,2.198],[5.129,-19.177],[-12.841,-21.255],[-52.559,-12.96],[0,0],[0,0],[-20.237,8.642],[0,0]],"v":[[-131.05,-94.547],[-212.69,152.868],[55.903,165.633],[26.212,-104.462],[94.965,-103.048],[305.579,19.424],[300.23,-32.745],[191.787,-112.796],[102.622,-143.052],[-232.058,-116.778],[-271.401,-100.686],[-301.84,-85.542]],"c":true}],"e":[{"i":[[0,0],[8.637,-160.553],[0,0],[-64.287,88.691],[-23.216,-2.405],[-74.974,-110.169],[3.114,11.391],[72.038,22.96],[0,0],[0,0],[21.175,-3.413],[0,0]],"o":[[0,0],[86.979,67.305],[0,0],[25.386,0.821],[98.964,10.251],[38.02,-41.759],[-12.841,-21.255],[-52.56,-12.96],[0,0],[0,0],[-16.918,7.478],[0,0]],"v":[[-131.05,-94.547],[-295.654,109.668],[-98.734,173.487],[-44.479,-83.844],[58.779,-85.268],[282.997,72.442],[300.23,-32.745],[191.787,-112.796],[102.622,-143.052],[-215.112,-122.818],[-243.595,-113.668],[-260.797,-107.167]],"c":true}]},{"t":359}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.960784373564,0.831372608858,0.925490255917,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[570.474,595.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 20","np":2,"cix":2,"ix":20,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-78.933],[265.27,-18.473],[0,78.933],[-218.692,0]],"o":[[0,78.933],[-218.164,15.193],[0,-78.933],[218.692,0]],"v":[[333.09,0],[-4.508,170.902],[-333.089,0],[-3.035,-142.92]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.941000007181,0.964999988032,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[544.329,597.681],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"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":2,"cix":2,"ix":21,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[0,0],[67.975,-10.303],[-17.942,-26.69],[-29.782,-25.833],[22,-45.116],[-84.02,-12.631],[-185.573,-11.427],[-55.1,88.31],[97.238,38.459]],"o":[[0,0],[-41.762,6.33],[11.837,17.608],[29.782,25.832],[-12.356,25.339],[90.091,13.544],[82.174,5.06],[28.285,-45.333],[-151.821,-30.93]],"v":[[-154.897,-113.926],[-238.614,-107.75],[-297.989,-55.035],[-223.645,-4.175],[-275.76,80.579],[-166.787,140.15],[114.122,120.731],[328.584,127.573],[175.078,-9.212]],"c":true}],"e":[{"i":[[0,0],[67.975,-10.303],[-3.782,-31.937],[-29.782,-25.833],[28.065,-41.615],[-131.167,-8.582],[-185.573,-11.427],[-186.663,33.328],[97.238,38.459]],"o":[[0,0],[-41.762,6.33],[5.54,46.783],[29.782,25.832],[-28.065,41.616],[90.909,5.948],[82.174,5.06],[129.755,-23.167],[-151.821,-30.93]],"v":[[-154.897,-113.926],[-287.705,-119.531],[-380.461,-72.708],[-249.172,-0.248],[-340.56,92.361],[-211.95,199.059],[127.868,173.75],[452.293,239.5],[247.733,6.497]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":180,"s":[{"i":[[0,0],[67.975,-10.303],[-3.782,-31.937],[-29.782,-25.833],[28.065,-41.615],[-131.167,-8.582],[-185.573,-11.427],[-186.663,33.328],[97.238,38.459]],"o":[[0,0],[-41.762,6.33],[5.54,46.783],[29.782,25.832],[-28.065,41.616],[90.909,5.948],[82.174,5.06],[129.755,-23.167],[-151.821,-30.93]],"v":[[-154.897,-113.926],[-287.705,-119.531],[-380.461,-72.708],[-249.172,-0.248],[-340.56,92.361],[-211.95,199.059],[127.868,173.75],[452.293,239.5],[247.733,6.497]],"c":true}],"e":[{"i":[[0,0],[67.975,-10.303],[-17.942,-26.69],[-29.782,-25.833],[22,-45.116],[-84.02,-12.631],[-185.573,-11.427],[-55.1,88.31],[97.238,38.459]],"o":[[0,0],[-41.762,6.33],[11.837,17.608],[29.782,25.832],[-12.356,25.339],[90.091,13.544],[82.174,5.06],[28.285,-45.333],[-151.821,-30.93]],"v":[[-154.897,-113.926],[-238.614,-107.75],[-297.989,-55.035],[-223.645,-4.175],[-275.76,80.579],[-166.787,140.15],[114.122,120.731],[328.584,127.572],[175.078,-9.212]],"c":true}]},{"t":359}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.6,0.677999997606,0.976000019148,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[417.716,703.099],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"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":2,"cix":2,"ix":22,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[0,0],[-17.076,-2.883],[19.016,-22.102],[79.816,0]],"o":[[0,0],[17.075,2.883],[-19.016,22.102],[13.671,-43.836]],"v":[[-31.792,-43.208],[32.631,-39.312],[52.422,6.67],[-74.569,26.194]],"c":true}],"e":[{"i":[[0,0],[-31.68,-5.349],[35.281,-41.005],[148.079,0]],"o":[[0,0],[31.679,5.349],[-35.28,41.006],[25.363,-81.327]],"v":[[-56.079,-66.772],[63.442,-59.544],[100.161,25.766],[-135.442,61.987]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":180,"s":[{"i":[[0,0],[-31.68,-5.349],[35.281,-41.005],[148.079,0]],"o":[[0,0],[31.679,5.349],[-35.28,41.006],[25.363,-81.327]],"v":[[-56.079,-66.772],[63.442,-59.544],[100.161,25.766],[-135.442,61.987]],"c":true}],"e":[{"i":[[0,0],[-17.076,-2.883],[19.016,-22.102],[79.816,0]],"o":[[0,0],[17.075,2.883],[-19.016,22.102],[13.671,-43.836]],"v":[[-31.792,-43.208],[32.631,-39.312],[52.422,6.67],[-74.569,26.194]],"c":true}]},{"t":359}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.6,0.677999997606,0.976000019148,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[889.848,627.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 23","np":2,"cix":2,"ix":23,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[-16.14,13.767],[-11.077,0],[-6.013,-7.621],[25.832,0]],"o":[[5.433,-4.634],[11.076,0],[6.013,7.621],[-25.832,0]],"v":[[-77.904,-12.821],[-42.459,-17],[-3.533,-8.888],[-40.046,6.846]],"c":true}],"e":[{"i":[[-35.58,30.349],[-24.418,0],[-13.255,-16.8],[56.945,0]],"o":[[11.977,-10.216],[24.417,0],[13.256,16.8],[-56.945,0]],"v":[[-78.101,-17.057],[0.037,-26.27],[85.847,-8.386],[5.355,26.298]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":180,"s":[{"i":[[-35.58,30.349],[-24.418,0],[-13.255,-16.8],[56.945,0]],"o":[[11.977,-10.216],[24.417,0],[13.256,16.8],[-56.945,0]],"v":[[-78.101,-17.057],[0.037,-26.27],[85.847,-8.386],[5.355,26.298]],"c":true}],"e":[{"i":[[-16.14,13.767],[-11.077,0],[-6.013,-7.621],[25.832,0]],"o":[[5.433,-4.634],[11.076,0],[6.013,7.621],[-25.832,0]],"v":[[-77.904,-12.821],[-42.459,-17],[-3.533,-8.888],[-40.046,6.846]],"c":true}]},{"t":359}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.6,0.677999997606,0.976000019148,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[239.047,528.05],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":60,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 24","np":2,"cix":2,"ix":24,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":368,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/app/src/main/res/raw/leaves.json b/app/src/main/res/raw/leaves.json new file mode 100644 index 0000000..49b5ab4 --- /dev/null +++ b/app/src/main/res/raw/leaves.json @@ -0,0 +1 @@ +{"v":"5.6.10","fr":30,"ip":0,"op":105,"w":512,"h":512,"nm":"tree-1781554","ddd":0,"assets":[{"id":"image_0","w":952,"h":954,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_1","w":58,"h":106,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADoAAABqCAMAAADa67LtAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAACXBIWXMAAAABAAAAAQBPJcTWAAAA+VBMVEVHcEzI6jvW6joe6tNO7o0U7+RH9VnJ6ztE8os7pP9J9Fw0sPov+I1Y80OV7jwa9c0Z5uk39ncf+7MY+sY2qv1+7zwg+q8m+aPa6jrF6zsj+qk79m9L9E4c+7sQ+9gz94GE7zwkz/Fh8kUoyPMox/Oe7Twc4eoN+uM59nFO80FH9FAS8+UN/OIQ9uQU7ucb4esX6OkM/eIe2+0Q/NkS/NIW+8kj0fAZ+8Ed+7gg+rAox/Mk+ad/7z0n+Z957z1y8D4r+Jcu+I6G7j1l8T5r8T4tvfYx94aM7jw1935e8j5Y8j+T7Tw/9WVC9Vwzsfqd7Tyr7Dy56zs5pf5yJmjnAAAAJ3RSTlMAQP4vIGNa/hBANIF5nV1zordVgsLc1ECArqeX17zQ26raelC84ECyq+TNAAADUElEQVRYw63YZ1fbMBQGYKVRjDCxTwaJCQlZBcpqAyU0UOiktIVC1///MfWUh14N+1Qf0XlA1hXSvZcQPuoNUnU0Fq2qtLU4rWpni9NXFe1rnx53q8j9kL6ssleNiL6oYFsxrWB3E3pS2r7h9KxTTtYzdFkvRZ9n6PlFKbuRpctVGbuboxd9VuIY5umqhH1boJc7xhss0Ktt0w0W6XXTcIMBfWd2NFqIfrRN6Cakn0zsHaYTVpl+bWvluox+H2pjI6UHli42cnpgV6ePVB0bFR2Z03GBPjkq+jNDz1pFemQZ0pNxq0iP5Fu1nqNndYGOmCGl4yI9lH7uRp52GgI9tMxol6wEek+N6Jh0RSqJ7maeLgkV6MP93ISeU7Ij0lvbhHZIB9AeitDfAvXTgr5IvzgG1L++u4B+qOnpmBCKaE9Pl/5XbQP6XtjldYF6hHiI3lAtDdKnPqJTLQ2euSain2s66u8TYZD2dPQiiP42ot9cHfX3iXiQ7ulomGZOEP3hamiYDjQh3dPQy+DnDNJfrpquwti3Id3T0DAZ6ED6u6amUTo+gXSgplHa1IT0D1PScJ8IxdRV0yjBbEM6UNMoabIgXeOUIRrneZjW5LeET/vR1BDSLSW9iqZsSAfSezikXjQ3QXRNTeMazUL0mey5yuXDDFKqpNfx5BDRmuRVj2n8my0lpZAmmfRIRQmkSfI/BHRLna3Fh4LYSopzRMZXrKD1O1XZMFd9K5khmlQrTElhscILLEdFKUxqk1lLRYuVZES9ZMXyMxw0CBBtpitWUDIDtJ2uWPb/mu1L5BJ4PvsguyV4D0ZamDlKug8o/1hbdq3F1aRI07pshC/TJAQLsVjhkw6+wnl5JlKPrzhLt0ABLNC06L7NUJArsrG8CHUyFDYKjouFGX8PLfi+ZiNUpGmlAV/13KGSlr4Op7J6qZGnEz5hJXQgb7Lli1B+zzOU/BRtjqbhmYKUS7BZmoZnHtGpujGYren4ptgRpZpG0GVK0/D0AjrVNpF4nfOYOVABrWmbHCytOPjPXDELx4Pn/nzF1KeuWeerH9H0QPVujP5osOhhlJmmkb1xienwJgHlK3Z7xHywpk/5HlOXlBm0/XTESMVhjeaV2/rEcmzyP8c/16Z1ezJhv0cAAAAASUVORK5CYII=","e":1},{"id":"image_2","w":58,"h":106,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADoAAABqCAMAAADa67LtAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAwFBMVEVHcEy80SG40zbp2w/P1hzv3QzX2Bqr0TrE1BvX2BoTrkvt3A3D1CPs3A231DojsUXu3A3g2hMQrExwwiw0tT+30zXv3Q52wyoPrUuWySD33gXI1RtZvTMGq03U2CPL1yrC1TL93wHg2hm81Dfp3BLv3Q210zzl2xDz3QYmskPY2SDP1yfG1i7b2R0Eq01PujdavTNmvy/43gZDuDpywix9xCg3tj6VySGJxiWgyx2szhq30Bbb1wvD0xPP1Q8TrknxkElrAAAAHnRSTlMAIH62MHxQQBBgPMqhm7xZQPCC197V2Wiom+jYoNDbFk4TAAADgUlEQVRYw63Ya3uaMBgG4CAIQaWIWs9d1WLt2q7d3Hnr4f//qxEO4ZAnB7iWj+O695QkhvcNIXxYPuk6ertRVzraPXa1l7vH6452l9DrXhfpMfrw4HeaJZb68MHvMksZ7WAvCnrf2t5w+sltJ50KjZxW1K3QQzvbq9J29qJGT0PaYhvWadzC3tToIY6H5hPcSI2PgfEEN1OPx77pBAupxzuzbTUCqXfnsdnagNTz2mR5b2Hqfk5b0zz1vNcvkYdTz/u9dolcWepeO809aerdadyOVlJPkaVeG0Xqy0b9u6nSYT315U15sN9W6Iegkfr26hvSeztopL7+dRTLWntXR6CX1JBawyb9s5KvTY26vkB/L8xon0QC/ekYUZsEIp3KdkSNRsQS6a+FCT1YxBbpd8+EusQFdErhjqjT5Cyci/Tb1oDahPQB/TLQ03lSgCE61dND8lY2oJ8nYB82aHIyjBF9trSUfTPmiG61NJkn0kf060BHk3kiFNKZjp7Y6geI/gh1lNU/Y0hnOpp+W9eIfgw1lM0T6UM6U9M4Yv9OIa3FgtQ4XXsb0islPcRpnehC+j5Qp2Y1yBrSpTo1nSfSh/SJKlPjrPfBNFSmxtnhaUO6VKdmnygf0idOKUrNi4g1pAP5KXHi5WUA6URO2fc1rzshXVY+6qCWyMuPIaJX0iM8Tc0LUx/RJ9nnKku18zmEdCClLHWdPwyU1EOpx/zgdJXUQqm8xNsAGuIKpkgtKssRoBN1tTYvWgolxTVi8dvaqKgDa8Sio+wppok1VyC16FaokvZQKq/eRypqwXq4eOqraKOTbPQ5VL6H2X+MUnlrtlJRcglS+cu60h9dGou6K/5UekpkCw9qf15TrpTUAx0Hf1lPdqzlkyz2dDZ/KDlMiyXYiX0Of7iq0iuxPRP7HN5aOVU6AQ2wkFo23dMKBbUi3TRTyyZ0VdJ3eFFw3ezp+PfQg9/X6go1e7ryFqikIW4D/EZq2fquOJX1S349dc4fLAq6lHZpfr1/5WUsRcVP09Y6ycrygJJLtJXUci8uMjpRdsK1no5PipNRS3MRFJW07HunjC61l0hDTsu/eMvoQHvJQXnHEZUvK1bhePDan28oK6Gh2c3XPKPlBcH02SiU/dFBSiM+x9vnkJiO8ZpVa3yOFzNiPmi/eqVhhaTNsOy3V0o6DnfTI52Hv/LI/xz/AG9w2PZ68exoAAAAAElFTkSuQmCC","e":1},{"id":"image_3","w":109,"h":53,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG0AAAA1CAMAAAB8+5X+AAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAACXBIWXMAAAABAAAAAQBPJcTWAAAArlBMVEVHcExHgXdyUiYNwecZtNBRd2ZlYkI9kZQunKcvm6UcsMlEhX4PvuFDhoAopLQSvN5YcFotnakJxe0IxvBbblhyUyghqr9uVy5SdWNba1FeaU08jo00lpwrn6wnpLRLfXAiqb1PeGc9jIpDhX9ba1FHgngWttMersVjY0JUc2AbssxXcFlvVSs3kpYwmqI6kJBAiYUSu9xnXzt3TRxgZklqWzUHxvANweYunKcPvuGOHF3zAAAAHHRSTlMAxM1CI302EIdAzESkn2F0XcjKhiCQoHLurt3wCSH7ygAAAxJJREFUWMPtmFl7ojAYhQUEZJNFkWIXd3Sm2BZxqf//j03CZiJLEqS9mnPJzfucnHxL6PUeUV8ZDgoNlX7vx6QNuM/9fv/y8vHx/Qr0BjS3J0O5c5JsGc/LzxQGad85DWjbMVAzvr6WS0D7RGmvOW27/asPO0KNjdVqVdBeSt62kAZkdhCixm02KA0/yXlmDtKCQO8/mNbTbNNEQ7wFQNEDPFkELJy2r8stpQVRWx5gLWZARG83WgR0jUZyK9aCTJu/FbT0KKPr9eIIzKw/ELZIYBvCnZzfcktol4vTZ2MBEb2Vc8tpl4tJC7Oe3t8xGHVuBe18PjtU6UnT9XtOS3j1d7KcW+EN4M7k9Mb+GsIQbxT1Nq/yBjQiBOYe1+t15q19blfHGY1MQWg2Zx0TGHKSM5o7eaOpumkKdNdRmu6Ox4SH0ejqTZ3QYrJD3O12BSzPbUG+k+pkwDzBrd2hoDXlht1JMLaVNhOMPxxKtMaTbAmC8g6nnLYm52YbrUHwdvCn0wn1Vp/bszFQmBp8qeK8MERoiLe73DhDG7MaMUf3xhLYqTq3vJcYosa6dgoj3Tk7+Ec3hKr2lubGGRaTJVlIOKn698YAK6zLjRM1mdqLYJq6qqJdGW/LbhyHcY23J1+USARFgVv6xFbVfAZEWFc2MWMIDPM29a0K0ljTtPQNYAN9oH2yYgZc8AngxVDlk4QoSRJTGVwitN6yh0DFDIDegttJ6kiWfMJKaGFYeyfL05RyL8FgVpwJ8k509UbcFNDZje4JLsKqyI1tBlTuJQiMj+MSjrZP3u/KyF4S3HLDNiDJLXBV3ppnN8Veot9VqezxqbW43hvrXlLkplfNNAikyG3GsJcktLpNa+zyrLk1vAPS3K5Nb1TJ5ZvqjTm3gLSiACB9bvvG3CKVpotLHt9JvVE/Ncaez7IFVeWmMi16suVPjy125Sw3s8VK5Pnt6m3S9nkviX5DvVXmpj7260ITOXKfzHObKL3HJYFpSvamDjr8j6cBZD2tU1RxWzULbg0YzbYHwx/8O5lglUy9//pt/QOW6sIbig4V/AAAAABJRU5ErkJggg==","e":1},{"id":"image_4","w":79,"h":106,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAE8AAABqCAMAAADKi/wxAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAsVBMVEVHcEy30zfp2xLz3Qfg2hbs3A7u3A2rzie/0yLZ2R+ozy3Y2Bi61DO60iwHq04Vr0oOrUtrwS4UrkqYyyVLuTglsUTN1yjC1TH93wHy3QrT2CTs3A7X2SDg2hnk2xa20zvI1i333gV6xCnm2w9Quza91Datzhk3tj7H0xHd2Rza2R4Vr0huwS1mvzCHxiVdvTKQyCIAqk+YyiCgyx1EuDq60RUqs0LT1g7b2AshsUQJrEzu01uEAAAAFnRSTlMAfsnbWnukECQ9VJa32Yc4wtBinojg8k4vYQAABBlJREFUaN6tmml/ojAQxiNHAggeta0HFaX2sNfudrf39/9gi4jAhJkkKLyV379PZiZh5kkZwx7XY10+wWLhdsnrLxZXVncSxeUiAy6crni9jHd19fjARTe8qOAtLb8LnJcvd8dbPnSx5v7lQd8ySTpY87TO25yc5+AS8OLEOXm5gBfHJ9W2mAJekvHm1glBdNYNffO5fXzhhOumvuw5NohijelL09Q9drmovnQ2O64SQ0rfbGaLY7KL6st5s7h9VpwprW+WblpnJVTpS+O2QDFV6os3X/12e3eq0ff12QrY1+r73IYt0nyr17fdRsZAf2qgb/tuDOxNTfS935kCIzN9d3f/jA5t71bmPVC8vybAXoNnLSneHwNg2OS5JO+XHnjb4CViSfKudUAf47k0byx04WvyfI/m6YARwnMYp3nPSqBYITyXeQrey1h1tmA8zjKBNO/3uSJ8GM/K0qTi3dDAEOMl2Q+WindzRvEyHMLLisxX8t6GRPWtUH27T5qt5F0IInwob9cWOEre/YgIH8rLPxe2kneP5iTCeVY+Lql5H0gIvRXOs/NSj9U8JITBCs/vhhUCVbzvAZYOVN8m71k8De9piKYD4+07DK7hjZB04Pr2faSv4T3J22RF8fj+d0vD+xHy7sB5sVU0cjreQE4vEb+4eMPW8F6FnF5UX3JoSh0dD0RwQusrWkiRangjqVwofYdBgWt4r8NGuaD6+GFH6ngDqVwIffbhHa7hjerfNrL+4risKQ3vVSo/Ql81ddga3lAuZ1xfOSM4Gt6Zmb6yoxcbNW8AtgcZP6tq/015PZW+pDrE1byRAW/XT1aNHj+Zl+mbV2Ol04m+2mhudxC/Oa8ZjR3kt9pxWcmY8ZT1F8/rE6P5/iD11RLCfCOep9ZX90oik/OAqfXx+pfB5LzKz1NSXz0hTBidp6HifMn6ZzDDm5z3PWX86glhAcVrtmukPmBeRQbfN7J/yfWlHHyrDb6/+/aZ1GeDtRj0B2R/WvgHYDYN9f0L2Y8X8zTwmRyMNzSbPwp9wBUSTd7PheG8VeizwKsTfT+5i6BCXwq7uyZPmM3npV8CrcQGb2Dmb1T6oB07kXjfAp/QaX0wgIF2/igNIsLfncM3Ie9DkPYp6V/BAE4A78zcjz3EbwYDGNR5Fy387FIfDCCr84ZqC5Xwx+FrE908XSVljft/0CoOSt6bzlwUEepPcvhXS9652f1gQ58N3xkXvLGRMWsh/in05yYFb2hmlPeb/qlUMTp/qCFR1gcXLHLemJk/7qPk73pSADNeq8s5wSFPOmMyXtD2KpPXebYUwOdz1vrx+H5/5P4BWJ13PWbHPF4/PvhX8K5ifOzNpnDtPU/K8Am3kD7P/YhO7pcLNY6dxrzTfyPwXIs7gnXL1PD+A+5YMssNyq+nAAAAAElFTkSuQmCC","e":1},{"id":"image_5","w":58,"h":106,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADoAAABqCAMAAADa67LtAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAACXBIWXMAAAABAAAAAQBPJcTWAAAA81BMVEVHcEwm87VL9FQz94Mi7cQh+bDW6jrI6zs4qf188EAq7a8Q/Nti71DW6jwa79eK8D8Z5uk69nEe+7czsfo193w2qv3S6zpS80InyfN08D7E6zsl+qQQ+9hy8D158D2S7jwu+I4e+rVa805A9WEkz/Eox/Or7DwN+uNb8j459nFO80FA9WFH9FAS8+UN/OIQ9uQU7ucb4esX6OkM/eIe2+0Q/NkS/NIW+8kj0fAZ+8Ed+7gg+rAox/Mk+ad/7z0n+Z957z1y8D4r+Jcu+I6G7j1r8T5l8T4tvfYx94aM7jw1936T7Twzsfqd7Tyr7Dy56zs5pf66o1QyAAAAJ3RSTlMAEJlHMH7+/kBeIGAQQ00porq3hWXCgudrQq6c0Nur3tjWe9javOC6cK4rAAADWElEQVRYw63YeXuaMBwH8AC6FkTR6ry1Hu3We7Nd7bRbd9/n+381A4EEyDcHeZY/i5+nIQnJ7xtCaPP6xLT1V01T2lxdm9qj1fVzQ/sipJdVE7m/o89qJqMU06cGtplQA3uc0qvS9iWlN41yspKh60op2sjQ27tStp2l600Ze5yjd3OrxDLM000J+6pAtwfaA8zR+5HuCubpa81PoQ3om47eCkb0vaNDH0P6QWd6v2A6s4zp15Z6gEX0u21OT1XD3BbTU8ecnnvyuZHRpT4dF+i5dKh+ZuhNs0gvXE16NW4WaS8Qz02O3lSK9GLp69JxkZ4JX7efp40aR89Er9vO0yrZcFT0ugU6JiOOnk0E05qna+Jx9ORkoUNvPXLA088DHdogDUAnaIb+Fmi4F855+snWoOH2XQX03UBNx2EBhuhETdfhbnYA6FtulPc5Gp7rDqIPgZJGZ8Yc0amSRsdcFdGPAxUNx4lYkB6q6F20648Q/eaqaFT/OJAequjubJ0h+sNV0F050IH0UEG30d8tSH+5crrZbfkjSJ8o6K5OdCD9XZfTuAaZQTqU07hsqkL6x5fSbZx9MHXlNK5AWpAO5TSuxTuQ7lFqIZrUeZjWxbtESOfxIxvSrpTeJ3UnpEPhPryjSfmxRHRPTpPCtIPoI9FxFdOklvYhDaT0dfLQRrQuONUTmtRLjpR6kKYl3lJGCaRp8W8D2pVXa7O0T1Lah4WeRXssoRVI05p0IXtXcoRomlZ8KYVhhQaslox6sKhNn7ri1cQnyXzO8XvCNRyNMaI0mtkySo4AbbEei77X7L1EroCnT3uiXYLewQiDmS2l+4DSkDMQbWtJmuRpK9NjuJmme+qKDyuE9Rhu4fRugqc0WgVZ2gUBmKMsdPcytM5TaywOoXaGwouCy2Iwo+ehC8/X7OsWKcuRjArSR00YfW1KRXmplqcsRropHQpTWi0fQml69VNaF2fDmiBwT0HJxdksZdOziGlXmoRzmY4OShDTQHERtGWU9XgS0anqtsFjOYf1eBrRgfKSw2KJg00PX4XjRmt/9vWE1NW7+UpKabagJg9a/zRaBElRS8d4+uAS3ebMIkp/705KXC9ai5DSMQ5cUqZ5rfML3/R+3VkujK/1SccekP/Z/gEsXGwqa2751AAAAABJRU5ErkJggg==","e":1},{"id":"image_6","w":81,"h":159,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_7","w":91,"h":124,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_8","w":73,"h":156,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_9","w":77,"h":122,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAE0AAAB6CAMAAADNqC6XAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAqFBMVEVHcEw3fKORd2VieoUxfqnZczOKeGp9eXWpdlV+eHLnciorfqztcSUXf7mCeG4Rf72hdlpBfJtren/Mczzlciubd13ocinTczc1faO1dUzDdELKcz1AfJyEeG2ndlYjfq96eHSddlxZeopveXzccjCNd2cZfrfvcSQMf8BJe5ZQe5G6dUhieoWvdU+sdVK+dEahdlmYd2CTd2Mvfajici0rfavociloeoFd5XxuAAAAF3RSTlMAXZ+sMlR6EzFagYLAq8zWvMzgzqDZ3a2z8rEAAAReSURBVGjevZrpduIwDIUdstghUCBAC4WWlraULjMDtGXe/80mIQteJMUJOeO/4Xzn6spxJBnG9CV81uLyF2PeHm28uB2LtmB8sbj98yFaC3Rxm+BaMm+S0eZBK7RFTpt3WoCJm4I271ye2m5J+/V7ejFuLNHuL8bdyLT73WU7xddoj+Iy2zTaXlxkm07bh81fqxuTdggvsM2kvYTNbQNoTXFjmNYMx59h2t1dkzPAR2kPDc6ALkprgusRtPq4Z4r25Na1jaI9PIU1baNp9XCTKtrfOrjrKlodnPiu1Pb30xrnf1dr+/z0bJNgRbPF9axo67Ud7tuSFnOrJOi0IUx7H3GbJBi0IUhbr0c2STAiFTDt/d21SIJB41OE9uZUvgmAthCjVeH40aQFDKW90fvEB2gdFmC0JZ3YLkAbMo7SlqO6tB1jHZS2jKiUArR7zgTm23I5IzJxPB5NWlIgDVFtsxmeiVdIW/JRDgkamgkfpKVfvSlO++rXog2TJwHqW4JDrOuCtF26rXFts68vONYJTEt/3CFoP3CsPZgWnsQRtBW4644w7VRpXeG+/ax+oG3yCtPSNLCQ0rYCYhUIbcpycTht4wAbBKY9np4GFG214ta0U/PBCd8ScZG53V6h93T3mBW8HUrbZuMBNFBbVlEKmtY3Ni9CG2bPr0iaLq6H0fbZ85DybbMZmDTQt32eMFrb1rPUlhdsAU3ra68CRsu7GE7TVHE4LU8DcynfNttIp8G+HYp3j9Y2sNNWpIHFJE0JlaAVjX1A0/p2tKKZ5KRvSqi4b/uyW3NJbXKohLZpeQbitBTnWNEO5fEVk9oiO1o5XwlQ31LawMq3Q9nTc1LbwE7buWl2Kd+2drQyDcyjtEm0a4L2cv6KxIRvW5vzTZn8BJQ2bnG+JbTzaIVTvnnVX5mUdnWOwSW0WdJezrTQyjef8k1KA4ttcipIbVIzH9jsN6ziymjS0IfbvAtYNZjRpDQwFznfFFqXot1JP3QwbX2lgKNoQgm18kRCepmCFiihwjSlKJxQ2uTZm4f45lX1pyVNTgOLYW2VnXg5U72Ti9EI3G/9qgmGNF2Rh1Ec1KaVq5yiKRPaEeSbV2MqpRjnQNpqTfO4EqrpW7/WFFSZ4rmmNqfWvFcxzjHOtw14/YTSFON4RaVK3i+cOkquhqrR4B56gtJCNdQlVeGXMYwxWqCGqtKwQYtYIDTFOOaSvYyCg+eWinEO2WcpF6gwTTGOkz2ggrO5Xxide+fVgB7FgbSYaaGW2irmhP4HNO8VWqgFbVA5+50DtEALtaBVTkSZGJs0dSwbFbRKaWkkQ3Oyre2RnOYwm9Wh72V4Thswu+XrNDXUUUazvW9IotUm26pxxIwLXgFxZ+SdaF4NWiJPpqmhprSo5v2bPAWNDeNqX8FzaTYYasY5rP4S5cTMVY0bsUYrLCY/ymd11vivBmFs3rV5rPkK44TmstZWmHSULf6Bh3mu67SIY9yJ2P9a/wDoln8oZFJ6SgAAAABJRU5ErkJggg==","e":1},{"id":"image_10","w":77,"h":122,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAE0AAAB6CAMAAADNqC6XAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAxlBMVEVHcEwOo1KJS30JpVG4NYCuSHC5L4YJpVGXVG/GSWLlVz8MpFIpkFvrYDKHTHy/M38xil7INnfqXjPWRVu4LIvpXTWITH1vXXQNo1LKNnZXbmzTQWQEqE/bS1IBq04sjF3QPmkflVm/KIzLOHLELoITnlToWzihOoXXRlrtYi3UQ2DgUkatMYrjVkBHeWdOdGk1hmBUcGtBfWQ7gWLHM3pabG1gZ29mY3FtX3NzWnV5Vnh/UnqFTXyLSX6SRYCYQILeT0y3Ko2R6U16AAAAHXRSTlMAxL6BXUOf/hEnWUkokXtzZLq6zdzi6aCg5M6H3YTrOv0AAARGSURBVGjevdlpe5swDABghxpqSAIhZ9M2vZs2PbZsbbeea/f//9RykdhGkgXhGV/J80aWDNiyEPbVaIkKr9Z0X1Wn1aYP+42qMHU8ffj5rSqutdC+V5S8vaX2oxrueLrUngYVYI3jVWxPvwbbl3Zno/3efqbUNO15a+5U115ew62wuqX1t+J2LO1tK65ma+8fsvxjdZrX/sjyaQO0T1k6bZB2JcumDdTKceoS0e6SMmlDtbugRNpw7W9xrkZoZ4W5S0orytVp7UwWTButXRTi9lxaIe7QqRXgGrtu7ZHN1Tnao88tAksbMl+fNZZ2fs7jdpnakPMlaxzZ2gDWzjsMrp7TvAGsnaSMIuS0Zx/RTtyPbC2vKQ/Rbpxvz0MgNolpN5HjLX6U12LRh7UZFzqKkNcGIkY1urA7gOYJhWrXnaLaixADVLs+IEsKaEqEuDYiKrELabMXhodr13gljiAtFsLHtS+0EnVQm6/L+6g2+mpimw5Q82Z3YlwbfUVoSQHtdT6tKe0LTt0erM0TExDabRubIJA2/wooSruNkAkCafH8nkdptyE8QSBtXgYhKe2+Db3GYa2/uNultPsInG6Q9ra4m5BaT7G1xcdYkdp9E5puoLYogwgobTwOi2khGdu4DUxeUPOW91MytrGfn7yg9r68L8nYJm2utsoJHdskZGqrQSS01sw9CrC2LIMIac0MDtdWZRABpVnB4Vp/9Qufjq3H0z6y56ZLxmYMldCyuZSQsRlDJbQ4W6jQWo+nZWUQAanpQyW0rAzCJ/M2iVjan/Xrq0vG1uRp60c6IWNr87R4vWAkY2Nq6zLM6kDENuFp6zLM6kDENtGX0Lj2ufmKDOH3m63VKG3zZk14sZFavFm4U3nz3V+ZubYpgwiI2BRP+9xokjXSOqVdaY/gkKM1SE3bzCec+YatuJaatuUL0dh67tXgUtPKIFLGk4Wte1d7QO2HkqM1SE1bGaghkremcy+TafrmNkBii6x1Da7pO28fiS107U/XWlf/5RCOzbkT33Qw9D8+AGNr23sjQtObUSEYm7WWVlSvxmhZdFzfeldXykhcAsVWqJunzKHmtGahLqjRxUvzWlSo32skTua0MdTmOkU1I3HKsVLNZgnefzO2P6mtwXvoPVQzEhdZWg/pJtVYXXdlfU+b7pM7UzMSNxuqERvaGGlMkb6lModK7bP0WYdo0hyqHhvVA25xzhc6Wmw9+ngX1MzEJVpsjj5hC+z3GqkOtZ24s/cLaYk1VLxLkOP285rZ5T3I+iHO0OZF2893ts05ksUWCc41oM9l1ErrCd7l25o1R5Ya97xBKM/qbJuJI3pc8BX38TMjf6EVOvoNPV0zhzoiWo3YJfUuaC5xhY/gVYCcZ80SF4niV+hlWmAmrlPuzNfvrror+sjUqPTpu+zmz9p8Uf6Ss83uRSoqu2R68RhWxwk/TWWFnAjlgfhf1z+KRQLZH3C47QAAAABJRU5ErkJggg==","e":1},{"id":"image_11","w":75,"h":124,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEsAAAB8CAMAAAAW773NAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAn1BMVEVHcEypZGiMJZGKIJSnYWvLszfTxSuraWaoaGukWW/XzyWLIpSudmO+lkm5iVGsbGSEEp27jU+tbWOACaLAmUiDDp/OujKdSnnGpz6hU3OKH5SYPYGTM4e3hVSRLovAmkeGFpqnYWqze1qOJ4+9k0ukWm+BC6G6jU+ra2TKsDnTxCzNtjWbRXyfT3aZQn7PvDGVOYTXziWvdF/CnkTDoUKCFThUAAAAF3RSTlMAn1uifEGzNw/FdDYgiLZVwmbYgNna3K2z7zEAAAQsSURBVGjerdrreqIwEAbg0AIJKiDWdq2t4qFSa4+6e//Xth6o5DAzJIB/d5/3mfkINsnImNtH+KyzT/Rx0xXl/fn46ow6Wv1OKP/zZN12QaWPZ+tp0J7ij6XVvjC++bW+REtKjK7WU8tlIaJNZf20XA1L2eq3o2SrVfrpUrF+npunz7e61Tj9wdawfhqvBtN6bpi+twWsZun7h+0ZU615k/TTwwGqa94gfX6Aredhg9xXSF1z528eb3WxzLzmrulnqxVa171jWDPCcktfzChr7dRkUllAXuu1wxKLZyfrgNa1tm8yeJ3RPdo3Kca11tS2yeRVtsC8ppZNZi+lReQ1tWuSv7y81vdo1+QYsiLDsmkyzjXrnJdnWBZNBnllVXlF0adu1TcpxnkO9OjrPa6ni9om47+gxc28apsM/sEWA6yFqOlQsa55eaBFNxlPgLq2y00KWmSTwWQC9yhAa0F1+IBYEWOPkNWnOtSs37x8xLrDtyFvkwmcF0cs/E9IiFjLEUMsdFUEb5jlodYNFrxplXmlx3+FLWRV9N7RuuSzgmIVcGCDd9TyUGtRgBuLELd8woICC74h65IXJywosPAbrWvECOseKgu3vPNmE7EKAZSFWyluFUBgwe4bz0uQdRmvZLhD6zpEjLAWxdAoC7e2PiPrKoyyCItfriawvLTVOtjtiLwYYZ3qUsPv7Yi6PNIywt/tjxRmpXV1KeH39lRdgzpLWfnhnshrVP6nDWrJD1LsibpWHm2dsL7WIlpXSlqnsmQrpOo6lK+uIOqSHuSeskbGHYyZV2UFpOVZWEOtRczirhZR1/WwvEHfR8naU1ZyPcMTdV0X2IC0fCcrIC3uZPVIq7pZtbXQ55i4W2hdWWeWFFcHdVUv2qatlXRo+bVWoXyxUs+RS1e1Nu8jtVaZnXVrYSWW1p3Fux1L13NUXtV39AOaF6+3znUJi+8vZmEtlL+PPcxK5KEJUZf0pwP9vo8tLfmshuWV2lnaFgCuS95XLfG87tStCWiNmYVVaFs5eD+hRM/RuvSzArzPyews7ZQM778CZRqAWcYFMPgclRtu1Oqbu3vTSqws82QF7aNjZVaIWcBxG9jfZxbWFLpSAM4dXFlesAXfvJvnIWZhwRfvxjlNiZ7DFnbLpJ8f41oLv/jVz7WZuiQAixhTqOdtZdVD1nxI3MkN1LrUUTRgkeOmnmwpXzhsZFr05Eo8SFaiLQndqhuCBZKlP0bNqr89DisrIy2Li2hRWfpjdJ+xBldLaCNW2bIcGIa/lv4YKyuynT2K0lKXhDwLiOxHOeVdbYLMaz88lwnT5Q5ZWRJpZTmOHceG5V0t7jpzHB8tZUlEpRW5D1a5vrzKeUejn61kec6V6E91RZw1+sS5surLu+2GnyRTB9xNi7pUJmGjbcsf+FR7QuG1/U1Ig89/KERy//wbfUMAAAAASUVORK5CYII=","e":1},{"id":"image_12","w":77,"h":120,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_13","w":107,"h":194,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_14","w":104,"h":194,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_15","w":110,"h":192,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_16","w":89,"h":189,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_17","w":80,"h":162,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_18","w":82,"h":193,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_19","w":104,"h":183,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_20","w":89,"h":188,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_21","w":176,"h":97,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_22","w":144,"h":143,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAACPCAMAAAAiGKLEAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAACXBIWXMAAAABAAAAAQBPJcTWAAAA81BMVEVHcEzS6i687EhV8h6X71FE9B+E7x6T8FKb7jOq7Su07ChW+NLY6i3b6SV19a6K7x1h9sXb6SKx7mSc8X1K8x829SCI8peg8HlE+uhw8R5D+uiv7B1E9B9l98A19SCa8IDr5x237V2T7h5g8h+w7maj73Xg6Szk6ByM8pBT8x/A6x2E85m36x1o9r1F9B999KOc7R6J7h5w9bKB7x7D7E839SCq721z8B7P6kDI60m+7FXZ6TTm6CTU6jlr8R+T8Yne6BzX6RzS6R3M6h3H6h2x7B1f98ir7B2m7B139KpX+NB67x7M60RK+eE/++1Q+Nii7B5nGjFAAAAAH3RSTlMAhkefH8aNEDBgnz+uzGLlo+nRq0h01394773P8OPe/qaDQQAAB6hJREFUeNrNnGtD2jAUhttSTS/ci1xVVLyxCU4mild2k00U2P//NStFIb2dJKctLh/36dlz3qQxOUGSEh6apui6vukf9r+WNE2V1jWIosuNxtPT799//vz9Mh8HBwcXF1+/vry8XF8/Pj62nNEurYFF1eXMJ3ucnZ2tgA4cHhvo6xzonWhbS7xCcrrw4+evX7/YQDbRRrI8RE8Xvn3//uPHz5+BQBdeQxskyTrJmZOTk28QkNdQiiTpZm9vb84jAJRKTk76+H5PGGgzKRwlc3x8zwXkypCeEI6euTvmBaIMJcWjZB7uUEDBPIREzc7gAQVUC1l+SluRZpb8OhADes9QGI+kRpl42u2NKNCboVr48rwbQc/lDRII4JF2sR9/rXiJBLqAeMgu8tuv799igOY8OehzutHHpbqyf3uLNATypPo4IMPmQQKxeDBApLi/jzUE8mz1UUCkeIgGYvB0baAUggcJ9AXmKc1x+v0NUSDrEAsE82jbOCDrCg+kwzzdLgKocoUHYvH0EYaUIzwQxEM2ul2MIe0ID8TmWRjaFZpgeCAD5Gl3l4b6IoE+QgMxeNorQwJAShMNxORpIwyRJhqoQWAenCELDcTmwWSo4vBggGCeVrv1VjIxQ2qziTJkC9JAnhbSkIUEOnti8DhA4oaUIdaQAqyzDk/LbYhvpSblYROXIWCB1mqtx3dDq1nGB1QZDocoQwbE4xzptakQcQOpp0NcyWCeR7QhCwnUAP6Oqi3OGFGGzNPTISZDwAKkr86FEYbKcyBEhkCea9oQ9S3j+Ksje3qKKdmn8AUoRZ1Tryq2MLTFJQgDFL4AbVLn1L51iA2U/XyKyVDoAkRSrpN870rNPmwoL4AEMySH8uRcJ/k+QyW2oM+IkoUuQFrOc9fhNaSxBSGAMiSUx3PX4TPEIUg8Q4UwnlLOdxvkMbTNIUg4Q4Uw7br/NshriLUuZs8/i5csbMJv+m+DfIZYQGUEUNiEN4Luy7yGtliCzoUzlA6Z7o3gG0WPoS2WoHPBDJ2E8GiN4BtFryF4GTLPz0VLFjLhtdWpMGwIFpQXBDrZKwSfe+t/l5fSsCH4qEF9PhfNUPCEl4Fb6ZbA9qxCA3FlKHiCGcCttGfHCGaaPD8LlkwOnl7ArbTXEJjprChQOnh6gff2HkPg/V35WSxDgRNMYXU2uAyBETJ7z0IZug+aYDqrs8G9pwZPzfM9sZIFTTCD1dng2VNDmSY9fqA7mydggpE0u/fDvQ5Bt3dZPxCUoYAJpjZ4umPolRpcFnd6IhkKmGAaV3cMbQiMkNkTKNlxwATTubpjXIa6JTDSAkABW0SDs3+INgRtX8lOTyBDvi0iyXB1x3gMQRXLdnr8GfIFWstw9g+5DUEV2+nwl8wXaKXA3WFFG4Iqpna4gQYZ32aDv8OKNgRWLD/n4cvQwDvB0vwdVm5DcMV4M/SqeeMs0oNGG4JWRbMTaCgIyPPF0ArfhLr0KENbYMV4M+SZYLpYUxxtaBvaCnU6nBnyTDBZsEuPNpSCK8aXoUvijo9o2yBtSGVUjKdkl5o7PoJdeq4dIySIjDiBXIHW78UbKylD4E5oxJchV6DlBQ82Q/DedcSVobQrPveITk9qT62CFQsz5AIqEjo+mE5PyhAoyK7YiCNDVKD1AqKxkjYErkF2xcJCTWeI2gLJqE5P2hD496pdMY4MydSfFndooDdD8AlDdsSRoSK1F8N0eroMbcOti/OKgRm6snmWNddfHx6iGmKc4o3GI+Y6tAy0PBhEAXIMMZrOzHGIoeHKkL6Mz2s0IJuoXWM0LOfHbxnq2DzBGaq8x+fyBtstvDJUY91tjMejEfwtew+0jm7OpQ2xLn/sirEytFBMjMvoQK0Wsw8+P2ZlaKFYLd7GAMTxjmJnzMjQ4r+kIDs9L0TfdZhjRoast2ZhfLfwEuia551JdQkUnCEn0MTajwOI651JfQxmqKk6veaHcQBxvesgM9BQcx5o/eoQD7TKUI2r1T1rA9nTPuxbVonYC0sZyvE9K8vPoFBb89l+FQsQ7zOuGQRUJpISofWUfkbB+yzInEEZ0qTKUVQgJ0M57leA1TegwAxlidU8isOQwKuyOmDI0tB9jPyvFnyTPtTQsFxBtw26HgkIPbozZ7Qh97esPIwDyBB7+JOfhc6yIbZLjwbKKYL9/7PZbMb4lh0l1AIffPI6mUCzLGLJNsXf+lUnQIYiAhmYV2N12FCEDBm4R2yzSTIZQuJI5iSRDBno9/3VCdOQMFAEHCdCMWeoIUd6RTuZMGeZUIYyEZ8ezyM0AfdDYm2DihRxVCfxZaggx/BLFfVJXBnKKFIcYxpPhmKR40RoOolhHUrHI8eJ0DRyhjJynL8IUZ9Gy1BspVpGiMdQWIYK6dh/TcScojM0iDE4dIR4Zpkf6MZIgsaJ0JS1UgdkKCmaRYSmYhkqykn+Co0dIaEMFSsJ/0ZPdSqQIUtP/jeV6hyGnJoVK4q0jlHnypBVWdfPTZEpy5D9t70irW+Y0ym0UpetLJHWOqqAISurSmsf9QBDNtBzPqtJHzKmHkM20M6HwcxPGaZuQzaMKn3kWERoMe3rVZNIHz2qC0OzfNWU/oth7xb/CzGrdVH6v8Y/D7ubdTpgve8AAAAASUVORK5CYII=","e":1},{"id":"image_23","w":142,"h":88,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_24","w":112,"h":83,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHAAAABTCAMAAABwBnPhAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAACXBIWXMAAAABAAAAAQBPJcTWAAAA3lBMVEVHcEwkZIIwqlZavVDX3Fstj2l/xlIpSIs1l2XT2lrk311CuU3r4l2/1Ffr4l4khG8jaoG+01YprlHm3lsijWxdv08oVYYhgHcimmEpSYuJyFJkwU8jpFfN1ligzVXi21nl3VtkwE9Xvk4rtUsilWXv5V8ijWt8xlGFx1Jvw1CSylOoz1Xq4V1Hu00ihnE/uU02t0yx0FUksU3C1FckrFHP11cjpVcjoFvc2Vgjm2AhenwjbIEhgHb362N1xFGhzVSdzFROvE6LyFOYy1S30Va70lYjqFTI1VcmW4bV2FjNYsnuAAAAH3RSTlMAYWE9EiWD/hA9c5DCWJKE36HQ59W4O7DptODnp8rIiTVi+gAAA9ZJREFUaN7tmWl3mkAUQGVRGQQRFHcDmpDESPZFo6WtbdKS//+HChqpy5thZsBvma+e4+W+ZZh5FAr8S5HEUmWzRFGSCkdcsmj3hsPhaDRaXl/f3t7dnZ4+PDxYfeM4VN2++D4ej3eBEfHp6enlxRKLeeO6lxcxcAgA/7xMp9PXtiHmift1uQVc7gMj4uvr2VnbyMdTPrm62gGOMMCz8/OGoWTX+/mbHnh+c9PKpqmYPxiBN99aAj8PnUwOgcsU4Ld5jReJJpMJu2FE5ETq9/dcwPl8vlhwINW3LMBFWGuy8cx3DHBJB+wwKpqP7xkMawJrQ5qPGYCtJnP+zL/8QJ4drvpMAJJzyLW56c/PfIYNvo7XP/iADc43FJpxAdu8L0RUTwGCOeTGFeT6jN2wTSiVtBbRHGbglFSZzRRg1WEG9ol9J5C7UnXSgbs5tMh/WOwQf0eOw2ZokQ+lilEukwuGEZhSmkK5TAZqDhOwQt7FhFrM6xALxnXoc5iSPKEWhjGQsNnpjkNteG2JKbhFuAY2SQl0qYHkaEa4xQZISKBLabhc2qRoKkJtfaZZAfEpVCMenWGP1ApFY3VMTIAGtgNdl9KwRMA1W1unthWwiU1gDKQwJERTERs7x8QVENsRCY4IJESz2G/vnUtjIC6FuuvSGJYUvNzqSHMAFNIDigfaEl4OOnmH5bCs4DqCwrCEk7MwR/2I2KEIKAZow88q9vF3iwgo4ANKNuyC0ZQqxMtMiIuo5qcZQsVSFK14TkMEwhHVfZdseCIBibPv1pMhIlCAA+qTDQ+LRbSp7odhCLe87/sEwxP5IHG0F9IQ3EdRzPNxhhN9n9ajvwGHRUxA8Ybmjp5U6g3HDFdusGRUPwEeGL7pO7Qu45U7hF4UyPP+C+4ZbulFNPahQg1sQc9PFHcNByh5qFKXa4oB9YTq+RjDjZ5u8k4xIEHZ90DDjzr6pEVtyDfFmIOCVQ82rEZ6sm5mGZuAglHFAIazSE9Ws0wxVsAmWDH7hvGqInXAcQPeA7bAioEMtbozm33wTjESYBHaYzwPyuEsDyCmYsAcOjkAoYDKQQAbst6AISC0a2uBFxzLEAooWgtyGaYO2cFNNDiaIchTg09g/jlsgCe1ehBsYpqzIcyrBlkMSUCYJwfBkQxh3lrwGDlswbxPwfwNcddrdZuXXw4b2LsxqmpJSHMzbBspY1+1qiWK2XPYppvlyzHW9X3fzWZoiUyfDiKsqmku9dhkD8j9hVtGeuSrMQGtipj9m28BRcbqYDAgAW27UpHy/na/skZIQqWtJUVLKXytr/W1Mq5/KJN593N99JIAAAAASUVORK5CYII=","e":1},{"id":"image_25","w":214,"h":159,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_26","w":114,"h":259,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_27","w":134,"h":247,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_28","w":112,"h":259,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_29","w":56,"h":89,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADgAAABZCAMAAABc8BfTAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAolBMVEVHcEz+2CL7vSX/xRz6uir3oS/1mTT/7DL2nyjuazr5sCfqSjrvkTf4qSj6uRv+1h74qyb2njLsWzvvbTz9yRL/4yrtYzzyiDv/7zXrUTv9yA3yiz7wfD3vdT30lTrtaTz5siD9yxH2njL3oy3+0Rb7vRXxgT7xhT76uBrzkD/+3CLubz31mTfrTTvsXzz3pyn8xA/8wRH+1Rv4rCXrWDv+4yolL4/gAAAAGnRSTlMAeE0QILeG/jBCZYAP8NChmeC7aenomtLA41K69JoAAALoSURBVFjDtdh3d9sgEABwJIGCsLU8KsfxkjOatOlI637/r1ZN5oHGe/G/vJ+Bu5M4hNDY3zJEs360OEaz3Mvh+GWGW78cDsdihvtawyOe6rKHFq6nuxauJrEleXvoZvw+yRUnASckJChOElyMdrh4l+HoTdL4qsDzBKfCaKR7vGozLkY6A65GuV8mPI9xfyFIRzgQrgfdBYYDz2SQXCzwfsC92uDPpdvZoasEyLMDOkogfVbhmwLtJeB9aPBEZGiNDvutwzyU4c2WwL0BmTLjDY4O3miweqyWhQLXcCL2xowhUoJzA2sn3ZsQUxVCYfX2JiTIVyEQVloCMEKhCn+YG9wAMK8KSYNGWNMSgAyhfAD6TwCMq4GTBhf6QiFYHd+RDrV8pE8QrE5EpkM1H/4fCJJqJNShmo8tCOs4EB0q+fC+QTCvh04uGGxByOqyNyGVJ4RgXL+YfBNG8oQQzFATGwf0/oGw6U6ICcUTuQUhacZyE/LS8e9AyJre4d0BUxDGzVjkgncgbLvM0AEpDNvGjTigB8I2NCh3wBSEfttXXR1wB8GkHYsmw64BD11wC8GupyUQjHg2TNiFBuVTIet6zisEqR3GfTGCENmDk6E+NgC8d8B+MQSCK2QtgKQfiiHIa9wsOa+v4kcIUvE46jDo+wEIitcq1iHhFw4ISieADv1+IIeg9HLcqXDDrxxQZyWfHJ4CP1K++aFeDqszUrFFE6pH1U6CYqUoAaB6HCsv5Iy/34HuUTtUsQxFfg14LvQ2dyegWGlmzmjcAZiAmdiiAYE2TpyP/E8Do0OG2j9+IouV+joEuz/cw1RsUYOWG0faQV6nKFeh7YMF7qDoCNVbgP1q1DRIZSICrUDHbQM3LZknkiHBwvnJwashTwaWrg8D32OqdrUUyWAc5oP3YlaWIhlJD8Pl8CU1KT2x0hYSikb8cOmLlTa9HBt575diWsF4zCr1+8DrJQ6D6R+MgixhMxjyPR993u8/91BMybEguJYAAAAASUVORK5CYII=","e":1},{"id":"image_30","w":58,"h":106,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADoAAABqCAMAAADa67LtAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAACXBIWXMAAAABAAAAAQBPJcTWAAABC1BMVEVHcExf5SasPki4JU2XZEOzMEt74yWTeD4p5imzLktmrjO/FFAi8ifDC1KoSkW3KE2iUkMp5yh8hDt56iS3JU2fVEMs5ClukDmqR0WExCx+eT6B0CmWkDa7Gk5muDBGvjCgdDxdzysg9SZ4dT2FYEFjkzh56iOLtC+OqzF64ybHBVOhcj2XjjeUlzWbhDmeezukaD6RoTOOqjGKtC+oX0CHvS2rVUKuTESxQkaExyu1OUi4L0paoDa7JkyB0Cm+HE5hljhUqjTCE1BojDpvgjxNtDJ2eD59bj/BClJGvTF92ie6FFCDZEGKWkOzHk6RUEWtKE2mMks/xy+fPEmYRkd55iQ40S0x2ysk7yfCQ+mDAAAAKnRSTlMAQTC2IEa9D/5mQJzF6MWFh6iUgOiiaXfjZzWA0NCjwNTMgODW2+bQ4OAWB1D2AAADZklEQVRYw53Ya1fbIBgHcJoQMalt05q00VnrmXY6d3Pq1GnddPf75tzt+3+S5QoBngAhbzm/EwIE/g8ItXnIGrJ8yO6Rrdw4PAos5dPDozU7+Silm1byYUZ3LeTW45w+s5BPStp6nOIHFW07TvEBpXdaymNGl1rJ8KRGn7eR/ilHcQt5xtOOsfTOBWo8Tk4kUtOliKMLkRoOMZleSvSFGZ2+BCgxkd1XEDUZ4sE+SA1Wsb8PU/3sOL0Gqh1i0vtgS6efm+gn3eB+s6X+DwVVzo5zY0vJrUi36nRVQfsijQ8MafhLpD5Hm2fH+y7SviHFXyXqhxy910R3JJqQPkd/N8jJF4mG6NiErr+XKcYCBSeWbMu0jzwTOnonUw+FBjR4I9MkXSICBdYEmQN0gFCip6PXAMWInGhpcAVQN11eIpWX0xyinnhIQnSyAGiU/Ug6iq8h6qctiY5ugjQ9JciphgZvIdrNfkKJCr/ODKRe9udLlF//wUeI9rImV0NnIM0GCZ2qaecnSLOjFJ+p6Qyk3XyrUtPOH5B6+SmrpkOQ9opNWUnJX5AO8sZISccwzSOdc66kKyB1izMPoGw14WWQekUWAShbw2OQFoOEXCUdgrRbNF4o6TJIi9zrKSn5B9FpmQwgSre1Dkj98lOVdAzRqAyREUTp7n8XouUg4UslHULUK094kLK1BNCkSl4Qva+kg7LNheiSklbFDBi5VlW0X4UZTVoDqF9FRZASFa0aXU0elmlcNfU0AV6eV68KqGAyrdWD8mqiqRii9bNKorGyzqnXKtKf49BPhShS0B26Z0EpnK9yBBqyGgmgfEW3wlPa3y5AhaqM39Zof1FPpntCiuA30xH7VJmKdyH8Fr6uKAdHUtaqHxzbrMCS6J5c9Q5rdFT7VJECVzf1k47215GqqwmUvRll/fVFOgITPzvVWbsr0A24vB9TSvuLhHJwq+FigFDKaiyBrjfVRcOSsv4OeOo01nFV5GKDGHHUUdSdJaUfhOs1XaKSaJzTOZuaGu2rr05wTll/3Vp1pbt02cwoXWmEq3M0T57C5RuCyDe4rJldL9gFllvSqWNyQxRcL+inkjIPd43ultLXLthfXiRTz/QGLliw24U8IxJk/ND+4jT8RB6yefzbm4EVRDiJsZ0MY7u+tnj+AweapLiIlbMnAAAAAElFTkSuQmCC","e":1},{"id":"image_31","w":109,"h":53,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG0AAAA1CAMAAAB8+5X+AAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAACXBIWXMAAAABAAAAAQBPJcTWAAAA5FBMVEVHcEyZYE9oNXKjyDuDVl5sNnBiMnd1TGeVdVKdvkCHkVOSKFiVKFZzaWZoL3OhxD1zamW6JD1vY2hgNHeWr0fCIzeLmFGjxzyFjVaixT2JllG2JEDLIjGNnU+LKVxxZmaoJkhXMH1oVG9dP3hfLnlnLXOGjlVvLG5/KmSHKV+Qo0xhRnSPKVlvYmhsXGtkTHJ1bmOlJkp6d19+gVuUqkmBhlicJ1GKl1F1K2qWKFWuJUSYskVzamVaOXtZNnx4c2FxZ2Z8fF2buEOlzDp5K2eevkCNnU+1JUDCIzfNIjC7JD2hxD3ddNRjAAAAIXRSTlMAIH3HMFrAQBA8WaNwgN96kVe3l8KmoO7El3vQ6tjM4OABCBPCAAACjUlEQVRYw+3Y6XaaQBQHcFmHYdEgiOCSNGLcs5AYI6Rp2mjikvd/n46ctDkgBGYYzumH3hf4+Z8L945UKhnFA1k7+ShNAFKlrGJky767+3V7+3xz8/3n5eXVVa/Xu66zfAlUyx4M7u+PtevptGoINCmp1X14GKRqU9d1DVoJeWvy9vaV5rpPTz/OqyyFJkJzPsnUXKShKhoQWQjLq/X7olDEenycz+cYWv+iSugxzssLvnZB5tWar2TacIjtQe79lVhbLrE8yVm9F9CGy/UovwebCCukIW50CvJ1bIWquDYanzLZp8itaGnjsZI1XyQIYa3mcBwNbTxT8z+YiDXNItpsNsvZvs+xLLesLqnm+75CMK6RaZNk8/3FQiXcdECrn+FqiGuTb4eQxMq2WHhKoe0Xkrk1z/O+6QmDv4a1JgRWzKt5QeM4HgexHx/BELNP0gu8IDiKxzRXnFODEu65smJmtiDYNOKzDIaDa9U8mHg5edaopmcLtc1GTxvK4eQyTaslw9xZGcGoJmcLQm2/j3fPSZ7Ktm23NE0GIPPdQceacpJI23di8bjsHXBWR6WxGisAVAnJgaqkaNttNN5h6RBsHDEsgw1LRT8CgfG+hdq2A2IcyX47/3svWaf3DWG73a4RvSvQ2abJJ3nwIpMTceVpu7D0CPdHm1DQFkfZUEXScXSzRfu268TGisSV1rdO43ghSGY5WkNPnkwOLe2zb201fQjKdPvWVr++z8IutZPMosLmWVQ0RWfyLRG5qOYrOsZylqwC2qkCcK8e0CbTFIEhutDJXUxtrahFvmfIdv5/wqJa/NMQb+XQRIPw9JICWulaVWQF6t/zePmkHtUOtwMBVEosCXxU5X/9A/UbTDkfoLCHclMAAAAASUVORK5CYII=","e":1},{"id":"image_32","w":52,"h":110,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAABuCAMAAABfs8BIAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAn1BMVEVHcExbNcI6YNcRpfQ+Zdc0ct01a9sMrPYUo/MOq/Yblu1HS80Vn/F5CK11DbA7X9YQp/UMrPcre+JDVNFzErJ6BawjiOcdkuwXm+8Ro/MkguUuduAMrfYGt/sxbN0Pp/UUn/FjKLwZlu0ejeorf+I3bdpvFrQBvv48ZNZCW9I5X9coe+NIUc57BKxOSMotct9UP8ZaNsI1Zdo9VtQKsPjF03fHAAAAFnRSTlMAP7lcECVZgj6/eX2kjF2b1ujc3LjcmWYWHgAAAtJJREFUWMO12Hl32jAMAHAncRLnKIRQoAeMdivrsbGr/f6fbaQmh2TJR9+Wf3m/JyNfkoWgviQVwZ9cFOGo3G/LYNTstwsZaJLr/fatDg3UoZ0KMuruHTVBqNZolweY9OqMdgG5yHv06J8LuRnQo3cuks8j8l4XzQTtEs98b6bIc13UAG290p5+gcgrVInQtU/aW4yu3NsxWxvInfbaRBvXDMsbArlClRRaO0K1JGrtk3RDoofMhuYMsoZ6YNCtJVT2jUOWUDGLDmwoecujJTs6gBqAnrhQMUAFREwo+ROgHKJnOlSGUAERHSqGKKkh+h5Ro/sEkcoRiqnRYaQQ+kFs4RijFKM5MTqMBEa/pDk6AzUYVcauMFGB0W+MnjA6XTkGmqE9+8dEiYEuIaoIpAx0D7MeE0iY6AKgFwo1BroHCSdRYaJpKuYkyk00TcXSQIvu9jXR18mqeDFQd4ArAo3ji2gkCDSOr2LQzkTj+GIGFQSajXmgUU2gfnzylUE5gY59HjikKHQeXxWEzutvziFBodU5eQTSNceCQEed9GcC6ZqooJA+NV9ZlFPo/U+lgehSZ5xFikKrj6CjniYWCRJFDrT4CCooNHOgnEIX/wMlHMosSHHIMk9CcIlIQ1FkX7CnnHNoGYhSbhPmQwdGrz3yjLAgfYilFqSYTXja70Fo1l9PLJLcGXG6CFkkuCOsGx+LGuawpK7PARXMsXzKH49q5gKg6ogBlQhNSonIG0WgRmSQgmg1LT8iTzSzlaNDT5eydUT3I4MEQBe4tvRBuIyVBxo1E1TZu5oRFRMk7U0XiSqqc2hhFdY32T1aki8GCtZ75yUxoMjZUZsodjf8JmLfGGQ7dgAIVZZOfI1RplFs7d8xUhqlPo9NJUSZ64lKN5IAzd0PWwZqPR6C8q45nqCD1wNrCZHn41uyfRtRJjy/ZEBlwDNp/1CchLxcDpMt/tX3F+UidwW7EEGyAAAAAElFTkSuQmCC","e":1},{"id":"image_33","w":58,"h":106,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADoAAABqCAMAAADa67LtAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAACXBIWXMAAAABAAAAAQBPJcTWAAAA81BMVEVHcEzOwR7QxR88R8RGSKyJWBfTyh+Jaj+FViCDXS98SBqSYhE7SMh+RxVZR3h/UCVrRUVTRohmRVNVRoCriRZ9SBhBSLbIuR08SMVtRUCUZBGUZhG9pxqhehVpRUrEsxx1RSk4SM7UzR/Wzh9QR4/TyR/WzyB9RBN3RCNgRmJuRTtlRVKlgBW0mBmwkhisjBeohhahehS4nxm8pRrAqxudcxQ5SM7DsRyZbROVZxLHtx2RYRGNWxCKVQ9LR52GTw6CSA5NR5bLvR5IR6VQR45TR4ZFR61WRn5ZRnZCR7VzRS/PxB9cRm4/SL1qRUfUzB88SMU2grNyAAAAJ3RSTlMAQIDAP4jADzggqMCl3ItQbSmr3tJoYmd702Lm16PqnPDYq+ao4FBlIB95AAADZklEQVRYw53YZ3ubMBAAYCWGCAEGYyeOR+w6adoMd6UZTZrYaevu4fb//5oCBs1DEuijed7H0h1Id0KozsD7qOHAB1eN5eXVVjO5+/byar+ZfJnSJ43kq4weNJGvc/qugXxT0Npxmrwoad04TS4orRmnyTWjO7Wke8vR93Xk6E6gpIa8F6l9iL0HiW7bS5nahpgsFjK1DDFuPyrUMsTtDyr9hG2kfwJRmxC7JyC1eIv3TmFqzo43q6BHxuDOTiuoMTvDn1X0l0F2z5vSzrmGarOTrJtSPJXpLk912RnOJTq5sKTRXKYjgVZnJz6TaWBJyZlCR65An1ZmVKFjHAj0b9VCfyvURdc21PmuUkIkCiYW91QaoNiGRt9UGiNXos+h6X5R6RihQKLb0HQB6iI0NtPoM0AJwrdG6nwEqJ9uNTJVt5geRGP5kEyp8iYOlgBtpw8CE01WEN1Ln4xNNARpekrgOwN1vkLUzzZkhUqfTgukXnZ+KFR8/50fEM2ChAIDbYE0CxIa66nzB6TZUUru9bQFUj/fqvTU+QfSOD9l9TQEaR4kFGgpvgGpmz980NIBTAlYcon0EKT+ps4DKHubkhuQxptaBKDsHe6DdLZ5GGhpCNJNkNBCSw9Buql7PYgesdRAdFgUTxCl25oD0k5R62npQKXr9bQoItsQ3dLQ+bpbHLaPWhpC1CtOeJCyDw6g07I4hegzLS2ChAKI7mhp2cyAJde2jg7LwtZQrQG0nO8eSLGOlg99Qz2s0m75yFT7q3mNy6WClPDbi0xp4wBR/qxSaFfb5/C9ivLlJLS5gijS0B4tNKEqXCxBJBqxpQJU7OikDSZhS1Wp1JWJ21qP9ZEqle9RxM2UzpcAHYdcWIpbeKJpB9Vmmz842Hx9hR6oXW/I0YgtVaFAHdznKJ2vp3RXUH/Dna9svh2ZTsCKn53qEbdUke7C7X2fUof+JrWDFRJhSlm/LVGvqi8KC3rMrgdEWilRv6B9+stUoJ6m7ywoXRDhe7qxTqJBTrnUcDTQX50kOWWpGXLdlenSJcwoTQ0W+hzDyKtw9YZgMbK4rGmtlsfctcSGtj2bGyJntaSpwUU97FrdLaV/u6RL7eR0FtvewDlLNt+8RsTIetD5kqxu8lCT0ZlPO7iRJNMuaQRR1G021xrjP5N8dkjccU8kAAAAAElFTkSuQmCC","e":1},{"id":"image_34","w":81,"h":159,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_35","w":91,"h":124,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_36","w":77,"h":122,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAE0AAAB6CAMAAADNqC6XAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAxlBMVEVHcEyiUXPehjWfTnePSoSBOpOVRYGGW4ZxWpVoRZ8gcL3ojioQeMMYc7/pkCkrabiFOZGeTXjXfz05X7JjR6FLVarVfj4TdcHpkChuQZ3GcU7HcU3iiTC+aFbHcU20YGFCWq7Nd0anVG+BN5XiijCdTHjagjg5X7IxZLWQQIaKOo4paLgQd8JUUKchbbt3PJlgSaJvQJy4ZFzCbVJnRZ+uXGYZcb6rWWnSfEHVfj3rkieiUHSYSH6URYJKVapOU6kFfcZaTaTrzM/OAAAAHXRSTlMAwjqON5xbECBfOX+4Wr1/2OxZr6jQrt7g0HXX3Ak7JjIAAAQrSURBVGjerdp9X6owFAfwIQiDICQ1M29mXc0se7zdbk+3uu//TV1EkY3tnB0Q/o3Pt21nDPabjNW+jj3W2OWNxseNYc5oPD5sCmud/BqPzxrq6sFJph00gh0/ZlozXbVP19rZqIFiWqe5dtbaHftdaLvOEW79EbQdB85JzkXtZVdM1nYZODd5L2l7O2CzWVmrP3Duh6q91sb+6rSaD5e70Gr1Bq690Gv7tbArQLuohYFa9RnX/glre9UxRNuvjiFaxYFr3+FapYHz7wxalTXOfzBph1Uwo/aDjj2ZtalHxigasQz8nqTR5q9zT9NI89f7R9SOKFgf0KyyNuVmrX+j12xVM5ehdwNojtJTcxniL0CzPFUzlcH/hDRX0zbD0xB8QlrCbFWb4uWcgJqt1dAy9CcTQEs8ZqnaG/ZS7U5AzWbsXNM2pKjRHNY444p2MX2DixrMYc1KH15d247gBwrRnPQLWqe9gYN2CWsJgzSgqNElornpDZZW0xeVX2Laask+12r6oobXiGavVtAKWnyNaatlzNVruinCrzGtnW2K9JpuioS3mOawrAhaTTNFoltEW3SyexJAU96p3i2mXbnZPe+Apky47jOqZf/doWr8GdXa6w9zSCtPkRDX1m85m6gFS1Rb14BZRC3ENXd91wzS9ktNQ7VN0xyiFuJaO98EkjS+xLXN5LRBTXq0YlzbNI1ZoCY9WgNccza3JSQt+ka1Tj4eM5IW4poP78R12gDX8gXCJmn8G9XyGqRFoGgRruU1SItA0WJUG2678EHSQlTz0QRD1Qaotl2kbZr2jWnbGjCrAW1bA/aXpHmYNizmEaYVa0iAab4h+ammFS9Ke3etV4yuhWl7JK2oAVvQNKSmQ2G3imotiuYbEzP1OwTWuBiZIdoRIzynQg1YB9P2KZrQ0bQIiCa+6sEVSYwMFljbWsy8WoodtTFNepsGgOYQcstsDyh/0yy1Wl+85Qprm/wtqH8DijVwMK20E4+1mhhzuJhW2hcFOq1PS2gv1JBgqdHEjrIOoilbtlCjiVsAXinNi1StJ4XklVJQT9V8Yhatiy3VL1VPHjZIe9XljJGsfX51pabD+Zt+1/xcapvUURfUgHg2ljW5o1Dq/gId3XG5p1JHWQdqGxjOyvssqaMcyC3HcBoVSZr0T31Aw6KtgaB1KecL6HFRJGix9Bd9Qms4exoUmpS5OlrNFKQWKUHfePbx6BhT2UGuyR0dqtqIEBhHuRZIj5WabFukQ4DBRisdpZQ14tlJtNbk+dEraw4jXlnGJQ+bV0q2LfoPCIKsbQF8ZpS4Vc6buqu2lY6zBM3iVTDmpZq8UIq5ZaWGrYPLeQycZ9k1fnLRlYetl2uWw2pcfC53dJP81LJWdVXP2jp+Mz8rGaZaUxbjTw/DpizPH/Yc1hQW+w3+4qjG9R92vwL6rN3fRAAAAABJRU5ErkJggg==","e":1},{"id":"image_37","w":75,"h":124,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEsAAAB8CAMAAAAW773NAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAACXBIWXMAAAABAAAAAQBPJcTWAAAA4VBMVEVHcEzr416oz1U+sFS51ViVylSKsWeIul8ph2yWy1Pp4FySylPj31woqVUusVDw5V8ie3osPI+hzVT77mT162IrqlWJyFLf21kpTYqHyFJNvE5bvk8ijGwqRY1vw1ArQo3k3Vri21kjqlPo31wjmmAikWfr4l0+uU3u5V8hgXXS11jL1VfE1Fe90la10VbZ2FiOyVP872Vbv0+u0FUheXx5xVGnzlUjoFsksE4jpFgms0slYIQttUwztkygzVQpSosii20ih3CZy1RKu05RvE7x52BmwVCDx1L26mJtwlAjboFtkvF7AAAAIHRSTlMAV8B6MIUgDz1E7WmaW7+wun/dxXmWqtaww+6z7V3Y6E4TtsEAAAQFSURBVGjevdlpW9pAEADghYSEBBIknIIgoNarh0fFtlaw1hbb//+DShDILtk5cjzdr+Z53Z2dhN0ZIaDRtEVeo3DRyc3qXFxWc6KcTxeX73PCaqH1oZIHZY1X1sc8sOraunUyU7a7saZm5oQYb61Z1jTrSFaQDTPHkvXczhh52boqZYn8WLWuMmRGc8daLMwskVfntbiz0kZ+FLeGKTezqrHu+ilzXmf9MVLl/Ehr/U7zZnYAq5d8M60RYN0kj38VtF76KZYIWDcvCePvjBDrZznxEmGrlyhkLmqd+kmS6wi3ThOErEZZj+yQ2Uek9Wizl0ha3332EmnrGy9k9juO9YUVskLMCnSWzwlZLWYVddakxVli3Ap01qTMWGLcqmite5teYtwytdZXMjHONJYItNa9RyxRa7X11jG+yqrWcgAL30tXYwVCANYxtpfmmca6FaINWAfIKpuAVQGsE+S9bACWBVlP4CrtX4AlAsA62QMzArRKkPUEJVlVby0PXg5oQeF39VZ4IgGtH/rwW6+w1Qatc+15sYBYFdjShr+GWBZsnevyooFYYghbmonZr4C1uie0YetzWRMuzHIQKz6xJmrZiBWfWAO1xD5ixSb2ilsVxPq7MzHrGrKKb982zOruhJ6wBGY9qMnfpKw2ZtXVrKesCmY9qNsIWtN1QFFrIFvXlCWGmCVH36StEmbNLXkbSctDrbq8jbC1/pc2anV51ubaOMSsuS2lBG0ZqDWQUoK2HNSqs6xtnQO1ulJ6wda2ANPHrHkyy0AtK5FlolaZY0UVqx5mDThWcWv1MauezDIyW0H0BchszaJXrZej1edYWN5LNVEjsxXVl0yOVeVZosfI1SbT8hkW9o2eSdVVg/FuC6blgNYh6/dRtgTj+4WcAaazopADRn5Xlz+QPKsFWfK5yYWtQHrMA6xD1hlzOnuWj8j072N47WBZoqe3Bqy7wtKSi7QtvaXesUyeZZDnnFWKgZbcCTDp81cYMdBSWhRay46XJziWr7G6mlo7YO3LT7XIczRYg4lZXtzS3iEbeutKfqZM3js2q6QtQd+HoHrhylI6Cj55T9vsJW21yPsjWkNWksIj77XbkHUoq0zet6OXxI1bSlII1UIbWiG2YwXKA4+yRVRazXivSfm7L1kHVG20sGupbT5Dshg1W3dnXkpSeJG1x+n0ueq81I3cWgesTqLpKvNSOrb21vKYPciObKlJsbaO9wRz2B25F6BuJF0Tjb2bkuVorEQ9rEJkKY1kY2Ul7K2ZwaaPrGxkK7R8kXDYxfW81M90aKXoBVfW/Q4lwZZWWaQY1lsvQA6+NZl4It0ohZYSfE4fBtqC/cWdnPleempVShvmRS03tB3tmyf+x/gHuf5GxB+6iq8AAAAASUVORK5CYII=","e":1},{"id":"image_38","w":77,"h":122,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAE0AAAB6CAMAAADNqC6XAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAjVBMVEVHcEzXiIjipH/ERZHfnILlrHXmrHzVf4jfm4LfmoDyz2D01VnESpH431DptXfajofVgIr321T75kjQdI3fnILbkobrunbdl4TiooDptXjtwm3WhIrUf4vTeozYiYnajojObo/kqH7mrHzsvXPvxmn33FLnsXrz0V3DQZHMaI/KX5D97EPIV5Dxy2PGT5C7ysPAAAAAE3RSTlMAwILMoiDSOVwQYD2CuqbZdN6OeZvAhQAABG1JREFUaN6tmu16qjoQRiElIYDfB0W7t7tVqz2tp/v+L+8ggmSSmSEg/q3P6spMDMkbgmDwZ5EEo32ScL8YDRbP9/twNNjv3/v9PyMNVf+qaPEosMWvOy0aAxb9qWnzMZr5p6E9P9Rk/tbSFk/PjLcHbf/+5ByJ1+s3w+39KZhcQ9pThdNrmzZ5AlYUFu2JwpUwmza8cDrHaPFQGEobVrgox2nhUBhKG1K4aEvS4gEwmjYZACNpX+EQ2JZy++oJO2wZt/evXoUThwPv1meN04cD79anDfp46HJ76QE7drp9J/6wkrY9sG7fnm2Qx2O329e3X+Hi4+VB49y8Cicvl4uX238+z01VwVy30KHJbloJQ90il9bdhtlu19BgT2N3pJ1tEBXMdStC6dK62pBuStrugvRUx71pcrch3OaBcGl/+XbeYJDWuC2CCKGxbVCbTY2z3dZJECI0zbVzcwJuRk/LrSkye/9OuA5sSDdZ7pIQGt2G2IDZdYtuG7g+tKQcJuFW5GW1BUb7lyza6US63bbgEUojmpq+nkwcrNutdfMeNAlhsKfFbcleozS8qdNXxk24u2iWJj5uNKpu8r7zxWgv6Dg/GLfqUCX8adMPzq2qdIjTkCmS/nzQbtv7CW1O0JxnavLzg7tVPa2mR5CsCZozRVafnFue1AcjP1r2+fnD1E3cj7kUzZ4i00/W7f6Uizxp2Zl1q/ejc0/a9My61atrQdFeHDXGTdVrnydtembdRHNu86LJ85muWznf6skp/GirM+vW5B4hSQM/rSXndtg2c7PwoqVXzq3pQSD9aKsr66bJkzhKW/JuzQIhvGjyyro9sqfQi5ZeWbfH+lB40VasmwraJvjQpqybZhMMl7Zk3R6LtPCjXTm3Nv8LB9GgW7tGF7kPTXJuqv1azri1v/qMc9MdyU8nzXRrexCIZ93MHgQhR5t4uWUtLfejMT1Vxn6YpcU+8010JmbuPoR2kyDlomnmY4H8nc7MA85AWutmnnjygqFNAnJFeuCOAWgCQ4sDcrVsYDtzoIKjgadphrpdLrFHbomc2m40dx+izK9wCYZ1Pp2idRNW2UiatSPHn6cSpr00zTrsZpib8ktokeTnjLiB/6gYmnMOx/ZI5hFAMvmbe45JXbcZCOJ6paCJ65aC41y/vHfqzDdw1lG0G5YzprYbGGhC52/4qdl207BsFI24u1tBtx08BeM0+j5Lwp7OYBREuZHhLDhnwY5KKrek06gUuCVI2RwaF20tDbeZcyWAJLSazQMNNwH+skXdNJ8ILls3kLnGaN7bFaSmDzdlzw83i+5OZZeNmzM/bLfQIzBOG7cM/KzcnDz0ugRY1m7W7Yft5nl3kt7dYNlmtpv3tU6VcW1SOFDoFvq/QJBVtNi65jHdet2Cz17tskWmm08vzXGVTVDWQFs33ffOLz2dBHGfJQa8cqFOGezo3S3vOchmMTuBgdZZjRp6MZ+5d21KB6N8VEkbi3W7HxuNlWgVZaO9IyT0iG8cDfj8D45ZCDoCHh+OAAAAAElFTkSuQmCC","e":1},{"id":"image_39","w":104,"h":194,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_40","w":110,"h":192,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_41","w":89,"h":189,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_42","w":84,"h":194,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_43","w":89,"h":189,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_44","w":89,"h":188,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_45","w":176,"h":97,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_46","w":144,"h":143,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_47","w":142,"h":88,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_48","w":112,"h":83,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_49","w":214,"h":159,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_50","w":134,"h":247,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIYAAAD3CAMAAADv2dzHAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAVFBMVEVHcEy0AFSBAKSoAHasAGqtAG6OAJemAHGiAHmvAGO4AEmUAISvAHW2AFCZAHuCAKGOAI2eAHKJAJetAH+rAIqyAGusAFy1AFmjAGqoAGS0AGKxAFSKZx46AAAACnRSTlMA1sTYZrmGKUaXhuHY+gAADRtJREFUeNrNXemaojAQDEIIURlvFH3/91y5Qo7uTqMgy9/dma+muqo6CUkQ4sdPJv6DR23O/wOK8/ms/gsU52J1FMfz8XzOV0dxbNjI10fR4NisjaJj47w+iuPKMNRxZ2CsZxXVgBiKkq+IYjeyka+GYmezsVkPxc7SxmY9FDYbq1hF/XVk7IxjD8UqKP4MG11RVnCs+vtrUQw4mueQr4Lib1Boz8bPYTQoejp6HKs4Nv3zatKxcfgxipNh4+iI4+coTqFCz4efWiU9nTo2Go3aufHT4GhRnIw4rBQ9/NAqDYqWjZ1VlvOvg0M/Tg+bjaOt0MPmZygeAxt9mFvS+FlwNCgeJ5yNw69Q0GwcfjGBzOoWBqGNXzg2q2uHjT+AjfxnKIw2dgAbi8Mo6prBxtJWUXVV1642fDYOywdHhwJlY+gpS/fYakQBacOgWBZGUlVVRbIxaFQtjKKuCW2MbCwYHLLqyWCwsZxj9ctBQWsjXw5FA6MmtXFePL+yVwvDpQNJ0eWCo0XxatiIp+hyMNSrtNiI9JSmKIcFUbxiThnZWARG0qB4GRQRbbRsFEugKMsBRiRFjy0Zi+SX3L5RlH1RGLnRsjG7Y/V2a7MRT9HDEsGRbRsYPG0sx0aLosPR5Ua0wx4WCA61bZ5WGi9uT2nZmBWGKrcjGwynjLkxa3AkW4sN4xRcG2NuHGa1av+wnWJyY8bxlx5B8LRhpeh8+ZVttw4bcadYPWU2GEVpULym95S5gkOVpcdG3CndkvmsMfruZ9tyZIPVU+Zno+mqIBvxWdthvvzSpUWG7xROT5kFRlaWIRuTesocMFTZwShhpwxkSGtZNGBjhhi9l/eyjDollVRufA8jubtk+E7pYWSpz4btlK9h6DvFRg/jXRTRL8HBufFtjGYDinJL9JTHKS9OJBvfwVD3u2GjxJ1yeoiczI0vYUAooJ6ihbTepwBO+SpG5QiDdMpJCXJk/h0MfW+fsgGCOqUhQwp1OpG58QWM4v6MsdHjKER2CpwyExvqee/ZuEd6SvomLsLG52mePCk2bKdk1rs2eGT+OQz9NGzEesr7f5/okfnHMLLns2OjjPWU+l33IjLe+DTN1a1HMbBBOOX933Pz/hNJ0cOnwng+HYniTtFNwIwDDrjDHj4UxshG6dIROEV10liAjUYYTw8H5hTZlPAUZUN9JowABdZTmqaVtWNRko0PelvSwXi6RYGdkrY1hNhwnTIdhr7dGmm8QTzjPaXdLZxCbDgpOh1G0YFgsVHX7Y88YDbO37Bx68mw2MCdolvgD8gpLhtTe5u8NThGNkrcKW8crQFyBhsTYWSGDJcN2Cm6Q/6Ia2MaDLW/jTie0RTt0uABs3H8nI30dvO14UvUcorsoD9gbZw/ZiPvQDhO8YY9Nhvd3v6sW1igcyOfVpJ9jA3LKUkvapgNN0WnDDjSFkTnlMrLjTJ0Sn/QIYXZcHvKBBh5j+IZpugWWvsSgzRmZaMtyf7m5UbQ2ow2dJ+6j3nZSPf7vWWUkY077JS+d+t52cgtMm5hTwm0IQf0D45TNuyS7AcUBoSdooFThmb1QNhwU3QzpSQtkKdVlrGn+GwkwkgDY+MDbWQtitEqIRvePGU4lpTNyUZTErcqFd1TKtOR52RD2ihcp8A9RQ8/+ahZbLCG5sWAwqmKw4anjWGkrWqUDSc3Djx9XiJseE6RRlM1qo3zVDbyDoUBEs8NM7TUOBtObjBgqItDRpgbd1uhDRnJyCPKxnEqG3LkYn/zcwNkwxwiVDXKxnmiNorLZSjKjZkb48/Ws7GRGhhQh4VG5nqcWs3GRmahgDtsMPpSljTmYuPyfvYjHQOQCsuNcjuSIep6JqfkF0sajNx401H40vg+RdXlYnDA4w2PjXKbCFsaNa+nRGDoHsVlj403AjasI7+yxrUxhY2OjIsbonRulMKRRj1Hh9UXS6GoU+52blgCLWq2NjZ0cl0tbRhxQD3FFMVaxcpINvgjc3mxUeyxnmLDkMKVBrPDUjDUtWfjYlcFHIuamtjLNnXFzg0Khh5AhOmFsZHYf0VFaYM9T1HX69Vxit1TkBS1D+hnFaUN9qxNjyAIp7i54fx8RWmDy0ZLhuOU+FhUO+uns7CRewLl9BTlS4OrDXyZpeXCBhKfwybOCKGqarZTUBiZLdDLfk/MYU2KFq40SG0wVwJThw27qTxvSIom7tJ6jA3OSmAj0OvVc0okRd3rNKq64veUDHWrL41gLm2l6LbF4fajagobBSrQlowr0FOwsagWgDSY2ihwgb7JMCK9+B22CtdFlS+NqmJ3WASGtKRhnLLHR1+lL1Dh7N+IdlhF1cR1Cjmj9wWaVdWU3CBq4juFXt8ohS8NWhucN4/SZQNOc4sNd3ZipFFxe8qGU5PArxAbKpDGhJ4CwyiuTlHswSgyMncGf4M0+B12g2WXTQepjb6nFKE0Jmgjx/rJdRxtBE4JO6zv1vbsUl2xx6I53k8Mjv2F7rANDr8nOOdT4imak3Z1h6JOWbz3Kb64urNL7J5SENKwx4AXSKBjT9H+bwi3rZJsFIQ0LDbAdZaxw/oCFfJVVZwOe6C23V9DNui1L1+gwt8TGGODTo0rNId9emtf91CghXuGKtphN5RCI6OeMUXvApcGaw67IRVqNVjIsWaLkQ5akrvjCs8Nap/5xoBA5yk3hw0VSqNDUTF7ShZT6BVa+/LmsIFAi3D3LN1TChKGlxvYeCMLpeHvM4+wQRrF7ykAkPYRgDS83bMYGwf8mF8RsuEtBNpslPdAoKJ8MXLDYmMDT6GvE1IUEGgR7J6NdNichmG1WHztSwpQGq+KP0/J8HGop43LHnsPG/6O5MVxitVTFBUbYXqBKSpAaUzqKSLKBjJPGbWhgRMaL7ZTiEN+V8wpYG4o4LjKa1pu5IKVXuDaV5eipYTO7rCcMrKRcdnA3y4Bv6J0TvkxcgOev17PgTSAGX2vDfDwzmtST6FmbGa2dLViI8wNLRBpTNBGLqLagMY9dm4oSBo8pwzjDWy9yWUDGJmb3AAStD3KNC03VJwNcCVwzI0MlEbJ7CmdNjYiyga9vvF8QiPIHgW7p2BLkYBT4DePkEDdc/ScnlIIhjau+Mr9/QlUVQ1bnZjawF85Ak5xgJh5SgJNLvpz9AynRG72BJzirxJ3OCCnSfgcPTpPwfcy407xVp2gHy63bKdELp/FneLukIQEWmyhOxYQNo7kNafplZ7DDmxAdMJ3LBC5gZ892EApGnbYBBwybdnaaK1CvOmTtlGu0EpgiwNsBfAdCzgbGQMGNvrqYIBrAfAdC3huUBtH0Fmbvb4hBSKN7YSekrNgeCuBzvoG6Pdk3MPL6inU4RhgDrv39288b+BCZrephu0UcnN5wZnRa0waU3oKeVJIXRkdViF2neKUyE57fywadlg4NAR0GwnRUyLHplJsLDq+h81wabCdEjt2sEFT1IzMBWLX8DYSXBuxM2R52FM8x2qB2RU7OR6yET2DkQUd1p/QF4Q0uNqI78xEnGKsAgs0I06Oh2wwDqQAY9FLvCYavWMBYIOzoRsYizqOVZQ0eE7hnGOT8Fh0QAHXRA0gwDsWPDZYZ4RyepU4I6XBcgrvPCHilJ4NQdaEow3e0UJFWOV2kwK3K8spR8k8BUK+x8hido3lxo57MkfCA45OHIKyK8cp7NOeudfZ7CzXtDR6bRA9hX+SrrjiOxYKyq4Mp6QTDtKBHbbTBlYT9xYjXBtTDmdLaJ7SSiNWk4hTdpOOAeeoU5A/Bj1H72rjb9qB0wKZ0d+Qymb0bSQDGzsppj3grG2P+kT6Zx7hnpJORDGIIxgFYjUpWU6ZfHdABq+ZI39OEdz3BWpj+g0GCnq7tEeCvFmFjDvl75MPgaWWYUenIH9Pgt9iNGrjo8+RaWhGj9REhefaAqf86U9QdJb1Z/ScmiA95TMUrWWDGT1eE5iNsSifomgt683oWTUBesrpIT9F0VjWz40Mi9DYXXCp+PwJ30oTNUFvMfoWxbsqHhtUTaieIr9BYVWlZ0MTNSF6ihbfPbZTLnhNZAncfjZudPoWReMVWxtYhcFbjF727UHi66pY2kBrQt3bM8cHJd0ZfUHVBOkps3zWUjs9BflPxP0b9Ty3qBZ2h8Vq4p/KHZ1Sz3WzbWppA+FXwifHX+YWkBme3HIKWhMvvQan6NlQmCOPbyASqwnCxqzfXJWGDOTXJv5Z6X6xZ96b0gujDVhuCr5jIZn7sxdpjyJl1+RNhhZzP3nPhkZrEuJY4lO8PRsFuybJIt8h6Q/mIv8Ynr3UYpFHtSkqiZp0YQ6cQxWzexYud3H32JBisae5YgGxq3ZBlIt+T6rxLBLk9mWWC2lzzIYLYtfMPnlZLv7F7BSRRmKdXZJi8Se/KDg0zNml5CffBZREaIC77hfKDqQm3Z5mueqHw4t+m/nKH3OX7ZWaWqz8NHsT5eofcs+ez2T1z7g39wHr9UHckmx1EJnUq2viB88/H1o65hglJ4sAAAAASUVORK5CYII=","e":1},{"id":"image_51","w":112,"h":259,"u":"","p":"data:image/png;base64,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","e":1}],"layers":[{"ddd":0,"ind":1,"ty":3,"nm":"NULL CONTROL ","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[260.898,561.149,0],"ix":2},"a":{"a":0,"k":[50,50,0],"ix":1},"s":{"a":0,"k":[32,32,100],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":2,"nm":"Layer 2","parent":1,"refId":"image_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[19.171,289.451,0],"ix":2},"a":{"a":0,"k":[476,954,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.721,0.721,0.721],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,19.333]},"t":0,"s":[0,0,100]},{"i":{"x":[0.728,0.728,0.728],"y":[1,1,1]},"o":{"x":[0.212,0.212,0.212],"y":[0,0,0]},"t":11,"s":[116,116,100]},{"t":62,"s":[0,0,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":2,"nm":"Layer 3","parent":1,"refId":"image_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":87.1025390625,"s":[-408.307]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,15.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.215},"t":13.188,"s":[-293.512,-1166.629,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":80.7158203125,"s":[33.872,456.375,0]}],"ix":2},"a":{"a":0,"k":[29,106,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":60.355,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":83.355,"s":[100,-100,100]},{"t":107.35546875,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":2,"nm":"Layer 4","parent":1,"refId":"image_2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":80.771484375,"s":[333.811]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,15.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.237},"t":9.304,"s":[-453.503,-1143.468,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":91.4677734375,"s":[-334.128,424.375,0]}],"ix":2},"a":{"a":0,"k":[29,106,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":58.119,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":81.119,"s":[100,-100,100]},{"t":105.119140625,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":2,"nm":"Layer 5","parent":1,"refId":"image_3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":112.806640625,"s":[277.128]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,-11.278,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.229},"t":9.865,"s":[-641.354,-661.064,0],"to":[0,0,0],"ti":[-256,-2258,0]},{"t":86.390625,"s":[-590.128,520.375,0]}],"ix":2},"a":{"a":0,"k":[54.5,53,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":42.827,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":65.827,"s":[100,-100,100]},{"t":89.8271484375,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":2,"nm":"Layer 6","parent":1,"refId":"image_4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":108.1025390625,"s":[66.474]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,15.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.624,"y":0.756},"o":{"x":0.167,"y":0.172},"t":16.247,"s":[-124.158,-1222.782,0],"to":[0,0,0],"ti":[300.62,-2401.303,0]},{"i":{"x":0.722,"y":1},"o":{"x":0.374,"y":0.813},"t":77,"s":[-804.78,411.671,0],"to":[-10.967,87.605,0],"ti":[11.263,-96.936,0]},{"t":97.466796875,"s":[-646.128,432.375,0]}],"ix":2},"a":{"a":0,"k":[39.5,106,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":51.709,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":74.709,"s":[100,-100,100]},{"t":98.708984375,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":2,"nm":"Layer 7","parent":1,"refId":"image_5","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":76.435546875,"s":[-322.516]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,15.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.206},"t":13.507,"s":[-262.006,-845.219,0],"to":[0,0,0],"ti":[240,-2386,0]},{"t":84.5537109375,"s":[-782.128,616.375,0]}],"ix":2},"a":{"a":0,"k":[29,106,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":65.008,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":88.008,"s":[100,-100,100]},{"t":112.0078125,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":2,"nm":"Layer 8","parent":1,"refId":"image_6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":83.5185546875,"s":[-412.496]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,41.722,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.183},"t":15.715,"s":[-512.143,-859.842,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":103,"s":[-350.128,536.375,0]}],"ix":2},"a":{"a":0,"k":[40.5,159,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":58.388,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":81.388,"s":[100,-100,100]},{"t":105.3876953125,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":2,"nm":"Layer 9","parent":1,"refId":"image_7","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":101.78515625,"s":[343.807]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,24.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.249},"t":12.53,"s":[-527.013,-1046.968,0],"to":[0,0,0],"ti":[-407.77,-1996.524,0]},{"t":100.2724609375,"s":[-502.128,488.375,0]}],"ix":2},"a":{"a":0,"k":[45.5,124,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":59.106,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":82.106,"s":[100,-100,100]},{"t":106.1064453125,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":10,"ty":2,"nm":"Layer 10","parent":1,"refId":"image_8","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":101.15625,"s":[214.936]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,40.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.227},"t":10.553,"s":[49.872,-1251.625,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":90.2548828125,"s":[529.872,440.375,0]}],"ix":2},"a":{"a":0,"k":[36.5,156,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":52.324,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":75.324,"s":[100,-100,100]},{"t":99.32421875,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":11,"ty":2,"nm":"Layer 11","parent":1,"refId":"image_9","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":82.3828125,"s":[-452.243]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,23.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.25},"t":9.722,"s":[17.572,-733.066,0],"to":[0,0,0],"ti":[0,-1.333,0]},{"t":103.9873046875,"s":[57.872,424.375,0]}],"ix":2},"a":{"a":0,"k":[38.5,122,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":52.705,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":75.705,"s":[100,-100,100]},{"t":99.705078125,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":12,"ty":2,"nm":"Layer 12","parent":1,"refId":"image_10","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":115.109375,"s":[316.435]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,23.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.211},"t":11.565,"s":[-183.479,-864.334,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":100.826171875,"s":[-542.128,480.375,0]}],"ix":2},"a":{"a":0,"k":[38.5,122,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":33,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":55.999,"s":[100,-100,100]},{"t":80,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":13,"ty":2,"nm":"Layer 13","parent":1,"refId":"image_11","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":84.4169921875,"s":[88.571]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,24.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.173},"t":15.813,"s":[-618.369,-911.114,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":95,"s":[-486.128,536.375,0]}],"ix":2},"a":{"a":0,"k":[37.5,124,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":43.172,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":66.172,"s":[100,-100,100]},{"t":90.171875,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":14,"ty":2,"nm":"Layer 14","parent":1,"refId":"image_12","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":83.9404296875,"s":[-251.629]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,22.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.191},"t":15.252,"s":[-420.029,-756.057,0],"to":[0,0,0],"ti":[304,-2314,0]},{"t":73.033203125,"s":[65.872,464.375,0]}],"ix":2},"a":{"a":0,"k":[38.5,120,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":53.378,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":76.378,"s":[100,-100,100]},{"t":100.3779296875,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":15,"ty":2,"nm":"Layer 15","parent":1,"refId":"image_13","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":93.32421875,"s":[-221.347]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,59.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.243},"t":10.837,"s":[173.826,-1008.003,0],"to":[0,0,0],"ti":[96,-2098,0]},{"t":105.357421875,"s":[-158.128,448.375,0]}],"ix":2},"a":{"a":0,"k":[53.5,194,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":38.935,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":61.935,"s":[100,-100,100]},{"t":85.9345703125,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":16,"ty":2,"nm":"Layer 16","parent":1,"refId":"image_14","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":110.423828125,"s":[-449.185]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,59.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.142},"t":16.032,"s":[-270.448,-966.067,0],"to":[0,0,0],"ti":[184,-2394,0]},{"t":84,"s":[-638.128,552.375,0]}],"ix":2},"a":{"a":0,"k":[52,194,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":38.72,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":61.72,"s":[100,-100,100]},{"t":85.7197265625,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":17,"ty":2,"nm":"Layer 17","parent":1,"refId":"image_15","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":96.00390625,"s":[183.632]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,58.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.218},"t":8.6,"s":[-186.287,-660.152,0],"to":[0,0,0],"ti":[128,-2218,0]},{"t":103.9892578125,"s":[-614.128,488.375,0]}],"ix":2},"a":{"a":0,"k":[55,192,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":55.063,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":78.063,"s":[100,-100,100]},{"t":102.0634765625,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":18,"ty":2,"nm":"Layer 18","parent":1,"refId":"image_16","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":90.724609375,"s":[-93.048]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,56.722,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.226},"t":9.443,"s":[-308.83,-718.718,0],"to":[0,0,0],"ti":[136,-2018,0]},{"t":93.0234375,"s":[-742.128,544.375,0]}],"ix":2},"a":{"a":0,"k":[44.5,189,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":43.755,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":66.755,"s":[100,-100,100]},{"t":90.7548828125,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":19,"ty":2,"nm":"Layer 19","parent":1,"refId":"image_17","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":85.91796875,"s":[323.925]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,43.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.177},"t":7.259,"s":[131.777,-1201.391,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":80,"s":[137.872,480.375,0]}],"ix":2},"a":{"a":0,"k":[40,162,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":50.032,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":73.032,"s":[100,-100,100]},{"t":97.0322265625,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":20,"ty":2,"nm":"Layer 20","parent":1,"refId":"image_18","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":81.072265625,"s":[-63.263]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,58.722,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.211},"t":9.802,"s":[-139.641,-990.282,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":67.1083984375,"s":[-694.128,544.375,0]}],"ix":2},"a":{"a":0,"k":[41,193,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":37.565,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":60.565,"s":[100,-100,100]},{"t":84.5654296875,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":21,"ty":2,"nm":"Layer 21","parent":1,"refId":"image_19","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":96.97265625,"s":[-315.838]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,53.722,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.209},"t":8.128,"s":[-206.256,-1145.789,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":102,"s":[-806.128,480.375,0]}],"ix":2},"a":{"a":0,"k":[52,183,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":65.619,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":88.619,"s":[100,-100,100]},{"t":112.619140625,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":22,"ty":2,"nm":"Layer 22","parent":1,"refId":"image_20","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":114.46484375,"s":[-259.512]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,56.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.238},"t":8.52,"s":[-366.619,-1069.492,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":96.6259765625,"s":[-686.128,488.375,0]}],"ix":2},"a":{"a":0,"k":[44.5,188,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":40.262,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":63.262,"s":[100,-100,100]},{"t":87.26171875,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":23,"ty":2,"nm":"Layer 23","parent":1,"refId":"image_21","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":78.58203125,"s":[-236.661]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,10.722,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.173},"t":16.523,"s":[-505.73,-563.466,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":73.544921875,"s":[81.872,488.375,0]}],"ix":2},"a":{"a":0,"k":[88,97,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":27.63,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":50.63,"s":[100,-100,100]},{"t":74.6298828125,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":24,"ty":2,"nm":"Layer 24","parent":1,"refId":"image_22","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":79.9482421875,"s":[-65.959]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,33.722,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.182},"t":14.115,"s":[-361.573,-377.534,0],"to":[0,0,0],"ti":[24,-2354,0]},{"t":84.2890625,"s":[-78.128,520.375,0]}],"ix":2},"a":{"a":0,"k":[72,143,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":48.496,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":71.496,"s":[100,-100,100]},{"t":95.49609375,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":25,"ty":2,"nm":"Layer 25","parent":1,"refId":"image_23","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":104.2109375,"s":[-60.331]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,6.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.197},"t":14.122,"s":[-468.314,-460.573,0],"to":[0,0,0],"ti":[296,-2114,0]},{"t":90.72265625,"s":[-198.128,600.375,0]}],"ix":2},"a":{"a":0,"k":[71,88,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":26.418,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":49.418,"s":[100,-100,100]},{"t":73.41796875,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":26,"ty":2,"nm":"Layer 26","parent":1,"refId":"image_24","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":77.802734375,"s":[328.004]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,3.722,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.133},"t":7.976,"s":[-259.378,-370.437,0],"to":[0,0,0],"ti":[272,-2330,0]},{"t":88,"s":[-70.128,528.375,0]}],"ix":2},"a":{"a":0,"k":[56,83,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":62.791,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":85.791,"s":[100,-100,100]},{"t":109.791015625,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":27,"ty":2,"nm":"Layer 27","parent":1,"refId":"image_25","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":83.486328125,"s":[-312.749]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,41.722,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.235},"t":13.124,"s":[-585.135,-722.821,0],"to":[0,0,0],"ti":[208,-2018,0]},{"t":105.2685546875,"s":[-422.128,512.375,0]}],"ix":2},"a":{"a":0,"k":[107,159,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":28.163,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":51.163,"s":[100,-100,100]},{"t":75.1630859375,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":28,"ty":2,"nm":"Layer 28","parent":1,"refId":"image_26","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":110.236328125,"s":[463.981]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,91.722,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.212},"t":7.548,"s":[-29.778,-1062.058,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":86.9501953125,"s":[457.872,488.375,0]}],"ix":2},"a":{"a":0,"k":[57,259,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":53.864,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":76.863,"s":[100,-100,100]},{"t":100.8642578125,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":29,"ty":2,"nm":"Layer 29","parent":1,"refId":"image_27","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":89.0361328125,"s":[-484.46]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,85.722,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.241},"t":9.685,"s":[-411.043,-866.994,0],"to":[0,0,0],"ti":[-80,-2138,0]},{"t":99.0771484375,"s":[-678.128,568.375,0]}],"ix":2},"a":{"a":0,"k":[67,247,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":35.429,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":58.429,"s":[100,-100,100]},{"t":82.4287109375,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":30,"ty":2,"nm":"Layer 30","parent":1,"refId":"image_28","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":104.14453125,"s":[-431.019]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,91.722,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.152},"t":17.008,"s":[-79.428,-780.951,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":97,"s":[-758.128,584.375,0]}],"ix":2},"a":{"a":0,"k":[56,259,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":62.371,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":85.371,"s":[100,-100,100]},{"t":109.37109375,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":31,"ty":2,"nm":"Layer 31","parent":1,"refId":"image_29","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":78.328125,"s":[446.848]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,6.722,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.231},"t":8.974,"s":[318.579,-1167.501,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":80.373046875,"s":[401.872,440.375,0]}],"ix":2},"a":{"a":0,"k":[28,89,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":43.723,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":66.723,"s":[100,-100,100]},{"t":90.72265625,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":32,"ty":2,"nm":"Layer 32","parent":1,"refId":"image_30","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":95.12890625,"s":[-50.488]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,15.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.238},"t":10.871,"s":[492.056,-1143.467,0],"to":[0,0,0],"ti":[296,-2618,0]},{"t":103.08984375,"s":[641.872,448.375,0]}],"ix":2},"a":{"a":0,"k":[29,106,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":41.872,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":64.872,"s":[100,-100,100]},{"t":88.8720703125,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":33,"ty":2,"nm":"Layer 33","parent":1,"refId":"image_31","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":93.06640625,"s":[-141.337]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,-11.278,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.266},"t":7.979,"s":[679.848,-661.065,0],"to":[0,0,0],"ti":[384,-1434,0]},{"t":83.6396484375,"s":[409.872,408.375,0]}],"ix":2},"a":{"a":0,"k":[54.5,53,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":54.619,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":77.619,"s":[100,-100,100]},{"t":101.619140625,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":34,"ty":2,"nm":"Layer 34","parent":1,"refId":"image_32","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":95.068359375,"s":[-111.289]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,17.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.214},"t":14.7,"s":[80.419,-1124.493,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":97.6572265625,"s":[345.872,400.375,0]}],"ix":2},"a":{"a":0,"k":[26,110,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":33.359,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":56.359,"s":[100,-100,100]},{"t":80.359375,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":35,"ty":2,"nm":"Layer 35","parent":1,"refId":"image_33","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":99.09375,"s":[461.811]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,15.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.17},"t":16.078,"s":[300.585,-845.216,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":104,"s":[305.872,472.375,0]}],"ix":2},"a":{"a":0,"k":[29,106,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":30.469,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":53.469,"s":[100,-100,100]},{"t":77.46875,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":36,"ty":2,"nm":"Layer 36","parent":1,"refId":"image_34","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":120,"s":[-363.787]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,41.722,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.186},"t":15.279,"s":[550.606,-859.847,0],"to":[0,0,0],"ti":[456,-2490,0]},{"t":102,"s":[81.872,424.375,0]}],"ix":2},"a":{"a":0,"k":[40.5,159,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":26.315,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":49.315,"s":[100,-100,100]},{"t":73.3154296875,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":37,"ty":2,"nm":"Layer 37","parent":1,"refId":"image_35","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":113.2197265625,"s":[-378.462]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,24.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.192},"t":8.781,"s":[565.396,-1046.958,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":103,"s":[665.872,568.375,0]}],"ix":2},"a":{"a":0,"k":[45.5,124,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":55.754,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":78.753,"s":[100,-100,100]},{"t":102.75390625,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":38,"ty":2,"nm":"Layer 38","parent":1,"refId":"image_36","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":80.3076171875,"s":[54.174]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,23.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.189},"t":16.634,"s":[221.723,-864.331,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":81.63671875,"s":[305.872,448.375,0]}],"ix":2},"a":{"a":0,"k":[38.5,122,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":41.028,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":64.028,"s":[100,-100,100]},{"t":88.0283203125,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":39,"ty":2,"nm":"Layer 39","parent":1,"refId":"image_37","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":95.115234375,"s":[299.774]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,24.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.259},"t":7.976,"s":[657.604,-911.115,0],"to":[0,0,0],"ti":[400,-1810,0]},{"t":74.6279296875,"s":[529.872,440.375,0]}],"ix":2},"a":{"a":0,"k":[37.5,124,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":30.896,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":53.896,"s":[100,-100,100]},{"t":77.896484375,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":40,"ty":2,"nm":"Layer 40","parent":1,"refId":"image_38","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":94.71484375,"s":[408.356]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,23.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.213},"t":14.321,"s":[458.294,-754.048,0],"to":[0,0,0],"ti":[336,-2346,0]},{"t":104.5693359375,"s":[529.872,440.375,0]}],"ix":2},"a":{"a":0,"k":[38.5,122,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":64.818,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":87.818,"s":[100,-100,100]},{"t":111.818359375,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":41,"ty":2,"nm":"Layer 41","parent":1,"refId":"image_39","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":87.1083984375,"s":[276.287]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,59.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.206},"t":13.954,"s":[309.209,-966.075,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":83.669921875,"s":[529.872,440.375,0]}],"ix":2},"a":{"a":0,"k":[52,194,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":50.654,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":73.654,"s":[100,-100,100]},{"t":97.654296875,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":42,"ty":2,"nm":"Layer 42","parent":1,"refId":"image_40","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":106.5673828125,"s":[-1.984]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,58.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.186},"t":14.708,"s":[225.01,-660.153,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":92.6083984375,"s":[649.872,544.375,0]}],"ix":2},"a":{"a":0,"k":[55,192,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":35.781,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":58.781,"s":[100,-100,100]},{"t":82.78125,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":43,"ty":2,"nm":"Layer 43","parent":1,"refId":"image_41","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":87.626953125,"s":[-494.691]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,56.722,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.206},"t":11.514,"s":[32.736,-923.559,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":88.0556640625,"s":[529.872,440.375,0]}],"ix":2},"a":{"a":0,"k":[44.5,189,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":56.146,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":79.146,"s":[100,-100,100]},{"t":103.146484375,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":44,"ty":2,"nm":"Layer 44","parent":1,"refId":"image_42","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":78.0693359375,"s":[-385.194]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,59.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.216},"t":14.825,"s":[244.176,-1136.626,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":91.99609375,"s":[529.872,440.375,0]}],"ix":2},"a":{"a":0,"k":[42,194,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":36.859,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":59.859,"s":[100,-100,100]},{"t":83.859375,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":45,"ty":2,"nm":"Layer 45","parent":1,"refId":"image_43","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.735],"y":[0.9]},"o":{"x":[0.159],"y":[0.09]},"t":0,"s":[0]},{"t":87,"s":[445.112]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,56.722,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.178},"t":15.908,"s":[347.991,-718.714,0],"to":[0,0,0],"ti":[144,-2674,0]},{"t":121,"s":[529.872,440.375,0]}],"ix":2},"a":{"a":0,"k":[44.5,189,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":42.171,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":65.171,"s":[100,-100,100]},{"t":89.1708984375,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":46,"ty":2,"nm":"Layer 46","parent":1,"refId":"image_44","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":91.416015625,"s":[333.236]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,56.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.238},"t":8,"s":[400.078,-1076.292,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":99.583984375,"s":[529.872,440.375,0]}],"ix":2},"a":{"a":0,"k":[44.5,188,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":65.277,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":88.277,"s":[100,-100,100]},{"t":112.27734375,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":47,"ty":2,"nm":"Layer 47","parent":1,"refId":"image_45","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":113.0849609375,"s":[-485.494]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,10.722,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.208},"t":15.515,"s":[544.431,-563.471,0],"to":[0,0,0],"ti":[384,-1994,0]},{"t":94.806640625,"s":[529.872,440.375,0]}],"ix":2},"a":{"a":0,"k":[88,97,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":54.68,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":77.68,"s":[100,-100,100]},{"t":101.6796875,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":48,"ty":2,"nm":"Layer 48","parent":1,"refId":"image_46","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":97.6953125,"s":[-409.417]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,33.722,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.215},"t":7.144,"s":[400.007,-377.545,0],"to":[0,0,0],"ti":[240,-1674,0]},{"t":92.912109375,"s":[593.872,448.375,0]}],"ix":2},"a":{"a":0,"k":[72,143,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":42.787,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":65.787,"s":[100,-100,100]},{"t":89.787109375,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":49,"ty":2,"nm":"Layer 49","parent":1,"refId":"image_47","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":115.154296875,"s":[-336.791]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,6.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.173},"t":8.119,"s":[506.829,-460.573,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":103,"s":[633.872,456.375,0]}],"ix":2},"a":{"a":0,"k":[71,88,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":32.079,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":55.079,"s":[100,-100,100]},{"t":79.0791015625,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":50,"ty":2,"nm":"Layer 50","parent":1,"refId":"image_48","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":88.5029296875,"s":[-210.512]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,3.722,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.194},"t":7.479,"s":[297.883,-370.437,0],"to":[0,0,0],"ti":[344,-2146,0]},{"t":102.8251953125,"s":[609.872,504.375,0]}],"ix":2},"a":{"a":0,"k":[56,83,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":35.676,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":58.676,"s":[100,-100,100]},{"t":82.67578125,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":51,"ty":2,"nm":"Layer 51","parent":1,"refId":"image_49","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":92.5166015625,"s":[317.237]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,41.722,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.245},"t":7.901,"s":[623.397,-722.821,0],"to":[0,0,0],"ti":[96,-1842,0]},{"t":71.728515625,"s":[745.872,504.375,0]}],"ix":2},"a":{"a":0,"k":[107,159,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":33.498,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":56.497,"s":[100,-100,100]},{"t":80.498046875,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":52,"ty":2,"nm":"Layer 52","parent":1,"refId":"image_50","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":84.5986328125,"s":[159.427]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,85.722,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.169},"t":10.031,"s":[449.823,-866.997,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":95,"s":[601.872,560.375,0]}],"ix":2},"a":{"a":0,"k":[67,247,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":65.121,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":88.121,"s":[100,-100,100]},{"t":112.12109375,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":53,"ty":2,"nm":"Layer 53","parent":1,"refId":"image_51","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":107.0546875,"s":[146.171]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,91.722,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.194},"t":11.752,"s":[117.819,-780.948,0],"to":[0,0,0],"ti":[72,-3306,0]},{"t":95.6337890625,"s":[697.872,536.375,0]}],"ix":2},"a":{"a":0,"k":[56,259,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":42.219,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":65.218,"s":[100,-100,100]},{"t":89.21875,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/appintro/src/main/res/raw/wash_your_hands.json b/app/src/main/res/raw/wash_your_hands.json similarity index 100% rename from appintro/src/main/res/raw/wash_your_hands.json rename to app/src/main/res/raw/wash_your_hands.json diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index a57c4f8..7ca6c4e 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -13,25 +13,25 @@ ¿Disfrutaste del paseo? 🚶 Andar 30 minutos al día - es una de las mejores prácticas para tener una buena salud 💪 + es una de las mejores prácticas para tener una buena salud 💪\n Recuerda lavarte las manos antes de comer o tocarte la cara 🤭 y así podrás tener todavía mejor salud 😉 ¿Qué tal fue la carrera? 🏃‍♀️ Siempre es divertido - correr 🙂 pero sueles acabar sudando mucho 😅. Intenta + correr 🙂 pero sueles acabar sudando mucho 😅.\nIntenta lavarte las manos lo antes posible o, mejor todavía, date una ducha 🛀 - ¿Teniendo una buena vuelta? + ¿Pasando un buen rato? 🚴‍♀️ Siempre disfruto el - ir en bici - te hace sentir libre 🌲. Los manillares de tu + ir en bici - te hace sentir libre 🌲.\nLos manillares de tu bici posiblemente estuvieran sucios así que lávate las manos lo antes que puedas 💦👏 Hora de lavarse las manos - 🚉 + 🚗🚉 En el transporte - público hay mucha gente y no sabes si están enfermos o no 😷. + público hay mucha gente y no sabes si están enfermos o no 😷.\n Incluso en tu propio coche pueden haber enfermedades en los pomos o en el volante 🚗, así que lávate las manos lo antes que puedas para evitar enfermedades 💦👏 @@ -68,6 +68,9 @@ ¿30 segundos por una buena salud? ¡Dónde firmo! Solo lávate las manos 😉💦👏 + Recordatorios en el desayuno + Recordatorios en la comida + Recordatorios en la cenas ¡Hora de comer y lavarse las manos! 🍱 @@ -90,9 +93,9 @@ Aprendamos cómo lavarnos las manos Únete a mí en este viaje en donde aprenderemos cómo lavarnos las manos completamente - 💦👏. Es muy importante no solo por ti sino por todos + 💦👏.\nEs muy importante no solo por ti sino por todos los que te rodean: desde un bebé 👶 hasta tus abuelos - 👴👵. Es un pequeño acto de responsabilidad que + 👴👵.\n\nEs un pequeño acto de responsabilidad que dura solo 30 segundos. Recuerda, no es solo por ti sino por ellos. @@ -154,7 +157,7 @@ No recibirás notificaciones de ninguna actividad Recibirás notificaciones de las - actividades seleccionadas debajo + actividades después de pasear, ir en bici, bajarte de un vehículo o correr Habilitar reconocimiento de la actividad ¿Cuándo recibirás notificaciones? @@ -254,8 +257,8 @@ enfermedades
Aquí puedes aprender a cómo lavarte completamente las manos - ¿Buscando las últimas noticias? Aquí - estarán disponibles (todavía está bajo desarrollo) + ¿Buscando las últimas noticias? ¡Aquí + estarán actualizadas! Finalmente, aquí podrás configurar la aplicación para que encaje con tus gustos y preferencias Valorar Handwashing reminder @@ -265,4 +268,33 @@ unos segundos 😉
Valorar No preguntar de nuevo + Sitio no disponible + Fecha no disponible + ¿Cuántas veces te has lavado las manos? 💦👏 + Hoy te has lavado las manos %1$s 👏 + Esta semana te has lavado las manos %1$s 🤗 + Este mes te has lavado las manos %1$s 😱 + + %d vez + %d veces + + ¡Añade otra más! 🙌 + Bueno, quizás una menos 😅 + Información de enfermedades + Tiempo mínimo en minutos… + Tiempo mínimo entre notificaciones + Recibirás notificaciones con un tiempo mínimo de %1$s entre ellas + + %d minuto + %d minutos + + Opciones de rendimiento de la app + Deshabilitar las animaciones en la app + Actualmente, las animaciones están activadas. + Ten en cuenta que esto puede afectar tanto al rendimiento como a la batería + No se mostrará ninguna animación + Error al cargar información sobre las noticias + Ajustes de notificaciones + ¡Acabo de lavarlas! + ¡Yupiiii! 🙌😱 diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index c66f051..e7a6ec6 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -3,4 +3,7 @@ 6dp 8dp 80dp + 16dp + 5dp + 8dp \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a244424..5812a91 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -12,26 +12,26 @@ Did you have a good walk? 🚶 Walking 30 minutes a - day is one of the greatest practices for having a good health 💪 + day is one of the greatest practices for having a good health 💪\n Remember to wash your hands before eating or touching your face 🤭 so you can have even better health 😉 Did you enjoy running? 🏃‍♀️ It\'s always funny to run 🙂 but usually it comes with a lot of sweat - 😅. Try washing your hands as soon as possible or, even + 😅.\nTry washing your hands as soon as possible or, even better, have a shower 🛀 Having a good ride? 🚴‍♀️ I always enjoy - going cycling - it makes you feel free 🌲. Your bike\'s handles were + going cycling - it makes you feel free 🌲.\nYour bike\'s handles were probably dirty so try to wash your hands as soon as you can 💦👏 Time to wash your - hands 🚉 + hands 🚗🚉
In public transport there are lots of people and you don\'t know if they - are ill or not 😷. Even in your own car there can be + are ill or not 😷.\nEven in your own car there can be diseases in the handles or in the steering wheel 🚗, so try to wash your hands as soon as you can for avoiding diseases 💦👏 @@ -69,6 +69,7 @@ 30 seconds for good health? Where do I sign! Just wash your hands 😉💦👏 + Breakfast reminders Time to lunch and wash your hands! 🍱 @@ -79,6 +80,7 @@ If you have gone to the street is even more important to wash your hands before having lunch 💦👏 + Lunch reminders Let\'s have a clean dinner 🥗 The day is finishing and you can do it fully by @@ -88,13 +90,14 @@ Do you know that washing your hands can keep you safe from more than 15 diseases? That\'s a lot 😮 + Dinner reminders Let\'s learn how to wash our hands Join me in this trip in which we will learn how to completely wash our hands - 💦👏. This is very important not only for you but + 💦👏.\nThis is very important not only for you but for everyone who is around you: from a baby 👶 to your - grandparents 👴👵. It\'s a small responsibility + grandparents 👴👵.\n\nIt\'s a small responsibility act that only lasts 30 seconds. Remember, it\'s not only for you but for them. @@ -156,8 +159,8 @@ the access to your activity. Enable it from settings You will not receive any activity notifications - You will receive notifications for - the activities selected below + You will receive notifications after having + a walk, going cycling, leaving a vehicle or running Enable activity recognition When you will receive notifications? @@ -283,7 +286,7 @@ Here you can learn how to completely wash your hands Looking for latest news? Here you will - have it (is still under construction) + have them updated!
Finally, here you will be able to change the application settings so it can fit your requirements Rate Handwashing reminder @@ -293,4 +296,33 @@ people! It only takes a few seconds 😉
Rate! Don\'t ask again + Website not available + Date not available + How many times did you washed your hands? 💦👏 + Today you washed your hands %1$s 👏 + This week you have washed your hands %1$s 🤗 + This month you washed your hands %1$s 😱 + + %d time + %d times + + Add another! 🙌 + Well, maybe one less 😅 + Diseases information + Minimum time in minutes… + Minimum time in between notifications + You will receive notifications with at least %1$s in between them + + %d minute + %d minutes + + App\'s performance options + Disable app\'s animations + Currently, the app will play some animations. + Keep in mind that it can affect both performance and battery life + No animations will be played + Error while loading news data + Edit notification settings + Just washed them! + Hurray! 🙌😱 diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 2f049ea..f62f238 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -31,4 +31,11 @@ 15dp + + diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 7d72fd0..a091e21 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -10,24 +10,24 @@ + android:title="@string/playstore" /> + android:title="@string/github" /> + android:title="@string/linkedin" /> + android:title="@string/twitter" /> + + @@ -58,13 +63,22 @@ android:title="@string/activity_recognition" app:summary="For enabling the activity recognition, you need both Google Play Services and permissions" /> - + android:dialogLayout="@layout/preference_edit_text" + android:key="activity:gms:minimumInterval" + android:selectAllOnFocus="true" + android:singleLine="true" + android:title="@string/minimum_time" /> + + + diff --git a/appintro/build.gradle b/appintro/build.gradle index d26d497..9bfb7e5 100644 --- a/appintro/build.gradle +++ b/appintro/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' android { - viewBinding.enabled = true + buildFeatures.viewBinding = true compileSdkVersion 29 android.defaultConfig.vectorDrawables.useSupportLibrary = true @@ -43,6 +43,4 @@ dependencies { // https://github.com/AppIntro/AppIntro implementation 'com.github.AppIntro:AppIntro:5.1.0' - // https://github.com/mikepenz/FastAdapter - implementation "com.mikepenz:fastadapter:${latestFastAdapterRelease}" } diff --git a/appintro/src/main/AndroidManifest.xml b/appintro/src/main/AndroidManifest.xml index e08107a..fe7cc77 100644 --- a/appintro/src/main/AndroidManifest.xml +++ b/appintro/src/main/AndroidManifest.xml @@ -12,6 +12,9 @@ + + + diff --git a/appintro/src/main/java/com/javinator9889/handwashingreminder/appintro/IntroActivity.kt b/appintro/src/main/java/com/javinator9889/handwashingreminder/appintro/IntroActivity.kt index 002178f..33c9e43 100644 --- a/appintro/src/main/java/com/javinator9889/handwashingreminder/appintro/IntroActivity.kt +++ b/appintro/src/main/java/com/javinator9889/handwashingreminder/appintro/IntroActivity.kt @@ -19,6 +19,7 @@ package com.javinator9889.handwashingreminder.appintro import android.Manifest +import android.annotation.SuppressLint import android.content.Context import android.content.Intent import android.content.pm.PackageManager.PERMISSION_GRANTED @@ -27,9 +28,11 @@ import android.os.Bundle import android.view.View import android.widget.FrameLayout import androidx.annotation.Keep +import androidx.core.app.ActivityCompat import androidx.core.content.edit import androidx.core.util.set import androidx.fragment.app.Fragment +import androidx.lifecycle.lifecycleScope import androidx.preference.PreferenceManager import com.github.paolorotolo.appintro.AppIntro2 import com.github.paolorotolo.appintro.AppIntroViewPager @@ -48,10 +51,11 @@ import com.javinator9889.handwashingreminder.appintro.fragments.TimeConfigIntroF import com.javinator9889.handwashingreminder.appintro.fragments.TimeContainer import com.javinator9889.handwashingreminder.appintro.timeconfig.TimeConfigItem import com.javinator9889.handwashingreminder.appintro.utils.AnimatedResources -import com.javinator9889.handwashingreminder.application.HandwashingApplication +import com.javinator9889.handwashingreminder.gms.activity.ActivityHandler import com.javinator9889.handwashingreminder.jobs.alarms.AlarmHandler import com.javinator9889.handwashingreminder.utils.* import kotlinx.android.synthetic.main.animated_intro.* +import kotlinx.coroutines.* import timber.log.Timber import com.javinator9889.handwashingreminder.appintro.R as RIntro @@ -72,6 +76,7 @@ class IntroActivity : AppIntro2(), SplitCompat.installActivity(this) } + @SuppressLint("MissingPermission") override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -164,87 +169,112 @@ class IntroActivity : AppIntro2(), } } + @SuppressLint("MissingPermission") override fun onDonePressed(currentFragment: Fragment?) { super.onDonePressed(currentFragment) - val app = HandwashingApplication.instance - val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this) - sharedPreferences.edit(commit = true) { - timeConfigSlide.itemAdapter.adapterItems.forEach { item -> - val time = "${item.hours}:${item.minutes}" - when (item.id) { - TimeConfig.BREAKFAST_ID -> - putString(Preferences.BREAKFAST_TIME, time) - TimeConfig.LUNCH_ID -> - putString(Preferences.LUNCH_TIME, time) - TimeConfig.DINNER_ID -> - putString(Preferences.DINNER_TIME, time) + lifecycleScope.launch { + val deferreds = mutableSetOf>() + val activityHandler = + ActivityHandler.getInstance(this@IntroActivity) + val sharedPreferences = + PreferenceManager.getDefaultSharedPreferences(this@IntroActivity) + sharedPreferences.edit { + timeConfigSlide.itemAdapter.adapterItems.forEach { item -> + val time = "${item.hours}:${item.minutes}" + when (item.id) { + TimeConfig.BREAKFAST_ID -> + putString(Preferences.BREAKFAST_TIME, time) + TimeConfig.LUNCH_ID -> + putString(Preferences.LUNCH_TIME, time) + TimeConfig.DINNER_ID -> + putString(Preferences.DINNER_TIME, time) + } + } + putBoolean( + Preferences.ANALYTICS_ENABLED, + policySlide.firebaseAnalytics.isChecked + ) + putBoolean( + Preferences.PERFORMANCE_ENABLED, + policySlide.firebasePerformance.isChecked + ) + putBoolean( + Preferences.ADS_ENABLED, + sharedPreferences.getBoolean(Preferences.ADS_ENABLED, true) + ) + activityRecognitionPermissionGranted = + activityRecognitionPermissionApproved() + putBoolean( + Preferences.ACTIVITY_TRACKING_ENABLED, + activityRecognitionPermissionGranted + ) + if (activityRecognitionPermissionGranted) { + putStringSet( + Preferences.ACTIVITIES_ENABLED, + Preferences.DEFAULT_ACTIVITY_SET + ) } + putBoolean(Preferences.APP_INIT_KEY, true) } - putBoolean( - Preferences.ANALYTICS_ENABLED, - policySlide.firebaseAnalytics.isChecked - ) - putBoolean( - Preferences.PERFORMANCE_ENABLED, - policySlide.firebasePerformance.isChecked - ) - putBoolean( - Preferences.ADS_ENABLED, - sharedPreferences.getBoolean(Preferences.ADS_ENABLED, true) - ) - if (!isAtLeast(AndroidVersion.Q)) - activityRecognitionPermissionGranted = true - putBoolean( - Preferences.ACTIVITY_TRACKING_ENABLED, - activityRecognitionPermissionGranted - ) - if (activityRecognitionPermissionGranted) { - putStringSet( - Preferences.ACTIVITIES_ENABLED, - Preferences.DEFAULT_ACTIVITY_SET + val splitInstallManager = + SplitInstallManagerFactory.create(this@IntroActivity) + splitInstallManager.deferredUninstall(listOf(AppIntro.MODULE_NAME)) + async { + if (activityRecognitionPermissionGranted) + activityHandler.startTrackingActivity() + else + activityHandler.disableActivityTracker() + with(AlarmHandler(this@IntroActivity)) { + scheduleAllAlarms() + } + Timber.d("Finished starting activity recognition and scheduling alarms") + }.also { deferreds.add(it) } + async(context = Dispatchers.IO) { + cacheDir.run { deleteRecursively() } + Timber.d("Finished cleaning cache") + }.also { deferreds.add(it) } + val firebaseAnalytics = + FirebaseAnalytics.getInstance(this@IntroActivity) + with(Bundle(2)) { + putBoolean( + "analytics_enabled", + policySlide.firebaseAnalytics.isChecked + ) + putBoolean( + "performance_enabled", + policySlide.firebasePerformance.isChecked + ) + firebaseAnalytics.logEvent( + FirebaseAnalytics.Event.SELECT_ITEM, + this ) } - putBoolean(Preferences.APP_INIT_KEY, true) - } - val splitInstallManager = SplitInstallManagerFactory.create(this) - splitInstallManager.deferredUninstall(listOf(AppIntro.MODULE_NAME)) - if (activityRecognitionPermissionGranted) - app.activityHandler.startTrackingActivity() - else - app.activityHandler.disableActivityTracker() - with(AlarmHandler(this)) { - scheduleAllAlarms() - } - cacheDir.run { deleteRecursively() } - val firebaseAnalytics = FirebaseAnalytics.getInstance(this) - with(Bundle(2)) { - putBoolean( - "analytics_enabled", - policySlide.firebaseAnalytics.isChecked - ) - putBoolean( - "performance_enabled", - policySlide.firebasePerformance.isChecked - ) - firebaseAnalytics.logEvent( - FirebaseAnalytics.Event.SELECT_ITEM, - this - ) - } - firebaseAnalytics.logEvent( - FirebaseAnalytics.Event.TUTORIAL_COMPLETE, null - ) - if (!policySlide.firebaseAnalytics.isChecked) { - firebaseAnalytics.setCurrentScreen(this, null, null) - firebaseAnalytics.setAnalyticsCollectionEnabled(false) - } - with(FirebasePerformance.getInstance()) { - isPerformanceCollectionEnabled = - policySlide.firebasePerformance.isChecked + async(context = Dispatchers.IO) { + firebaseAnalytics.logEvent( + FirebaseAnalytics.Event.TUTORIAL_COMPLETE, null + ) + if (!policySlide.firebaseAnalytics.isChecked) { + firebaseAnalytics.setCurrentScreen( + this@IntroActivity, + null, + null + ) + firebaseAnalytics.setAnalyticsCollectionEnabled(false) + } + with(FirebasePerformance.getInstance()) { + isPerformanceCollectionEnabled = + policySlide.firebasePerformance.isChecked + } + Timber.d("Finished setting-up Firebase") + }.also { deferreds.add(it) } + deferreds.awaitAll() + Timber.d("All async processes finished - finishing Intro") + this@IntroActivity.finish() + Timber.d("Intro finished!") } val intent = Intent(this, MainActivity::class.java) + Timber.d("Starting MainActivity") startActivity(intent) - this.finish() } override fun onActivityResult( @@ -260,7 +290,7 @@ class IntroActivity : AppIntro2(), val position = data.getIntExtra("position", 0) val hours = data.getStringExtra("hours") val minutes = data.getStringExtra("minutes") - val titleText = when(id) { + val titleText = when (id) { TimeConfig.BREAKFAST_ID -> getString(RIntro.string.breakfast) TimeConfig.LUNCH_ID -> getString(RIntro.string.lunch) TimeConfig.DINNER_ID -> getString(RIntro.string.dinner) @@ -356,9 +386,8 @@ class IntroActivity : AppIntro2(), ) { if (requestCode == PERMISSIONS_REQUEST_CODE) { activityRecognitionPermissionGranted = - (grantResults.isNotEmpty() && - grantResults[0] == PERMISSION_GRANTED) || - !isAtLeast(AndroidVersion.Q) + (grantResults.isNotEmpty() && grantResults[0] == PERMISSION_GRANTED) + || !isAtLeast(AndroidVersion.Q) } super.onRequestPermissionsResult(requestCode, permissions, grantResults) } @@ -371,10 +400,9 @@ class IntroActivity : AppIntro2(), override fun onClick(v: View?) { when (v) { - nextButton -> { + nextButton -> if (onCanRequestNextPage()) changeSlide() - } } } @@ -390,4 +418,14 @@ class IntroActivity : AppIntro2(), Timber.e("Requested next slide illegally (not exists)") } } + + private fun activityRecognitionPermissionApproved(): Boolean = + if (!isAtLeast(AndroidVersion.Q)) + true + else { + activityRecognitionPermissionGranted + || PERMISSION_GRANTED == ActivityCompat.checkSelfPermission( + this, Manifest.permission.ACTIVITY_RECOGNITION + ) + } } diff --git a/appintro/src/main/java/com/javinator9889/handwashingreminder/appintro/timeconfig/TimeConfigActivity.kt b/appintro/src/main/java/com/javinator9889/handwashingreminder/appintro/timeconfig/TimeConfigActivity.kt index 03e903c..865c61f 100644 --- a/appintro/src/main/java/com/javinator9889/handwashingreminder/appintro/timeconfig/TimeConfigActivity.kt +++ b/appintro/src/main/java/com/javinator9889/handwashingreminder/appintro/timeconfig/TimeConfigActivity.kt @@ -30,10 +30,10 @@ import android.widget.TextView import android.widget.TimePicker import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.view.ViewCompat +import coil.api.load import com.google.android.play.core.splitcompat.SplitCompat import com.javinator9889.handwashingreminder.activities.support.ActionBarBase import com.javinator9889.handwashingreminder.appintro.R -import com.javinator9889.handwashingreminder.graphics.GlideApp import com.javinator9889.handwashingreminder.utils.AndroidVersion import com.javinator9889.handwashingreminder.utils.TimeConfig import com.javinator9889.handwashingreminder.utils.formatTime @@ -129,10 +129,7 @@ class TimeConfigActivity : } if (imageRes != null) try { - GlideApp.with(this) - .load(imageRes) - .centerInside() - .into(image) + image.load(imageRes) } catch (e: Exception) { Timber.e(e, "Error while loading Glide view") image.setImageResource(imageRes) diff --git a/appintro/src/main/java/com/javinator9889/handwashingreminder/appintro/timeconfig/TimeConfigItem.kt b/appintro/src/main/java/com/javinator9889/handwashingreminder/appintro/timeconfig/TimeConfigItem.kt index 1720ca2..59016de 100644 --- a/appintro/src/main/java/com/javinator9889/handwashingreminder/appintro/timeconfig/TimeConfigItem.kt +++ b/appintro/src/main/java/com/javinator9889/handwashingreminder/appintro/timeconfig/TimeConfigItem.kt @@ -19,12 +19,12 @@ package com.javinator9889.handwashingreminder.appintro.timeconfig import android.view.View +import android.widget.ImageView import android.widget.TextView import androidx.annotation.LayoutRes import androidx.cardview.widget.CardView +import coil.api.load import com.javinator9889.handwashingreminder.appintro.R -import com.javinator9889.handwashingreminder.graphics.GlideApp -import com.javinator9889.handwashingreminder.graphics.RecyclingImageView import com.javinator9889.handwashingreminder.utils.TimeConfig import com.javinator9889.handwashingreminder.utils.notNull import com.mikepenz.fastadapter.FastAdapter @@ -52,7 +52,7 @@ class TimeConfigItem( private val hours: TextView = view.findViewById(R.id.hours) private val ddot: TextView = view.findViewById(R.id.ddot) private val minutes: TextView = view.findViewById(R.id.minutes) - private val image: RecyclingImageView = view.findViewById(R.id.infoImage) + private val image: ImageView = view.findViewById(R.id.infoImage) private val clockIcon: IconicsImageView = view.findViewById(R.id.clockIcon) val cardView: CardView = view.findViewById(R.id.timeCard) @@ -70,11 +70,7 @@ class TimeConfigItem( TimeConfig.DINNER_ID -> R.drawable.ic_dinner else -> null }.notNull { - GlideApp.with(view) - .load(it) - .centerInside() - .into(image) - image.savedDrawableRes = it + image.load(it) } } @@ -83,7 +79,7 @@ class TimeConfigItem( hours.text = null ddot.text = null minutes.text = null - image.onDetachedFromWindow() + image.setImageDrawable(null) clockIcon.icon = null } } diff --git a/appintro/src/main/java/com/javinator9889/handwashingreminder/appintro/utils/AnimatedResources.kt b/appintro/src/main/java/com/javinator9889/handwashingreminder/appintro/utils/AnimatedResources.kt index 60f3be1..19054f8 100644 --- a/appintro/src/main/java/com/javinator9889/handwashingreminder/appintro/utils/AnimatedResources.kt +++ b/appintro/src/main/java/com/javinator9889/handwashingreminder/appintro/utils/AnimatedResources.kt @@ -20,10 +20,11 @@ package com.javinator9889.handwashingreminder.appintro.utils import androidx.annotation.RawRes import com.javinator9889.handwashingreminder.appintro.R +import com.javinator9889.handwashingreminder.R as RBase enum class AnimatedResources(@RawRes val res: Int) { - WASH_HANDS(R.raw.wash_your_hands), + WASH_HANDS(RBase.raw.wash_your_hands), TIMER(R.raw.pending_timer), ACTIVITY(R.raw.travelers_walking), PRIVACY(R.raw.padlock_animation) diff --git a/appintro/src/main/res/layout/time_card_view.xml b/appintro/src/main/res/layout/time_card_view.xml index 04d6886..9b95689 100644 --- a/appintro/src/main/res/layout/time_card_view.xml +++ b/appintro/src/main/res/layout/time_card_view.xml @@ -60,14 +60,13 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/title"> - @@ -92,6 +91,7 @@ app:iiv_size="16dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@+id/hours" + app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> diff --git a/appintro/src/main/res/values-es/strings.xml b/appintro/src/main/res/values-es/strings.xml index 5b5aea0..f8d9050 100644 --- a/appintro/src/main/res/values-es/strings.xml +++ b/appintro/src/main/res/values-es/strings.xml @@ -28,7 +28,7 @@ Se todavía más preciso Si permites el reconocimiento de tu actividad podrás recibir notificaciones cuando, por ejemplo, te bajas - de un vehículo 🚇 o después de correr 🏃‍. + de un vehículo 🚇 o después de correr 🏃‍.\n Puedes deshabilitar esta opción en cualquier momento Política de privacidad y términos de servicio diff --git a/appintro/src/main/res/values/strings.xml b/appintro/src/main/res/values/strings.xml index 31ca5de..8debd4c 100644 --- a/appintro/src/main/res/values/strings.xml +++ b/appintro/src/main/res/values/strings.xml @@ -18,7 +18,7 @@ application Handwashing reminder Do you know how crucial it can be - washing your hands so you can avoid some diseases? With this app, you + washing your hands so you can avoid some diseases?\nWith this app, you will never forget it 😉 Custom hours @@ -28,7 +28,7 @@ Be even more precise If you allow access to user activity, you will receive notifications when, for example, you get off from a - vehicle 🚇 or after running 🤼‍🏃‍️. You can disable this option at any + vehicle 🚇 or after running 🤼‍🏃‍️.\nYou can disable this option at any moment Privacy policy and terms of service diff --git a/build.gradle b/build.gradle index 853987b..68d64ad 100644 --- a/build.gradle +++ b/build.gradle @@ -2,8 +2,8 @@ buildscript { ext.kotlin_version = '1.3.72' - ext.latestAboutLibsRelease = '8.1.0' - ext.latestFastAdapterRelease = '5.0.0' + ext.latestAboutLibsRelease = '8.2.0' + ext.latestFastAdapterRelease = '5.1.0' repositories { google() jcenter() @@ -12,11 +12,11 @@ buildscript { } } dependencies { - classpath 'com.android.tools.build:gradle:3.6.3' + classpath 'com.android.tools.build:gradle:4.0.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "com.mikepenz.aboutlibraries.plugin:aboutlibraries-plugin:${latestAboutLibsRelease}" classpath 'com.google.gms:google-services:4.3.3' - classpath 'com.google.firebase:firebase-crashlytics-gradle:2.0.0' + classpath 'com.google.firebase:firebase-crashlytics-gradle:2.2.0' classpath 'com.google.firebase:perf-plugin:1.3.1' // Performance Monitoring plugin // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/bundledemoji/build.gradle b/bundledemoji/build.gradle index e86abc2..51644f3 100644 --- a/bundledemoji/build.gradle +++ b/bundledemoji/build.gradle @@ -13,7 +13,14 @@ android { versionName "1.0" } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } } @@ -22,7 +29,7 @@ dependencies { implementation project(':app') // https://mvnrepository.com/artifact/androidx.emoji/emoji/1.0.0 - implementation 'androidx.emoji:emoji-bundled:1.0.0' + implementation 'androidx.emoji:emoji-bundled:1.1.0' } repositories { mavenCentral() diff --git a/extras/25160-leaves.json b/extras/25160-leaves.json new file mode 100644 index 0000000..49b5ab4 --- /dev/null +++ b/extras/25160-leaves.json @@ -0,0 +1 @@ +{"v":"5.6.10","fr":30,"ip":0,"op":105,"w":512,"h":512,"nm":"tree-1781554","ddd":0,"assets":[{"id":"image_0","w":952,"h":954,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_1","w":58,"h":106,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADoAAABqCAMAAADa67LtAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAACXBIWXMAAAABAAAAAQBPJcTWAAAA+VBMVEVHcEzI6jvW6joe6tNO7o0U7+RH9VnJ6ztE8os7pP9J9Fw0sPov+I1Y80OV7jwa9c0Z5uk39ncf+7MY+sY2qv1+7zwg+q8m+aPa6jrF6zsj+qk79m9L9E4c+7sQ+9gz94GE7zwkz/Fh8kUoyPMox/Oe7Twc4eoN+uM59nFO80FH9FAS8+UN/OIQ9uQU7ucb4esX6OkM/eIe2+0Q/NkS/NIW+8kj0fAZ+8Ed+7gg+rAox/Mk+ad/7z0n+Z957z1y8D4r+Jcu+I6G7j1l8T5r8T4tvfYx94aM7jw1935e8j5Y8j+T7Tw/9WVC9Vwzsfqd7Tyr7Dy56zs5pf5yJmjnAAAAJ3RSTlMAQP4vIGNa/hBANIF5nV1zordVgsLc1ECArqeX17zQ26raelC84ECyq+TNAAADUElEQVRYw63YZ1fbMBQGYKVRjDCxTwaJCQlZBcpqAyU0UOiktIVC1///MfWUh14N+1Qf0XlA1hXSvZcQPuoNUnU0Fq2qtLU4rWpni9NXFe1rnx53q8j9kL6ssleNiL6oYFsxrWB3E3pS2r7h9KxTTtYzdFkvRZ9n6PlFKbuRpctVGbuboxd9VuIY5umqhH1boJc7xhss0Ktt0w0W6XXTcIMBfWd2NFqIfrRN6Cakn0zsHaYTVpl+bWvluox+H2pjI6UHli42cnpgV6ePVB0bFR2Z03GBPjkq+jNDz1pFemQZ0pNxq0iP5Fu1nqNndYGOmCGl4yI9lH7uRp52GgI9tMxol6wEek+N6Jh0RSqJ7maeLgkV6MP93ISeU7Ij0lvbhHZIB9AeitDfAvXTgr5IvzgG1L++u4B+qOnpmBCKaE9Pl/5XbQP6XtjldYF6hHiI3lAtDdKnPqJTLQ2euSain2s66u8TYZD2dPQiiP42ot9cHfX3iXiQ7ulomGZOEP3hamiYDjQh3dPQy+DnDNJfrpquwti3Id3T0DAZ6ED6u6amUTo+gXSgplHa1IT0D1PScJ8IxdRV0yjBbEM6UNMoabIgXeOUIRrneZjW5LeET/vR1BDSLSW9iqZsSAfSezikXjQ3QXRNTeMazUL0mey5yuXDDFKqpNfx5BDRmuRVj2n8my0lpZAmmfRIRQmkSfI/BHRLna3Fh4LYSopzRMZXrKD1O1XZMFd9K5khmlQrTElhscILLEdFKUxqk1lLRYuVZES9ZMXyMxw0CBBtpitWUDIDtJ2uWPb/mu1L5BJ4PvsguyV4D0ZamDlKug8o/1hbdq3F1aRI07pshC/TJAQLsVjhkw6+wnl5JlKPrzhLt0ABLNC06L7NUJArsrG8CHUyFDYKjouFGX8PLfi+ZiNUpGmlAV/13KGSlr4Op7J6qZGnEz5hJXQgb7Lli1B+zzOU/BRtjqbhmYKUS7BZmoZnHtGpujGYren4ptgRpZpG0GVK0/D0AjrVNpF4nfOYOVABrWmbHCytOPjPXDELx4Pn/nzF1KeuWeerH9H0QPVujP5osOhhlJmmkb1xienwJgHlK3Z7xHywpk/5HlOXlBm0/XTESMVhjeaV2/rEcmzyP8c/16Z1ezJhv0cAAAAASUVORK5CYII=","e":1},{"id":"image_2","w":58,"h":106,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADoAAABqCAMAAADa67LtAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAwFBMVEVHcEy80SG40zbp2w/P1hzv3QzX2Bqr0TrE1BvX2BoTrkvt3A3D1CPs3A231DojsUXu3A3g2hMQrExwwiw0tT+30zXv3Q52wyoPrUuWySD33gXI1RtZvTMGq03U2CPL1yrC1TL93wHg2hm81Dfp3BLv3Q210zzl2xDz3QYmskPY2SDP1yfG1i7b2R0Eq01PujdavTNmvy/43gZDuDpywix9xCg3tj6VySGJxiWgyx2szhq30Bbb1wvD0xPP1Q8TrknxkElrAAAAHnRSTlMAIH62MHxQQBBgPMqhm7xZQPCC197V2Wiom+jYoNDbFk4TAAADgUlEQVRYw63Ya3uaMBgG4CAIQaWIWs9d1WLt2q7d3Hnr4f//qxEO4ZAnB7iWj+O695QkhvcNIXxYPuk6ertRVzraPXa1l7vH6452l9DrXhfpMfrw4HeaJZb68MHvMksZ7WAvCnrf2t5w+sltJ50KjZxW1K3QQzvbq9J29qJGT0PaYhvWadzC3tToIY6H5hPcSI2PgfEEN1OPx77pBAupxzuzbTUCqXfnsdnagNTz2mR5b2Hqfk5b0zz1vNcvkYdTz/u9dolcWepeO809aerdadyOVlJPkaVeG0Xqy0b9u6nSYT315U15sN9W6Iegkfr26hvSeztopL7+dRTLWntXR6CX1JBawyb9s5KvTY26vkB/L8xon0QC/ekYUZsEIp3KdkSNRsQS6a+FCT1YxBbpd8+EusQFdErhjqjT5Cyci/Tb1oDahPQB/TLQ03lSgCE61dND8lY2oJ8nYB82aHIyjBF9trSUfTPmiG61NJkn0kf060BHk3kiFNKZjp7Y6geI/gh1lNU/Y0hnOpp+W9eIfgw1lM0T6UM6U9M4Yv9OIa3FgtQ4XXsb0islPcRpnehC+j5Qp2Y1yBrSpTo1nSfSh/SJKlPjrPfBNFSmxtnhaUO6VKdmnygf0idOKUrNi4g1pAP5KXHi5WUA6URO2fc1rzshXVY+6qCWyMuPIaJX0iM8Tc0LUx/RJ9nnKku18zmEdCClLHWdPwyU1EOpx/zgdJXUQqm8xNsAGuIKpkgtKssRoBN1tTYvWgolxTVi8dvaqKgDa8Sio+wppok1VyC16FaokvZQKq/eRypqwXq4eOqraKOTbPQ5VL6H2X+MUnlrtlJRcglS+cu60h9dGou6K/5UekpkCw9qf15TrpTUAx0Hf1lPdqzlkyz2dDZ/KDlMiyXYiX0Of7iq0iuxPRP7HN5aOVU6AQ2wkFo23dMKBbUi3TRTyyZ0VdJ3eFFw3ezp+PfQg9/X6go1e7ryFqikIW4D/EZq2fquOJX1S349dc4fLAq6lHZpfr1/5WUsRcVP09Y6ycrygJJLtJXUci8uMjpRdsK1no5PipNRS3MRFJW07HunjC61l0hDTsu/eMvoQHvJQXnHEZUvK1bhePDan28oK6Gh2c3XPKPlBcH02SiU/dFBSiM+x9vnkJiO8ZpVa3yOFzNiPmi/eqVhhaTNsOy3V0o6DnfTI52Hv/LI/xz/AG9w2PZ68exoAAAAAElFTkSuQmCC","e":1},{"id":"image_3","w":109,"h":53,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG0AAAA1CAMAAAB8+5X+AAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAACXBIWXMAAAABAAAAAQBPJcTWAAAArlBMVEVHcExHgXdyUiYNwecZtNBRd2ZlYkI9kZQunKcvm6UcsMlEhX4PvuFDhoAopLQSvN5YcFotnakJxe0IxvBbblhyUyghqr9uVy5SdWNba1FeaU08jo00lpwrn6wnpLRLfXAiqb1PeGc9jIpDhX9ba1FHgngWttMersVjY0JUc2AbssxXcFlvVSs3kpYwmqI6kJBAiYUSu9xnXzt3TRxgZklqWzUHxvANweYunKcPvuGOHF3zAAAAHHRSTlMAxM1CI302EIdAzESkn2F0XcjKhiCQoHLurt3wCSH7ygAAAxJJREFUWMPtmFl7ojAYhQUEZJNFkWIXd3Sm2BZxqf//j03CZiJLEqS9mnPJzfucnHxL6PUeUV8ZDgoNlX7vx6QNuM/9fv/y8vHx/Qr0BjS3J0O5c5JsGc/LzxQGad85DWjbMVAzvr6WS0D7RGmvOW27/asPO0KNjdVqVdBeSt62kAZkdhCixm02KA0/yXlmDtKCQO8/mNbTbNNEQ7wFQNEDPFkELJy2r8stpQVRWx5gLWZARG83WgR0jUZyK9aCTJu/FbT0KKPr9eIIzKw/ELZIYBvCnZzfcktol4vTZ2MBEb2Vc8tpl4tJC7Oe3t8xGHVuBe18PjtU6UnT9XtOS3j1d7KcW+EN4M7k9Mb+GsIQbxT1Nq/yBjQiBOYe1+t15q19blfHGY1MQWg2Zx0TGHKSM5o7eaOpumkKdNdRmu6Ox4SH0ejqTZ3QYrJD3O12BSzPbUG+k+pkwDzBrd2hoDXlht1JMLaVNhOMPxxKtMaTbAmC8g6nnLYm52YbrUHwdvCn0wn1Vp/bszFQmBp8qeK8MERoiLe73DhDG7MaMUf3xhLYqTq3vJcYosa6dgoj3Tk7+Ec3hKr2lubGGRaTJVlIOKn698YAK6zLjRM1mdqLYJq6qqJdGW/LbhyHcY23J1+USARFgVv6xFbVfAZEWFc2MWMIDPM29a0K0ljTtPQNYAN9oH2yYgZc8AngxVDlk4QoSRJTGVwitN6yh0DFDIDegttJ6kiWfMJKaGFYeyfL05RyL8FgVpwJ8k509UbcFNDZje4JLsKqyI1tBlTuJQiMj+MSjrZP3u/KyF4S3HLDNiDJLXBV3ppnN8Veot9VqezxqbW43hvrXlLkplfNNAikyG3GsJcktLpNa+zyrLk1vAPS3K5Nb1TJ5ZvqjTm3gLSiACB9bvvG3CKVpotLHt9JvVE/Ncaez7IFVeWmMi16suVPjy125Sw3s8VK5Pnt6m3S9nkviX5DvVXmpj7260ITOXKfzHObKL3HJYFpSvamDjr8j6cBZD2tU1RxWzULbg0YzbYHwx/8O5lglUy9//pt/QOW6sIbig4V/AAAAABJRU5ErkJggg==","e":1},{"id":"image_4","w":79,"h":106,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAE8AAABqCAMAAADKi/wxAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAsVBMVEVHcEy30zfp2xLz3Qfg2hbs3A7u3A2rzie/0yLZ2R+ozy3Y2Bi61DO60iwHq04Vr0oOrUtrwS4UrkqYyyVLuTglsUTN1yjC1TH93wHy3QrT2CTs3A7X2SDg2hnk2xa20zvI1i333gV6xCnm2w9Quza91Datzhk3tj7H0xHd2Rza2R4Vr0huwS1mvzCHxiVdvTKQyCIAqk+YyiCgyx1EuDq60RUqs0LT1g7b2AshsUQJrEzu01uEAAAAFnRSTlMAfsnbWnukECQ9VJa32Yc4wtBinojg8k4vYQAABBlJREFUaN6tmml/ojAQxiNHAggeta0HFaX2sNfudrf39/9gi4jAhJkkKLyV379PZiZh5kkZwx7XY10+wWLhdsnrLxZXVncSxeUiAy6crni9jHd19fjARTe8qOAtLb8LnJcvd8dbPnSx5v7lQd8ySTpY87TO25yc5+AS8OLEOXm5gBfHJ9W2mAJekvHm1glBdNYNffO5fXzhhOumvuw5NohijelL09Q9drmovnQ2O64SQ0rfbGaLY7KL6st5s7h9VpwprW+WblpnJVTpS+O2QDFV6os3X/12e3eq0ff12QrY1+r73IYt0nyr17fdRsZAf2qgb/tuDOxNTfS935kCIzN9d3f/jA5t71bmPVC8vybAXoNnLSneHwNg2OS5JO+XHnjb4CViSfKudUAf47k0byx04WvyfI/m6YARwnMYp3nPSqBYITyXeQrey1h1tmA8zjKBNO/3uSJ8GM/K0qTi3dDAEOMl2Q+WindzRvEyHMLLisxX8t6GRPWtUH27T5qt5F0IInwob9cWOEre/YgIH8rLPxe2kneP5iTCeVY+Lql5H0gIvRXOs/NSj9U8JITBCs/vhhUCVbzvAZYOVN8m71k8De9piKYD4+07DK7hjZB04Pr2faSv4T3J22RF8fj+d0vD+xHy7sB5sVU0cjreQE4vEb+4eMPW8F6FnF5UX3JoSh0dD0RwQusrWkiRangjqVwofYdBgWt4r8NGuaD6+GFH6ngDqVwIffbhHa7hjerfNrL+4risKQ3vVSo/Ql81ddga3lAuZ1xfOSM4Gt6Zmb6yoxcbNW8AtgcZP6tq/015PZW+pDrE1byRAW/XT1aNHj+Zl+mbV2Ol04m+2mhudxC/Oa8ZjR3kt9pxWcmY8ZT1F8/rE6P5/iD11RLCfCOep9ZX90oik/OAqfXx+pfB5LzKz1NSXz0hTBidp6HifMn6ZzDDm5z3PWX86glhAcVrtmukPmBeRQbfN7J/yfWlHHyrDb6/+/aZ1GeDtRj0B2R/WvgHYDYN9f0L2Y8X8zTwmRyMNzSbPwp9wBUSTd7PheG8VeizwKsTfT+5i6BCXwq7uyZPmM3npV8CrcQGb2Dmb1T6oB07kXjfAp/QaX0wgIF2/igNIsLfncM3Ie9DkPYp6V/BAE4A78zcjz3EbwYDGNR5Fy387FIfDCCr84ZqC5Xwx+FrE908XSVljft/0CoOSt6bzlwUEepPcvhXS9652f1gQ58N3xkXvLGRMWsh/in05yYFb2hmlPeb/qlUMTp/qCFR1gcXLHLemJk/7qPk73pSADNeq8s5wSFPOmMyXtD2KpPXebYUwOdz1vrx+H5/5P4BWJ13PWbHPF4/PvhX8K5ifOzNpnDtPU/K8Am3kD7P/YhO7pcLNY6dxrzTfyPwXIs7gnXL1PD+A+5YMssNyq+nAAAAAElFTkSuQmCC","e":1},{"id":"image_5","w":58,"h":106,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADoAAABqCAMAAADa67LtAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAACXBIWXMAAAABAAAAAQBPJcTWAAAA81BMVEVHcEwm87VL9FQz94Mi7cQh+bDW6jrI6zs4qf188EAq7a8Q/Nti71DW6jwa79eK8D8Z5uk69nEe+7czsfo193w2qv3S6zpS80InyfN08D7E6zsl+qQQ+9hy8D158D2S7jwu+I4e+rVa805A9WEkz/Eox/Or7DwN+uNb8j459nFO80FA9WFH9FAS8+UN/OIQ9uQU7ucb4esX6OkM/eIe2+0Q/NkS/NIW+8kj0fAZ+8Ed+7gg+rAox/Mk+ad/7z0n+Z957z1y8D4r+Jcu+I6G7j1r8T5l8T4tvfYx94aM7jw1936T7Twzsfqd7Tyr7Dy56zs5pf66o1QyAAAAJ3RSTlMAEJlHMH7+/kBeIGAQQ00porq3hWXCgudrQq6c0Nur3tjWe9javOC6cK4rAAADWElEQVRYw63YeXuaMBwH8AC6FkTR6ry1Hu3We7Nd7bRbd9/n+381A4EEyDcHeZY/i5+nIQnJ7xtCaPP6xLT1V01T2lxdm9qj1fVzQ/sipJdVE7m/o89qJqMU06cGtplQA3uc0qvS9iWlN41yspKh60op2sjQ27tStp2l600Ze5yjd3OrxDLM000J+6pAtwfaA8zR+5HuCubpa81PoQ3om47eCkb0vaNDH0P6QWd6v2A6s4zp15Z6gEX0u21OT1XD3BbTU8ecnnvyuZHRpT4dF+i5dKh+ZuhNs0gvXE16NW4WaS8Qz02O3lSK9GLp69JxkZ4JX7efp40aR89Er9vO0yrZcFT0ugU6JiOOnk0E05qna+Jx9ORkoUNvPXLA088DHdogDUAnaIb+Fmi4F855+snWoOH2XQX03UBNx2EBhuhETdfhbnYA6FtulPc5Gp7rDqIPgZJGZ8Yc0amSRsdcFdGPAxUNx4lYkB6q6F20648Q/eaqaFT/OJAequjubJ0h+sNV0F050IH0UEG30d8tSH+5crrZbfkjSJ8o6K5OdCD9XZfTuAaZQTqU07hsqkL6x5fSbZx9MHXlNK5AWpAO5TSuxTuQ7lFqIZrUeZjWxbtESOfxIxvSrpTeJ3UnpEPhPryjSfmxRHRPTpPCtIPoI9FxFdOklvYhDaT0dfLQRrQuONUTmtRLjpR6kKYl3lJGCaRp8W8D2pVXa7O0T1Lah4WeRXssoRVI05p0IXtXcoRomlZ8KYVhhQaslox6sKhNn7ri1cQnyXzO8XvCNRyNMaI0mtkySo4AbbEei77X7L1EroCnT3uiXYLewQiDmS2l+4DSkDMQbWtJmuRpK9NjuJmme+qKDyuE9Rhu4fRugqc0WgVZ2gUBmKMsdPcytM5TaywOoXaGwouCy2Iwo+ehC8/X7OsWKcuRjArSR00YfW1KRXmplqcsRropHQpTWi0fQml69VNaF2fDmiBwT0HJxdksZdOziGlXmoRzmY4OShDTQHERtGWU9XgS0anqtsFjOYf1eBrRgfKSw2KJg00PX4XjRmt/9vWE1NW7+UpKabagJg9a/zRaBElRS8d4+uAS3ebMIkp/705KXC9ai5DSMQ5cUqZ5rfML3/R+3VkujK/1SccekP/Z/gEsXGwqa2751AAAAABJRU5ErkJggg==","e":1},{"id":"image_6","w":81,"h":159,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_7","w":91,"h":124,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_8","w":73,"h":156,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_9","w":77,"h":122,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAE0AAAB6CAMAAADNqC6XAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAqFBMVEVHcEw3fKORd2VieoUxfqnZczOKeGp9eXWpdlV+eHLnciorfqztcSUXf7mCeG4Rf72hdlpBfJtren/Mczzlciubd13ocinTczc1faO1dUzDdELKcz1AfJyEeG2ndlYjfq96eHSddlxZeopveXzccjCNd2cZfrfvcSQMf8BJe5ZQe5G6dUhieoWvdU+sdVK+dEahdlmYd2CTd2Mvfajici0rfavociloeoFd5XxuAAAAF3RSTlMAXZ+sMlR6EzFagYLAq8zWvMzgzqDZ3a2z8rEAAAReSURBVGjevZrpduIwDIUdstghUCBAC4WWlraULjMDtGXe/80mIQteJMUJOeO/4Xzn6spxJBnG9CV81uLyF2PeHm28uB2LtmB8sbj98yFaC3Rxm+BaMm+S0eZBK7RFTpt3WoCJm4I271ye2m5J+/V7ejFuLNHuL8bdyLT73WU7xddoj+Iy2zTaXlxkm07bh81fqxuTdggvsM2kvYTNbQNoTXFjmNYMx59h2t1dkzPAR2kPDc6ALkprgusRtPq4Z4r25Na1jaI9PIU1baNp9XCTKtrfOrjrKlodnPiu1Pb30xrnf1dr+/z0bJNgRbPF9axo67Ud7tuSFnOrJOi0IUx7H3GbJBi0IUhbr0c2STAiFTDt/d21SIJB41OE9uZUvgmAthCjVeH40aQFDKW90fvEB2gdFmC0JZ3YLkAbMo7SlqO6tB1jHZS2jKiUArR7zgTm23I5IzJxPB5NWlIgDVFtsxmeiVdIW/JRDgkamgkfpKVfvSlO++rXog2TJwHqW4JDrOuCtF26rXFts68vONYJTEt/3CFoP3CsPZgWnsQRtBW4644w7VRpXeG+/ax+oG3yCtPSNLCQ0rYCYhUIbcpycTht4wAbBKY9np4GFG214ta0U/PBCd8ScZG53V6h93T3mBW8HUrbZuMBNFBbVlEKmtY3Ni9CG2bPr0iaLq6H0fbZ85DybbMZmDTQt32eMFrb1rPUlhdsAU3ra68CRsu7GE7TVHE4LU8DcynfNttIp8G+HYp3j9Y2sNNWpIHFJE0JlaAVjX1A0/p2tKKZ5KRvSqi4b/uyW3NJbXKohLZpeQbitBTnWNEO5fEVk9oiO1o5XwlQ31LawMq3Q9nTc1LbwE7buWl2Kd+2drQyDcyjtEm0a4L2cv6KxIRvW5vzTZn8BJQ2bnG+JbTzaIVTvnnVX5mUdnWOwSW0WdJezrTQyjef8k1KA4ttcipIbVIzH9jsN6ziymjS0IfbvAtYNZjRpDQwFznfFFqXot1JP3QwbX2lgKNoQgm18kRCepmCFiihwjSlKJxQ2uTZm4f45lX1pyVNTgOLYW2VnXg5U72Ti9EI3G/9qgmGNF2Rh1Ec1KaVq5yiKRPaEeSbV2MqpRjnQNpqTfO4EqrpW7/WFFSZ4rmmNqfWvFcxzjHOtw14/YTSFON4RaVK3i+cOkquhqrR4B56gtJCNdQlVeGXMYwxWqCGqtKwQYtYIDTFOOaSvYyCg+eWinEO2WcpF6gwTTGOkz2ggrO5Xxide+fVgB7FgbSYaaGW2irmhP4HNO8VWqgFbVA5+50DtEALtaBVTkSZGJs0dSwbFbRKaWkkQ3Oyre2RnOYwm9Wh72V4Thswu+XrNDXUUUazvW9IotUm26pxxIwLXgFxZ+SdaF4NWiJPpqmhprSo5v2bPAWNDeNqX8FzaTYYasY5rP4S5cTMVY0bsUYrLCY/ymd11vivBmFs3rV5rPkK44TmstZWmHSULf6Bh3mu67SIY9yJ2P9a/wDoln8oZFJ6SgAAAABJRU5ErkJggg==","e":1},{"id":"image_10","w":77,"h":122,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAE0AAAB6CAMAAADNqC6XAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAxlBMVEVHcEwOo1KJS30JpVG4NYCuSHC5L4YJpVGXVG/GSWLlVz8MpFIpkFvrYDKHTHy/M38xil7INnfqXjPWRVu4LIvpXTWITH1vXXQNo1LKNnZXbmzTQWQEqE/bS1IBq04sjF3QPmkflVm/KIzLOHLELoITnlToWzihOoXXRlrtYi3UQ2DgUkatMYrjVkBHeWdOdGk1hmBUcGtBfWQ7gWLHM3pabG1gZ29mY3FtX3NzWnV5Vnh/UnqFTXyLSX6SRYCYQILeT0y3Ko2R6U16AAAAHXRSTlMAxL6BXUOf/hEnWUkokXtzZLq6zdzi6aCg5M6H3YTrOv0AAARGSURBVGjevdlpe5swDABghxpqSAIhZ9M2vZs2PbZsbbeea/f//9RykdhGkgXhGV/J80aWDNiyEPbVaIkKr9Z0X1Wn1aYP+42qMHU8ffj5rSqutdC+V5S8vaX2oxrueLrUngYVYI3jVWxPvwbbl3Zno/3efqbUNO15a+5U115ew62wuqX1t+J2LO1tK65ma+8fsvxjdZrX/sjyaQO0T1k6bZB2JcumDdTKceoS0e6SMmlDtbugRNpw7W9xrkZoZ4W5S0orytVp7UwWTButXRTi9lxaIe7QqRXgGrtu7ZHN1Tnao88tAksbMl+fNZZ2fs7jdpnakPMlaxzZ2gDWzjsMrp7TvAGsnaSMIuS0Zx/RTtyPbC2vKQ/Rbpxvz0MgNolpN5HjLX6U12LRh7UZFzqKkNcGIkY1urA7gOYJhWrXnaLaixADVLs+IEsKaEqEuDYiKrELabMXhodr13gljiAtFsLHtS+0EnVQm6/L+6g2+mpimw5Q82Z3YlwbfUVoSQHtdT6tKe0LTt0erM0TExDabRubIJA2/wooSruNkAkCafH8nkdptyE8QSBtXgYhKe2+Db3GYa2/uNultPsInG6Q9ra4m5BaT7G1xcdYkdp9E5puoLYogwgobTwOi2khGdu4DUxeUPOW91MytrGfn7yg9r68L8nYJm2utsoJHdskZGqrQSS01sw9CrC2LIMIac0MDtdWZRABpVnB4Vp/9Qufjq3H0z6y56ZLxmYMldCyuZSQsRlDJbQ4W6jQWo+nZWUQAanpQyW0rAzCJ/M2iVjan/Xrq0vG1uRp60c6IWNr87R4vWAkY2Nq6zLM6kDENuFp6zLM6kDENtGX0Lj2ufmKDOH3m63VKG3zZk14sZFavFm4U3nz3V+ZubYpgwiI2BRP+9xokjXSOqVdaY/gkKM1SE3bzCec+YatuJaatuUL0dh67tXgUtPKIFLGk4Wte1d7QO2HkqM1SE1bGaghkremcy+TafrmNkBii6x1Da7pO28fiS107U/XWlf/5RCOzbkT33Qw9D8+AGNr23sjQtObUSEYm7WWVlSvxmhZdFzfeldXykhcAsVWqJunzKHmtGahLqjRxUvzWlSo32skTua0MdTmOkU1I3HKsVLNZgnefzO2P6mtwXvoPVQzEhdZWg/pJtVYXXdlfU+b7pM7UzMSNxuqERvaGGlMkb6lModK7bP0WYdo0hyqHhvVA25xzhc6Wmw9+ngX1MzEJVpsjj5hC+z3GqkOtZ24s/cLaYk1VLxLkOP285rZ5T3I+iHO0OZF2893ts05ksUWCc41oM9l1ErrCd7l25o1R5Ya97xBKM/qbJuJI3pc8BX38TMjf6EVOvoNPV0zhzoiWo3YJfUuaC5xhY/gVYCcZ80SF4niV+hlWmAmrlPuzNfvrror+sjUqPTpu+zmz9p8Uf6Ss83uRSoqu2R68RhWxwk/TWWFnAjlgfhf1z+KRQLZH3C47QAAAABJRU5ErkJggg==","e":1},{"id":"image_11","w":75,"h":124,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEsAAAB8CAMAAAAW773NAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAn1BMVEVHcEypZGiMJZGKIJSnYWvLszfTxSuraWaoaGukWW/XzyWLIpSudmO+lkm5iVGsbGSEEp27jU+tbWOACaLAmUiDDp/OujKdSnnGpz6hU3OKH5SYPYGTM4e3hVSRLovAmkeGFpqnYWqze1qOJ4+9k0ukWm+BC6G6jU+ra2TKsDnTxCzNtjWbRXyfT3aZQn7PvDGVOYTXziWvdF/CnkTDoUKCFThUAAAAF3RSTlMAn1uifEGzNw/FdDYgiLZVwmbYgNna3K2z7zEAAAQsSURBVGjerdrreqIwEAbg0AIJKiDWdq2t4qFSa4+6e//Xth6o5DAzJIB/d5/3mfkINsnImNtH+KyzT/Rx0xXl/fn46ow6Wv1OKP/zZN12QaWPZ+tp0J7ij6XVvjC++bW+REtKjK7WU8tlIaJNZf20XA1L2eq3o2SrVfrpUrF+npunz7e61Tj9wdawfhqvBtN6bpi+twWsZun7h+0ZU615k/TTwwGqa94gfX6Aredhg9xXSF1z528eb3WxzLzmrulnqxVa171jWDPCcktfzChr7dRkUllAXuu1wxKLZyfrgNa1tm8yeJ3RPdo3Kca11tS2yeRVtsC8ppZNZi+lReQ1tWuSv7y81vdo1+QYsiLDsmkyzjXrnJdnWBZNBnllVXlF0adu1TcpxnkO9OjrPa6ni9om47+gxc28apsM/sEWA6yFqOlQsa55eaBFNxlPgLq2y00KWmSTwWQC9yhAa0F1+IBYEWOPkNWnOtSs37x8xLrDtyFvkwmcF0cs/E9IiFjLEUMsdFUEb5jlodYNFrxplXmlx3+FLWRV9N7RuuSzgmIVcGCDd9TyUGtRgBuLELd8woICC74h65IXJywosPAbrWvECOseKgu3vPNmE7EKAZSFWyluFUBgwe4bz0uQdRmvZLhD6zpEjLAWxdAoC7e2PiPrKoyyCItfriawvLTVOtjtiLwYYZ3qUsPv7Yi6PNIywt/tjxRmpXV1KeH39lRdgzpLWfnhnshrVP6nDWrJD1LsibpWHm2dsL7WIlpXSlqnsmQrpOo6lK+uIOqSHuSeskbGHYyZV2UFpOVZWEOtRczirhZR1/WwvEHfR8naU1ZyPcMTdV0X2IC0fCcrIC3uZPVIq7pZtbXQ55i4W2hdWWeWFFcHdVUv2qatlXRo+bVWoXyxUs+RS1e1Nu8jtVaZnXVrYSWW1p3Fux1L13NUXtV39AOaF6+3znUJi+8vZmEtlL+PPcxK5KEJUZf0pwP9vo8tLfmshuWV2lnaFgCuS95XLfG87tStCWiNmYVVaFs5eD+hRM/RuvSzArzPyews7ZQM778CZRqAWcYFMPgclRtu1Oqbu3vTSqws82QF7aNjZVaIWcBxG9jfZxbWFLpSAM4dXFlesAXfvJvnIWZhwRfvxjlNiZ7DFnbLpJ8f41oLv/jVz7WZuiQAixhTqOdtZdVD1nxI3MkN1LrUUTRgkeOmnmwpXzhsZFr05Eo8SFaiLQndqhuCBZKlP0bNqr89DisrIy2Li2hRWfpjdJ+xBldLaCNW2bIcGIa/lv4YKyuynT2K0lKXhDwLiOxHOeVdbYLMaz88lwnT5Q5ZWRJpZTmOHceG5V0t7jpzHB8tZUlEpRW5D1a5vrzKeUejn61kec6V6E91RZw1+sS5surLu+2GnyRTB9xNi7pUJmGjbcsf+FR7QuG1/U1Ig89/KERy//wbfUMAAAAASUVORK5CYII=","e":1},{"id":"image_12","w":77,"h":120,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_13","w":107,"h":194,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_14","w":104,"h":194,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGgAAADCCAMAAACSRXcbAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAilBMVEVHcEzKsDmSNInSwy2ramWpbGmKIJSoZmmqaGescWS8kE2ACKTVySmHGpi9k0vUyCqmXW2VOISWOYORL4qaQ32MJJGhU3OeTXekWm+2glW5iVGHGZiCDaCtb2KyeVvOuzHMsza7j069k0qnYmrSwi3XzSbBnEXDoELFpEDHqT3JrTqcSXq+lkm/mEj/gyNqAAAAEnRSTlMATl13wBCLQYAnorSq2dXX4MoZJ7wLAAAH7UlEQVR42tWci3qqPBOFg5BCqNputAcU0W6lh7+79397Pwc5hMwkkwh9ns8bWK551wwQEhhz/YmQ/cqPP76KXxGKzq/Rb+iE5/Prb1jilc5rML9QcK6UnsP5AdWOZrdUFq5x9LyYv3C1o+fHeQt3uDqa2ZI4nA+to1ktBYeBo5doxsINHT2/8NkKd5AczWYpuBrqHM1kKaoNHTpHzy/f0TyFyw8jRi/ffJ7CyYwqoRksRXnlaMToe3pLIs8PCqOXl+3kloJWSHI0vaUoz/MmC5Kj7++JLYn8akhxtJ3WUpznktRAaFJLXtrqnBVH2+10lnhaCR0QR8l0luK0rxzgaDJLYZp2SmfV0XY71aV2XeqkaOrK2v2ZqIXSgaMD5GgaSyLdDXSg1CXTWIp3aWPpgDtKJrDk7XZS5aDUTWGJr2shbeqSUunmO/Fo1zk6aBzdbEm8NUJjKcVRcuPz0vptJzM6I46Su9uS8NY6yvWpu9ESXw+F0NRVMsnmFkvRX0kInXWNlPtoFX//vb0RUleHYbNxb9r4b+9Il7rGULJyvjr864XMqdu4W1oPhLSpS65xcGxa/2foKNXPutrRxinh/Odn5MiQulLIKeH++8+I0UHfR4mbJfEuCelT19XOwVL8rjgypm6zsU94+DFyREmdS8LXgJA5dZsn24R7H5BQm7oInnW1kmUc3sdCwyg8joWS3tGTXRy8T8XRoHYB6GhzlbKZ4fzjE3KUX58sowia3k3lnp5s4uB/fn7gqTuHITC9r4Y2TxYJ55+qUDfrSkciVFK37R1ZxMH/gh21jBjkqGNEj4P4ghx1MoeACbyPqh81DvEX5KiXKp/v8MlgEQfxP0hokLpKSOuIGIcYFOpTdw4VR3LLPu0FzRAqdB0NTC2d7IgWh1gjVCs91kvS+GQoHT3RDKGMGkMBIJQMJkOlRIjDEhHqpSJVqEpdNxkqR/dmQyeNo8bSguBob2ylJSbUp040L6q0jPZ3ZkMnxFF3X8dUoURxZGol/6RzVCsFgFAFSWK0N7QSP51OptTBQmNHhtqVhk4nQ+oiRmGkrx0/6R3VlsLmbaKBkb523vF0MqZOAEIAo0xXuweDUN6GThVSHa10ho4aRtfaBaCQymif4bVbHo/m1MVNv5kZ4bkTR51QK3VdPjUy2mcrjaGjOXUhLAQ4wmrHL0cToyp1AhQCGKG58y96R9dZxyAhiFGG5e5BL3StXfva+tHIaJ/BtfMqHXPq4vbVC4ERXLvlxcCokYpgIZDRHrrOisvlQkldCArBjLIMjMLFzKhMnUBKBzAqhRZQFAyMrpAYmVGWQQGvKmfuozzv9kpEZkal1AqKAoFRH7qREMio+ikBvxiFGkgR4gjsIwCSV1wuhD7Ku9ApQmAfZdk44MuCyEhYMKocjQLOWx0jo34Fh9RHY0h+UdAYBYgQymgU8KZyhMmACyGMRpAuBZFRhAmhjFZy5giMaqGFNSMJ0rKgMKqEQhtGjdCwkx6KC7GPBjOLNOvkNJSVozIa/DvSrJPTUIWbVroAE0pwR5mMiCYUoY5wRoM0FAWVkUYImd7lLxwiuhAYpcPQkRg1WncDRAVx1gk7RpmchhoRjdGwyx+pjO77LiKlrrxTlfY8BkZGrafuElFQ+0gjhPdRlvFhuxJSl0qhk4V0fdTGzi/IjDxN6XBG7bRbFuQ+Cu0Ytb+7PgtERtyS0V4SKoqCOuuYJSO5kQoiozyVd/RGZEaNkCiIjNI81glp+ui+TzeNUaQRgtYZQCHKXVCICyXoXVA3GjxyGNLQkpE8g/y+dKY+Yo6MhkKU65FWSDfrsvEEMjAKmB2jLMuQ0hkYxcy2j/ZqGChX2MiWUQbGuzAxkmd3fatKZHRv52iUblkocZkMmBDXOYLW6/aZOr0JqUuZVkgzGbDLBMwoXzNbRq2lxfjCp2cUMFdG4UCIMOsiZsloP7rd8omMIltGLaIVQ+6CkD4KrRmNHpAEsY9Ca0Zy6Ib51goxV0ZCufc+3iKEp44xJQ0aRruAMbdZd8+wBzHYkV5Ic+89ePynMNpFroy49LBsZhTZM6od3ctrWyZGOyXdVEYLabWO4Ch0ZMSZ5VoQd2N0P1oXNKeOuTEKRyudxj5aMydGK2ztFnUUMOYy6+6U1WhT6WLmwkjdbPBgSl3EXGad+mrCN/VR5MAIMMS46QobOjACX8QaXoLsQhdGHH8hhjriDozgt6NLfR8xB0bw/hbDOz5mzwjbGrTUCL0FzJoR+qZc6BiZhRRH+HmNpYZRbM1Isz9DaBxFtoy0mwZ9d6ERI8MmMY4LecBBBw2jvWGPGL7nJDQJyYyMuy2XmCOT0IiRaXcdF5gQN5ZuyIiwMdFHhJgNoxVhmyp/gBkxG0akLZ0e6GjNLBgRd8P6gBA06tB1b+pGYv5AdISse9O35HtOjlpGK4vt677qKDYJdYysdv6vFSHouCv4/sjuLJ/4oghB7/hsD2d4Y0ZGocTxfJ3v5MjlSNDa6Ego72Gdjh6Nzk2E4HVPduR4iE/YCSVb5yOdnkFoITv6435WMNYLybto/txy3DumC92kw/haJzTcJHbb+dTh8Tq90K06ZfT+EYSeb9eplFChblfnNN8X8ExCk31fx0OE2r3Ek31tiXuw0HV39JQfqvJAoUUl9Djt50BiSKjakx9M/SWVGBaa4dMwcaqwCM6zfHTLW4+Vgpm+Vybi3/m223/o938gCYTIKBW1ogAAAABJRU5ErkJggg==","e":1},{"id":"image_15","w":110,"h":192,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_16","w":89,"h":189,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_17","w":80,"h":162,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_18","w":82,"h":193,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_19","w":104,"h":183,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_20","w":89,"h":188,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_21","w":176,"h":97,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_22","w":144,"h":143,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_23","w":142,"h":88,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_24","w":112,"h":83,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHAAAABTCAMAAABwBnPhAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAACXBIWXMAAAABAAAAAQBPJcTWAAAA3lBMVEVHcEwkZIIwqlZavVDX3Fstj2l/xlIpSIs1l2XT2lrk311CuU3r4l2/1Ffr4l4khG8jaoG+01YprlHm3lsijWxdv08oVYYhgHcimmEpSYuJyFJkwU8jpFfN1ligzVXi21nl3VtkwE9Xvk4rtUsilWXv5V8ijWt8xlGFx1Jvw1CSylOoz1Xq4V1Hu00ihnE/uU02t0yx0FUksU3C1FckrFHP11cjpVcjoFvc2Vgjm2AhenwjbIEhgHb362N1xFGhzVSdzFROvE6LyFOYy1S30Va70lYjqFTI1VcmW4bV2FjNYsnuAAAAH3RSTlMAYWE9EiWD/hA9c5DCWJKE36HQ59W4O7DptODnp8rIiTVi+gAAA9ZJREFUaN7tmWl3mkAUQGVRGQQRFHcDmpDESPZFo6WtbdKS//+HChqpy5thZsBvma+e4+W+ZZh5FAr8S5HEUmWzRFGSCkdcsmj3hsPhaDRaXl/f3t7dnZ4+PDxYfeM4VN2++D4ej3eBEfHp6enlxRKLeeO6lxcxcAgA/7xMp9PXtiHmift1uQVc7gMj4uvr2VnbyMdTPrm62gGOMMCz8/OGoWTX+/mbHnh+c9PKpqmYPxiBN99aAj8PnUwOgcsU4Ld5jReJJpMJu2FE5ETq9/dcwPl8vlhwINW3LMBFWGuy8cx3DHBJB+wwKpqP7xkMawJrQ5qPGYCtJnP+zL/8QJ4drvpMAJJzyLW56c/PfIYNvo7XP/iADc43FJpxAdu8L0RUTwGCOeTGFeT6jN2wTSiVtBbRHGbglFSZzRRg1WEG9ol9J5C7UnXSgbs5tMh/WOwQf0eOw2ZokQ+lilEukwuGEZhSmkK5TAZqDhOwQt7FhFrM6xALxnXoc5iSPKEWhjGQsNnpjkNteG2JKbhFuAY2SQl0qYHkaEa4xQZISKBLabhc2qRoKkJtfaZZAfEpVCMenWGP1ApFY3VMTIAGtgNdl9KwRMA1W1unthWwiU1gDKQwJERTERs7x8QVENsRCY4IJESz2G/vnUtjIC6FuuvSGJYUvNzqSHMAFNIDigfaEl4OOnmH5bCs4DqCwrCEk7MwR/2I2KEIKAZow88q9vF3iwgo4ANKNuyC0ZQqxMtMiIuo5qcZQsVSFK14TkMEwhHVfZdseCIBibPv1pMhIlCAA+qTDQ+LRbSp7odhCLe87/sEwxP5IHG0F9IQ3EdRzPNxhhN9n9ajvwGHRUxA8Ybmjp5U6g3HDFdusGRUPwEeGL7pO7Qu45U7hF4UyPP+C+4ZbulFNPahQg1sQc9PFHcNByh5qFKXa4oB9YTq+RjDjZ5u8k4xIEHZ90DDjzr6pEVtyDfFmIOCVQ82rEZ6sm5mGZuAglHFAIazSE9Ws0wxVsAmWDH7hvGqInXAcQPeA7bAioEMtbozm33wTjESYBHaYzwPyuEsDyCmYsAcOjkAoYDKQQAbst6AISC0a2uBFxzLEAooWgtyGaYO2cFNNDiaIchTg09g/jlsgCe1ehBsYpqzIcyrBlkMSUCYJwfBkQxh3lrwGDlswbxPwfwNcddrdZuXXw4b2LsxqmpJSHMzbBspY1+1qiWK2XPYppvlyzHW9X3fzWZoiUyfDiKsqmku9dhkD8j9hVtGeuSrMQGtipj9m28BRcbqYDAgAW27UpHy/na/skZIQqWtJUVLKXytr/W1Mq5/KJN593N99JIAAAAASUVORK5CYII=","e":1},{"id":"image_25","w":214,"h":159,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_26","w":114,"h":259,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_27","w":134,"h":247,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_28","w":112,"h":259,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_29","w":56,"h":89,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADgAAABZCAMAAABc8BfTAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAolBMVEVHcEz+2CL7vSX/xRz6uir3oS/1mTT/7DL2nyjuazr5sCfqSjrvkTf4qSj6uRv+1h74qyb2njLsWzvvbTz9yRL/4yrtYzzyiDv/7zXrUTv9yA3yiz7wfD3vdT30lTrtaTz5siD9yxH2njL3oy3+0Rb7vRXxgT7xhT76uBrzkD/+3CLubz31mTfrTTvsXzz3pyn8xA/8wRH+1Rv4rCXrWDv+4yolL4/gAAAAGnRSTlMAeE0QILeG/jBCZYAP8NChmeC7aenomtLA41K69JoAAALoSURBVFjDtdh3d9sgEABwJIGCsLU8KsfxkjOatOlI637/r1ZN5oHGe/G/vJ+Bu5M4hNDY3zJEs360OEaz3Mvh+GWGW78cDsdihvtawyOe6rKHFq6nuxauJrEleXvoZvw+yRUnASckJChOElyMdrh4l+HoTdL4qsDzBKfCaKR7vGozLkY6A65GuV8mPI9xfyFIRzgQrgfdBYYDz2SQXCzwfsC92uDPpdvZoasEyLMDOkogfVbhmwLtJeB9aPBEZGiNDvutwzyU4c2WwL0BmTLjDY4O3miweqyWhQLXcCL2xowhUoJzA2sn3ZsQUxVCYfX2JiTIVyEQVloCMEKhCn+YG9wAMK8KSYNGWNMSgAyhfAD6TwCMq4GTBhf6QiFYHd+RDrV8pE8QrE5EpkM1H/4fCJJqJNShmo8tCOs4EB0q+fC+QTCvh04uGGxByOqyNyGVJ4RgXL+YfBNG8oQQzFATGwf0/oGw6U6ICcUTuQUhacZyE/LS8e9AyJre4d0BUxDGzVjkgncgbLvM0AEpDNvGjTigB8I2NCh3wBSEfttXXR1wB8GkHYsmw64BD11wC8GupyUQjHg2TNiFBuVTIet6zisEqR3GfTGCENmDk6E+NgC8d8B+MQSCK2QtgKQfiiHIa9wsOa+v4kcIUvE46jDo+wEIitcq1iHhFw4ISieADv1+IIeg9HLcqXDDrxxQZyWfHJ4CP1K++aFeDqszUrFFE6pH1U6CYqUoAaB6HCsv5Iy/34HuUTtUsQxFfg14LvQ2dyegWGlmzmjcAZiAmdiiAYE2TpyP/E8Do0OG2j9+IouV+joEuz/cw1RsUYOWG0faQV6nKFeh7YMF7qDoCNVbgP1q1DRIZSICrUDHbQM3LZknkiHBwvnJwashTwaWrg8D32OqdrUUyWAc5oP3YlaWIhlJD8Pl8CU1KT2x0hYSikb8cOmLlTa9HBt575diWsF4zCr1+8DrJQ6D6R+MgixhMxjyPR993u8/91BMybEguJYAAAAASUVORK5CYII=","e":1},{"id":"image_30","w":58,"h":106,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADoAAABqCAMAAADa67LtAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAACXBIWXMAAAABAAAAAQBPJcTWAAABC1BMVEVHcExf5SasPki4JU2XZEOzMEt74yWTeD4p5imzLktmrjO/FFAi8ifDC1KoSkW3KE2iUkMp5yh8hDt56iS3JU2fVEMs5ClukDmqR0WExCx+eT6B0CmWkDa7Gk5muDBGvjCgdDxdzysg9SZ4dT2FYEFjkzh56iOLtC+OqzF64ybHBVOhcj2XjjeUlzWbhDmeezukaD6RoTOOqjGKtC+oX0CHvS2rVUKuTESxQkaExyu1OUi4L0paoDa7JkyB0Cm+HE5hljhUqjTCE1BojDpvgjxNtDJ2eD59bj/BClJGvTF92ie6FFCDZEGKWkOzHk6RUEWtKE2mMks/xy+fPEmYRkd55iQ40S0x2ysk7yfCQ+mDAAAAKnRSTlMAQTC2IEa9D/5mQJzF6MWFh6iUgOiiaXfjZzWA0NCjwNTMgODW2+bQ4OAWB1D2AAADZklEQVRYw53Ya1fbIBgHcJoQMalt05q00VnrmXY6d3Pq1GnddPf75tzt+3+S5QoBngAhbzm/EwIE/g8ItXnIGrJ8yO6Rrdw4PAos5dPDozU7+Silm1byYUZ3LeTW45w+s5BPStp6nOIHFW07TvEBpXdaymNGl1rJ8KRGn7eR/ilHcQt5xtOOsfTOBWo8Tk4kUtOliKMLkRoOMZleSvSFGZ2+BCgxkd1XEDUZ4sE+SA1Wsb8PU/3sOL0Gqh1i0vtgS6efm+gn3eB+s6X+DwVVzo5zY0vJrUi36nRVQfsijQ8MafhLpD5Hm2fH+y7SviHFXyXqhxy910R3JJqQPkd/N8jJF4mG6NiErr+XKcYCBSeWbMu0jzwTOnonUw+FBjR4I9MkXSICBdYEmQN0gFCip6PXAMWInGhpcAVQN11eIpWX0xyinnhIQnSyAGiU/Ug6iq8h6qctiY5ugjQ9JciphgZvIdrNfkKJCr/ODKRe9udLlF//wUeI9rImV0NnIM0GCZ2qaecnSLOjFJ+p6Qyk3XyrUtPOH5B6+SmrpkOQ9opNWUnJX5AO8sZISccwzSOdc66kKyB1izMPoGw14WWQekUWAShbw2OQFoOEXCUdgrRbNF4o6TJIi9zrKSn5B9FpmQwgSre1Dkj98lOVdAzRqAyREUTp7n8XouUg4UslHULUK094kLK1BNCkSl4Qva+kg7LNheiSklbFDBi5VlW0X4UZTVoDqF9FRZASFa0aXU0elmlcNfU0AV6eV68KqGAyrdWD8mqiqRii9bNKorGyzqnXKtKf49BPhShS0B26Z0EpnK9yBBqyGgmgfEW3wlPa3y5AhaqM39Zof1FPpntCiuA30xH7VJmKdyH8Fr6uKAdHUtaqHxzbrMCS6J5c9Q5rdFT7VJECVzf1k47215GqqwmUvRll/fVFOgITPzvVWbsr0A24vB9TSvuLhHJwq+FigFDKaiyBrjfVRcOSsv4OeOo01nFV5GKDGHHUUdSdJaUfhOs1XaKSaJzTOZuaGu2rr05wTll/3Vp1pbt02cwoXWmEq3M0T57C5RuCyDe4rJldL9gFllvSqWNyQxRcL+inkjIPd43ultLXLthfXiRTz/QGLliw24U8IxJk/ND+4jT8RB6yefzbm4EVRDiJsZ0MY7u+tnj+AweapLiIlbMnAAAAAElFTkSuQmCC","e":1},{"id":"image_31","w":109,"h":53,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG0AAAA1CAMAAAB8+5X+AAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAACXBIWXMAAAABAAAAAQBPJcTWAAAA5FBMVEVHcEyZYE9oNXKjyDuDVl5sNnBiMnd1TGeVdVKdvkCHkVOSKFiVKFZzaWZoL3OhxD1zamW6JD1vY2hgNHeWr0fCIzeLmFGjxzyFjVaixT2JllG2JEDLIjGNnU+LKVxxZmaoJkhXMH1oVG9dP3hfLnlnLXOGjlVvLG5/KmSHKV+Qo0xhRnSPKVlvYmhsXGtkTHJ1bmOlJkp6d19+gVuUqkmBhlicJ1GKl1F1K2qWKFWuJUSYskVzamVaOXtZNnx4c2FxZ2Z8fF2buEOlzDp5K2eevkCNnU+1JUDCIzfNIjC7JD2hxD3ddNRjAAAAIXRSTlMAIH3HMFrAQBA8WaNwgN96kVe3l8KmoO7El3vQ6tjM4OABCBPCAAACjUlEQVRYw+3Y6XaaQBQHcFmHYdEgiOCSNGLcs5AYI6Rp2mjikvd/n46ctDkgBGYYzumH3hf4+Z8L945UKhnFA1k7+ShNAFKlrGJky767+3V7+3xz8/3n5eXVVa/Xu66zfAlUyx4M7u+PtevptGoINCmp1X14GKRqU9d1DVoJeWvy9vaV5rpPTz/OqyyFJkJzPsnUXKShKhoQWQjLq/X7olDEenycz+cYWv+iSugxzssLvnZB5tWar2TacIjtQe79lVhbLrE8yVm9F9CGy/UovwebCCukIW50CvJ1bIWquDYanzLZp8itaGnjsZI1XyQIYa3mcBwNbTxT8z+YiDXNItpsNsvZvs+xLLesLqnm+75CMK6RaZNk8/3FQiXcdECrn+FqiGuTb4eQxMq2WHhKoe0Xkrk1z/O+6QmDv4a1JgRWzKt5QeM4HgexHx/BELNP0gu8IDiKxzRXnFODEu65smJmtiDYNOKzDIaDa9U8mHg5edaopmcLtc1GTxvK4eQyTaslw9xZGcGoJmcLQm2/j3fPSZ7Ktm23NE0GIPPdQceacpJI23di8bjsHXBWR6WxGisAVAnJgaqkaNttNN5h6RBsHDEsgw1LRT8CgfG+hdq2A2IcyX47/3svWaf3DWG73a4RvSvQ2abJJ3nwIpMTceVpu7D0CPdHm1DQFkfZUEXScXSzRfu268TGisSV1rdO43ghSGY5WkNPnkwOLe2zb201fQjKdPvWVr++z8IutZPMosLmWVQ0RWfyLRG5qOYrOsZylqwC2qkCcK8e0CbTFIEhutDJXUxtrahFvmfIdv5/wqJa/NMQb+XQRIPw9JICWulaVWQF6t/zePmkHtUOtwMBVEosCXxU5X/9A/UbTDkfoLCHclMAAAAASUVORK5CYII=","e":1},{"id":"image_32","w":52,"h":110,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAABuCAMAAABfs8BIAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAn1BMVEVHcExbNcI6YNcRpfQ+Zdc0ct01a9sMrPYUo/MOq/Yblu1HS80Vn/F5CK11DbA7X9YQp/UMrPcre+JDVNFzErJ6BawjiOcdkuwXm+8Ro/MkguUuduAMrfYGt/sxbN0Pp/UUn/FjKLwZlu0ejeorf+I3bdpvFrQBvv48ZNZCW9I5X9coe+NIUc57BKxOSMotct9UP8ZaNsI1Zdo9VtQKsPjF03fHAAAAFnRSTlMAP7lcECVZgj6/eX2kjF2b1ujc3LjcmWYWHgAAAtJJREFUWMO12Hl32jAMAHAncRLnKIRQoAeMdivrsbGr/f6fbaQmh2TJR9+Wf3m/JyNfkoWgviQVwZ9cFOGo3G/LYNTstwsZaJLr/fatDg3UoZ0KMuruHTVBqNZolweY9OqMdgG5yHv06J8LuRnQo3cuks8j8l4XzQTtEs98b6bIc13UAG290p5+gcgrVInQtU/aW4yu3NsxWxvInfbaRBvXDMsbArlClRRaO0K1JGrtk3RDoofMhuYMsoZ6YNCtJVT2jUOWUDGLDmwoecujJTs6gBqAnrhQMUAFREwo+ROgHKJnOlSGUAERHSqGKKkh+h5Ro/sEkcoRiqnRYaQQ+kFs4RijFKM5MTqMBEa/pDk6AzUYVcauMFGB0W+MnjA6XTkGmqE9+8dEiYEuIaoIpAx0D7MeE0iY6AKgFwo1BroHCSdRYaJpKuYkyk00TcXSQIvu9jXR18mqeDFQd4ArAo3ji2gkCDSOr2LQzkTj+GIGFQSajXmgUU2gfnzylUE5gY59HjikKHQeXxWEzutvziFBodU5eQTSNceCQEed9GcC6ZqooJA+NV9ZlFPo/U+lgehSZ5xFikKrj6CjniYWCRJFDrT4CCooNHOgnEIX/wMlHMosSHHIMk9CcIlIQ1FkX7CnnHNoGYhSbhPmQwdGrz3yjLAgfYilFqSYTXja70Fo1l9PLJLcGXG6CFkkuCOsGx+LGuawpK7PARXMsXzKH49q5gKg6ogBlQhNSonIG0WgRmSQgmg1LT8iTzSzlaNDT5eydUT3I4MEQBe4tvRBuIyVBxo1E1TZu5oRFRMk7U0XiSqqc2hhFdY32T1aki8GCtZ75yUxoMjZUZsodjf8JmLfGGQ7dgAIVZZOfI1RplFs7d8xUhqlPo9NJUSZ64lKN5IAzd0PWwZqPR6C8q45nqCD1wNrCZHn41uyfRtRJjy/ZEBlwDNp/1CchLxcDpMt/tX3F+UidwW7EEGyAAAAAElFTkSuQmCC","e":1},{"id":"image_33","w":58,"h":106,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADoAAABqCAMAAADa67LtAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAACXBIWXMAAAABAAAAAQBPJcTWAAAA81BMVEVHcEzOwR7QxR88R8RGSKyJWBfTyh+Jaj+FViCDXS98SBqSYhE7SMh+RxVZR3h/UCVrRUVTRohmRVNVRoCriRZ9SBhBSLbIuR08SMVtRUCUZBGUZhG9pxqhehVpRUrEsxx1RSk4SM7UzR/Wzh9QR4/TyR/WzyB9RBN3RCNgRmJuRTtlRVKlgBW0mBmwkhisjBeohhahehS4nxm8pRrAqxudcxQ5SM7DsRyZbROVZxLHtx2RYRGNWxCKVQ9LR52GTw6CSA5NR5bLvR5IR6VQR45TR4ZFR61WRn5ZRnZCR7VzRS/PxB9cRm4/SL1qRUfUzB88SMU2grNyAAAAJ3RSTlMAQIDAP4jADzggqMCl3ItQbSmr3tJoYmd702Lm16PqnPDYq+ao4FBlIB95AAADZklEQVRYw53YZ3ubMBAAYCWGCAEGYyeOR+w6adoMd6UZTZrYaevu4fb//5oCBs1DEuijed7H0h1Id0KozsD7qOHAB1eN5eXVVjO5+/byar+ZfJnSJ43kq4weNJGvc/qugXxT0Npxmrwoad04TS4orRmnyTWjO7Wke8vR93Xk6E6gpIa8F6l9iL0HiW7bS5nahpgsFjK1DDFuPyrUMsTtDyr9hG2kfwJRmxC7JyC1eIv3TmFqzo43q6BHxuDOTiuoMTvDn1X0l0F2z5vSzrmGarOTrJtSPJXpLk912RnOJTq5sKTRXKYjgVZnJz6TaWBJyZlCR65An1ZmVKFjHAj0b9VCfyvURdc21PmuUkIkCiYW91QaoNiGRt9UGiNXos+h6X5R6RihQKLb0HQB6iI0NtPoM0AJwrdG6nwEqJ9uNTJVt5geRGP5kEyp8iYOlgBtpw8CE01WEN1Ln4xNNARpekrgOwN1vkLUzzZkhUqfTgukXnZ+KFR8/50fEM2ChAIDbYE0CxIa66nzB6TZUUru9bQFUj/fqvTU+QfSOD9l9TQEaR4kFGgpvgGpmz980NIBTAlYcon0EKT+ps4DKHubkhuQxptaBKDsHe6DdLZ5GGhpCNJNkNBCSw9Buql7PYgesdRAdFgUTxCl25oD0k5R62npQKXr9bQoItsQ3dLQ+bpbHLaPWhpC1CtOeJCyDw6g07I4hegzLS2ChAKI7mhp2cyAJde2jg7LwtZQrQG0nO8eSLGOlg99Qz2s0m75yFT7q3mNy6WClPDbi0xp4wBR/qxSaFfb5/C9ivLlJLS5gijS0B4tNKEqXCxBJBqxpQJU7OikDSZhS1Wp1JWJ21qP9ZEqle9RxM2UzpcAHYdcWIpbeKJpB9Vmmz842Hx9hR6oXW/I0YgtVaFAHdznKJ2vp3RXUH/Dna9svh2ZTsCKn53qEbdUke7C7X2fUof+JrWDFRJhSlm/LVGvqi8KC3rMrgdEWilRv6B9+stUoJ6m7ywoXRDhe7qxTqJBTrnUcDTQX50kOWWpGXLdlenSJcwoTQ0W+hzDyKtw9YZgMbK4rGmtlsfctcSGtj2bGyJntaSpwUU97FrdLaV/u6RL7eR0FtvewDlLNt+8RsTIetD5kqxu8lCT0ZlPO7iRJNMuaQRR1G021xrjP5N8dkjccU8kAAAAAElFTkSuQmCC","e":1},{"id":"image_34","w":81,"h":159,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_35","w":91,"h":124,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFsAAAB8CAMAAAAxQTwlAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAZlBMVEVHcEyzskGzp0evfGGtam2xhVysT32ve2Ovf2GveWS1wTetYnKqPIizr0KyokqwilisVHqtZW+tXHSxkFWrS3+xllKzqkWym06ubmqvd2Swgl60uD2zsUG1wDirRISqPoeqOYqqM44U3uuaAAAADnRSTlMAd57ogsSlOBZdv9DU3LwokSoAAAV0SURBVGjetZrXtuogFEVJTASsUXMsKV79/5+8QBqwNyUa83zGHOtMFiUSQgIPSxj51ZNcLvRHaPZ3uVz4b9ipZP8GThX6eMx+wM7/eni6OJr/KfbxeKwWh+8ndpUv20V+G9lLw9lfz+6CLwpPblPuSsEXm0XsdjOciGdFl4ttsR9LwdlhZF96J9XjsQw8PSC5l4GzA2TL4EvAVWyrJw/1fA0XsQ3fXW4p5X7/Fp4ezNyjbwm/029jH4CT3sqXydMDmrtHf5VcxUZ8j8HvJ/p57OvB2ROV+2M4ux5s31NPHndFP50+WxUTB3vsiUDfT1v2kW3JviHriWbldPoInlyvHd3Tk9NncHa9WrmPRk8G3+JZz94lr0hurSePMfd5NnwPcpvrSS9FPudzNju2y3fXk8eYWzyzjnObK+bbXE+m3OdixhyiDZZ7hfZE5p4DTxsk9yXPrfVE5T6r4NFNZA2aO+dYbhW8KLax86ZRcLsnOdN6MuQ+9+wisomNIzfJwXoy+BZPNiM2zE04XE9GKUUZM54bZ27m6EmhnjI8nqxuHL4JyWFPJinFLghPa2duKQXvt4xdlMHxbGqn706KtQ5O8LIMTP6k9uSWUly+Swn3j+emxn2L9YR0UpB5OeQuvcrZiIbrIFFS8HnZs73KhRKX76N62bR8d8vJCH8+Pcr3tdO3YvPK3nd0JRLutELr2utbSLH3HV3KU7DX7nL7fROyesB9x8j9z2WlrgO+SaYvVsO+Mw2mYP/DrfC2Dvgm1DkvFVrCcStpG/I9SMHWky63CI7OoLoN+hZSfLkVe4e1pG2DvnspxrwsrNyvzKXE6ZtOUpB5OfREsLHh3Lde3z07hful3m+Z+7V2K/Hm5h7ffe7Xyw6etH7fw/CD/dL2/e/1toNv2ijfJA/1ROS2g7dtlG8lxdtvwbaC0zbON2ERvq3gSRvwPS5CWyt3YfVE5n5nlm6/7/GveUTu987W7fN9GdkU3S8Lk/2mpm6/7+m/XD0c8/KpsdeWbp/vKbdYr+74fqnn3umLSbTvXrjfty5lE+9bSHHvlxM7cw4lzJ1P7HVM7lE4a0O+dTZ375cTe2fUxO9bY7PgeiLYb7Mm3vVEY5NtYD1RbIZVMJibZBG+x6KkYd9HfWFD98snzt6Efets4t0vUbbXt8FeY/tlGcrdROXmET3Bc+O+9fMS8+6XZgdjfBtnsdX9fgr0hMzwbbAzbSzxnuzIDN/UFh65nsT02zi1s+B6ksGtwe3bPEJukdxPdP2OWE8sdhbYL98EroNNZG56P3nn5dra5v2+c/McBvdLoyfcPJ4EfFvstSyhuyfMsc+jviuLnYH9UmfrB0IW9l1Z53VvT7h9ZvP7ttjE02/zyCZeLgO+K5u99szLDLzu+PtdUUS4Yz1h4J0k4JtC4Y7c4C1wE/LNofAzun7Dl0Aa8A0+Ldi6zrHZ3Pd5+NlChu+XL+xnK+b1XdmTh3CHb+773cfh22Yz/H1nF/4tDPZkRaBwJDed//tgBSamnD3A98v5azXbe3JXDA4m6MnOeyPg9G1PHjl7wO9V1HtL4uw3mDwM9iQLXME0V8d9WgYH0/D9LHeh+51r4/CdwsE0c4d/vKeu+zS74N1gar/HRlx/sT3uGxScm7mjLktYit9fMlAU3XfsdWOC3gOCguk92UXfwXLsvhj43Gq+Z1zvsj3MnWHs/p5k3m19AtiwKIOUcu4Hb3Rv342ibJl7/rd0LLXui+1/nPe+Z193q+i5cV9sx6Nd7o/QRH32ODmxB5Mp35+ipZgpd44V/HO0EjN+V4Cwv0LLMVv19/MUFPxbtKKr3OD8swB6oJvC2XaxzzgF/WGg10t+OMuNDwjZ7z74DT//AcuF5S01tYScAAAAAElFTkSuQmCC","e":1},{"id":"image_36","w":77,"h":122,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAE0AAAB6CAMAAADNqC6XAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAxlBMVEVHcEyiUXPehjWfTnePSoSBOpOVRYGGW4ZxWpVoRZ8gcL3ojioQeMMYc7/pkCkrabiFOZGeTXjXfz05X7JjR6FLVarVfj4TdcHpkChuQZ3GcU7HcU3iiTC+aFbHcU20YGFCWq7Nd0anVG+BN5XiijCdTHjagjg5X7IxZLWQQIaKOo4paLgQd8JUUKchbbt3PJlgSaJvQJy4ZFzCbVJnRZ+uXGYZcb6rWWnSfEHVfj3rkieiUHSYSH6URYJKVapOU6kFfcZaTaTrzM/OAAAAHXRSTlMAwjqON5xbECBfOX+4Wr1/2OxZr6jQrt7g0HXX3Ak7JjIAAAQrSURBVGjerdp9X6owFAfwIQiDICQ1M29mXc0se7zdbk+3uu//TV1EkY3tnB0Q/o3Pt21nDPabjNW+jj3W2OWNxseNYc5oPD5sCmud/BqPzxrq6sFJph00gh0/ZlozXbVP19rZqIFiWqe5dtbaHftdaLvOEW79EbQdB85JzkXtZVdM1nYZODd5L2l7O2CzWVmrP3Duh6q91sb+6rSaD5e70Gr1Bq690Gv7tbArQLuohYFa9RnX/glre9UxRNuvjiFaxYFr3+FapYHz7wxalTXOfzBph1Uwo/aDjj2ZtalHxigasQz8nqTR5q9zT9NI89f7R9SOKFgf0KyyNuVmrX+j12xVM5ehdwNojtJTcxniL0CzPFUzlcH/hDRX0zbD0xB8QlrCbFWb4uWcgJqt1dAy9CcTQEs8ZqnaG/ZS7U5AzWbsXNM2pKjRHNY444p2MX2DixrMYc1KH15d247gBwrRnPQLWqe9gYN2CWsJgzSgqNElornpDZZW0xeVX2Laask+12r6oobXiGavVtAKWnyNaatlzNVruinCrzGtnW2K9JpuioS3mOawrAhaTTNFoltEW3SyexJAU96p3i2mXbnZPe+Apky47jOqZf/doWr8GdXa6w9zSCtPkRDX1m85m6gFS1Rb14BZRC3ENXd91wzS9ktNQ7VN0xyiFuJaO98EkjS+xLXN5LRBTXq0YlzbNI1ZoCY9WgNccza3JSQt+ka1Tj4eM5IW4poP78R12gDX8gXCJmn8G9XyGqRFoGgRruU1SItA0WJUG2678EHSQlTz0QRD1Qaotl2kbZr2jWnbGjCrAW1bA/aXpHmYNizmEaYVa0iAab4h+ammFS9Ke3etV4yuhWl7JK2oAVvQNKSmQ2G3imotiuYbEzP1OwTWuBiZIdoRIzynQg1YB9P2KZrQ0bQIiCa+6sEVSYwMFljbWsy8WoodtTFNepsGgOYQcstsDyh/0yy1Wl+85Qprm/wtqH8DijVwMK20E4+1mhhzuJhW2hcFOq1PS2gv1JBgqdHEjrIOoilbtlCjiVsAXinNi1StJ4XklVJQT9V8Yhatiy3VL1VPHjZIe9XljJGsfX51pabD+Zt+1/xcapvUURfUgHg2ljW5o1Dq/gId3XG5p1JHWQdqGxjOyvssqaMcyC3HcBoVSZr0T31Aw6KtgaB1KecL6HFRJGix9Bd9Qms4exoUmpS5OlrNFKQWKUHfePbx6BhT2UGuyR0dqtqIEBhHuRZIj5WabFukQ4DBRisdpZQ14tlJtNbk+dEraw4jXlnGJQ+bV0q2LfoPCIKsbQF8ZpS4Vc6buqu2lY6zBM3iVTDmpZq8UIq5ZaWGrYPLeQycZ9k1fnLRlYetl2uWw2pcfC53dJP81LJWdVXP2jp+Mz8rGaZaUxbjTw/DpizPH/Yc1hQW+w3+4qjG9R92vwL6rN3fRAAAAABJRU5ErkJggg==","e":1},{"id":"image_37","w":75,"h":124,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEsAAAB8CAMAAAAW773NAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAACXBIWXMAAAABAAAAAQBPJcTWAAAA4VBMVEVHcEzr416oz1U+sFS51ViVylSKsWeIul8ph2yWy1Pp4FySylPj31woqVUusVDw5V8ie3osPI+hzVT77mT162IrqlWJyFLf21kpTYqHyFJNvE5bvk8ijGwqRY1vw1ArQo3k3Vri21kjqlPo31wjmmAikWfr4l0+uU3u5V8hgXXS11jL1VfE1Fe90la10VbZ2FiOyVP872Vbv0+u0FUheXx5xVGnzlUjoFsksE4jpFgms0slYIQttUwztkygzVQpSosii20ih3CZy1RKu05RvE7x52BmwVCDx1L26mJtwlAjboFtkvF7AAAAIHRSTlMAV8B6MIUgDz1E7WmaW7+wun/dxXmWqtaww+6z7V3Y6E4TtsEAAAQFSURBVGjevdlpW9pAEADghYSEBBIknIIgoNarh0fFtlaw1hbb//+DShDILtk5cjzdr+Z53Z2dhN0ZIaDRtEVeo3DRyc3qXFxWc6KcTxeX73PCaqH1oZIHZY1X1sc8sOraunUyU7a7saZm5oQYb61Z1jTrSFaQDTPHkvXczhh52boqZYn8WLWuMmRGc8daLMwskVfntbiz0kZ+FLeGKTezqrHu+ilzXmf9MVLl/Ehr/U7zZnYAq5d8M60RYN0kj38VtF76KZYIWDcvCePvjBDrZznxEmGrlyhkLmqd+kmS6wi3ThOErEZZj+yQ2Uek9Wizl0ha3332EmnrGy9k9juO9YUVskLMCnSWzwlZLWYVddakxVli3Ap01qTMWGLcqmite5teYtwytdZXMjHONJYItNa9RyxRa7X11jG+yqrWcgAL30tXYwVCANYxtpfmmca6FaINWAfIKpuAVQGsE+S9bACWBVlP4CrtX4AlAsA62QMzArRKkPUEJVlVby0PXg5oQeF39VZ4IgGtH/rwW6+w1Qatc+15sYBYFdjShr+GWBZsnevyooFYYghbmonZr4C1uie0YetzWRMuzHIQKz6xJmrZiBWfWAO1xD5ixSb2ilsVxPq7MzHrGrKKb982zOruhJ6wBGY9qMnfpKw2ZtXVrKesCmY9qNsIWtN1QFFrIFvXlCWGmCVH36StEmbNLXkbSctDrbq8jbC1/pc2anV51ubaOMSsuS2lBG0ZqDWQUoK2HNSqs6xtnQO1ulJ6wda2ANPHrHkyy0AtK5FlolaZY0UVqx5mDThWcWv1MauezDIyW0H0BchszaJXrZej1edYWN5LNVEjsxXVl0yOVeVZosfI1SbT8hkW9o2eSdVVg/FuC6blgNYh6/dRtgTj+4WcAaazopADRn5Xlz+QPKsFWfK5yYWtQHrMA6xD1hlzOnuWj8j072N47WBZoqe3Bqy7wtKSi7QtvaXesUyeZZDnnFWKgZbcCTDp81cYMdBSWhRay46XJziWr7G6mlo7YO3LT7XIczRYg4lZXtzS3iEbeutKfqZM3js2q6QtQd+HoHrhylI6Cj55T9vsJW21yPsjWkNWksIj77XbkHUoq0zet6OXxI1bSlII1UIbWiG2YwXKA4+yRVRazXivSfm7L1kHVG20sGupbT5Dshg1W3dnXkpSeJG1x+n0ueq81I3cWgesTqLpKvNSOrb21vKYPciObKlJsbaO9wRz2B25F6BuJF0Tjb2bkuVorEQ9rEJkKY1kY2Ul7K2ZwaaPrGxkK7R8kXDYxfW81M90aKXoBVfW/Q4lwZZWWaQY1lsvQA6+NZl4It0ohZYSfE4fBtqC/cWdnPleempVShvmRS03tB3tmyf+x/gHuf5GxB+6iq8AAAAASUVORK5CYII=","e":1},{"id":"image_38","w":77,"h":122,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAE0AAAB6CAMAAADNqC6XAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAjVBMVEVHcEzXiIjipH/ERZHfnILlrHXmrHzVf4jfm4LfmoDyz2D01VnESpH431DptXfajofVgIr321T75kjQdI3fnILbkobrunbdl4TiooDptXjtwm3WhIrUf4vTeozYiYnajojObo/kqH7mrHzsvXPvxmn33FLnsXrz0V3DQZHMaI/KX5D97EPIV5Dxy2PGT5C7ysPAAAAAE3RSTlMAwILMoiDSOVwQYD2CuqbZdN6OeZvAhQAABG1JREFUaN6tmu16qjoQRiElIYDfB0W7t7tVqz2tp/v+L+8ggmSSmSEg/q3P6spMDMkbgmDwZ5EEo32ScL8YDRbP9/twNNjv3/v9PyMNVf+qaPEosMWvOy0aAxb9qWnzMZr5p6E9P9Rk/tbSFk/PjLcHbf/+5ByJ1+s3w+39KZhcQ9pThdNrmzZ5AlYUFu2JwpUwmza8cDrHaPFQGEobVrgox2nhUBhKG1K4aEvS4gEwmjYZACNpX+EQ2JZy++oJO2wZt/evXoUThwPv1meN04cD79anDfp46HJ76QE7drp9J/6wkrY9sG7fnm2Qx2O329e3X+Hi4+VB49y8Cicvl4uX238+z01VwVy30KHJbloJQ90il9bdhtlu19BgT2N3pJ1tEBXMdStC6dK62pBuStrugvRUx71pcrch3OaBcGl/+XbeYJDWuC2CCKGxbVCbTY2z3dZJECI0zbVzcwJuRk/LrSkye/9OuA5sSDdZ7pIQGt2G2IDZdYtuG7g+tKQcJuFW5GW1BUb7lyza6US63bbgEUojmpq+nkwcrNutdfMeNAlhsKfFbcleozS8qdNXxk24u2iWJj5uNKpu8r7zxWgv6Dg/GLfqUCX8adMPzq2qdIjTkCmS/nzQbtv7CW1O0JxnavLzg7tVPa2mR5CsCZozRVafnFue1AcjP1r2+fnD1E3cj7kUzZ4i00/W7f6Uizxp2Zl1q/ejc0/a9My61atrQdFeHDXGTdVrnydtembdRHNu86LJ85muWznf6skp/GirM+vW5B4hSQM/rSXndtg2c7PwoqVXzq3pQSD9aKsr66bJkzhKW/JuzQIhvGjyyro9sqfQi5ZeWbfH+lB40VasmwraJvjQpqybZhMMl7Zk3R6LtPCjXTm3Nv8LB9GgW7tGF7kPTXJuqv1azri1v/qMc9MdyU8nzXRrexCIZ93MHgQhR5t4uWUtLfejMT1Vxn6YpcU+8010JmbuPoR2kyDlomnmY4H8nc7MA85AWutmnnjygqFNAnJFeuCOAWgCQ4sDcrVsYDtzoIKjgadphrpdLrFHbomc2m40dx+izK9wCYZ1Pp2idRNW2UiatSPHn6cSpr00zTrsZpib8ktokeTnjLiB/6gYmnMOx/ZI5hFAMvmbe45JXbcZCOJ6paCJ65aC41y/vHfqzDdw1lG0G5YzprYbGGhC52/4qdl207BsFI24u1tBtx08BeM0+j5Lwp7OYBREuZHhLDhnwY5KKrek06gUuCVI2RwaF20tDbeZcyWAJLSazQMNNwH+skXdNJ8ILls3kLnGaN7bFaSmDzdlzw83i+5OZZeNmzM/bLfQIzBOG7cM/KzcnDz0ugRY1m7W7Yft5nl3kt7dYNlmtpv3tU6VcW1SOFDoFvq/QJBVtNi65jHdet2Cz17tskWmm08vzXGVTVDWQFs33ffOLz2dBHGfJQa8cqFOGezo3S3vOchmMTuBgdZZjRp6MZ+5d21KB6N8VEkbi3W7HxuNlWgVZaO9IyT0iG8cDfj8D45ZCDoCHh+OAAAAAElFTkSuQmCC","e":1},{"id":"image_39","w":104,"h":194,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_40","w":110,"h":192,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_41","w":89,"h":189,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_42","w":84,"h":194,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_43","w":89,"h":189,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_44","w":89,"h":188,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_45","w":176,"h":97,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_46","w":144,"h":143,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_47","w":142,"h":88,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_48","w":112,"h":83,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_49","w":214,"h":159,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_50","w":134,"h":247,"u":"","p":"data:image/png;base64,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","e":1},{"id":"image_51","w":112,"h":259,"u":"","p":"data:image/png;base64,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","e":1}],"layers":[{"ddd":0,"ind":1,"ty":3,"nm":"NULL CONTROL ","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[260.898,561.149,0],"ix":2},"a":{"a":0,"k":[50,50,0],"ix":1},"s":{"a":0,"k":[32,32,100],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":2,"nm":"Layer 2","parent":1,"refId":"image_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[19.171,289.451,0],"ix":2},"a":{"a":0,"k":[476,954,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.721,0.721,0.721],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,19.333]},"t":0,"s":[0,0,100]},{"i":{"x":[0.728,0.728,0.728],"y":[1,1,1]},"o":{"x":[0.212,0.212,0.212],"y":[0,0,0]},"t":11,"s":[116,116,100]},{"t":62,"s":[0,0,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":2,"nm":"Layer 3","parent":1,"refId":"image_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":87.1025390625,"s":[-408.307]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,15.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.215},"t":13.188,"s":[-293.512,-1166.629,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":80.7158203125,"s":[33.872,456.375,0]}],"ix":2},"a":{"a":0,"k":[29,106,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":60.355,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":83.355,"s":[100,-100,100]},{"t":107.35546875,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":2,"nm":"Layer 4","parent":1,"refId":"image_2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":80.771484375,"s":[333.811]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,15.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.237},"t":9.304,"s":[-453.503,-1143.468,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":91.4677734375,"s":[-334.128,424.375,0]}],"ix":2},"a":{"a":0,"k":[29,106,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":58.119,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":81.119,"s":[100,-100,100]},{"t":105.119140625,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":2,"nm":"Layer 5","parent":1,"refId":"image_3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":112.806640625,"s":[277.128]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,-11.278,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.229},"t":9.865,"s":[-641.354,-661.064,0],"to":[0,0,0],"ti":[-256,-2258,0]},{"t":86.390625,"s":[-590.128,520.375,0]}],"ix":2},"a":{"a":0,"k":[54.5,53,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":42.827,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":65.827,"s":[100,-100,100]},{"t":89.8271484375,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":2,"nm":"Layer 6","parent":1,"refId":"image_4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":108.1025390625,"s":[66.474]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,15.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.624,"y":0.756},"o":{"x":0.167,"y":0.172},"t":16.247,"s":[-124.158,-1222.782,0],"to":[0,0,0],"ti":[300.62,-2401.303,0]},{"i":{"x":0.722,"y":1},"o":{"x":0.374,"y":0.813},"t":77,"s":[-804.78,411.671,0],"to":[-10.967,87.605,0],"ti":[11.263,-96.936,0]},{"t":97.466796875,"s":[-646.128,432.375,0]}],"ix":2},"a":{"a":0,"k":[39.5,106,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":51.709,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":74.709,"s":[100,-100,100]},{"t":98.708984375,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":2,"nm":"Layer 7","parent":1,"refId":"image_5","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":76.435546875,"s":[-322.516]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,15.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.206},"t":13.507,"s":[-262.006,-845.219,0],"to":[0,0,0],"ti":[240,-2386,0]},{"t":84.5537109375,"s":[-782.128,616.375,0]}],"ix":2},"a":{"a":0,"k":[29,106,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":65.008,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":88.008,"s":[100,-100,100]},{"t":112.0078125,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":2,"nm":"Layer 8","parent":1,"refId":"image_6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":83.5185546875,"s":[-412.496]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,41.722,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.183},"t":15.715,"s":[-512.143,-859.842,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":103,"s":[-350.128,536.375,0]}],"ix":2},"a":{"a":0,"k":[40.5,159,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":58.388,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":81.388,"s":[100,-100,100]},{"t":105.3876953125,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":2,"nm":"Layer 9","parent":1,"refId":"image_7","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":101.78515625,"s":[343.807]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,24.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.249},"t":12.53,"s":[-527.013,-1046.968,0],"to":[0,0,0],"ti":[-407.77,-1996.524,0]},{"t":100.2724609375,"s":[-502.128,488.375,0]}],"ix":2},"a":{"a":0,"k":[45.5,124,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":59.106,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":82.106,"s":[100,-100,100]},{"t":106.1064453125,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":10,"ty":2,"nm":"Layer 10","parent":1,"refId":"image_8","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":101.15625,"s":[214.936]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,40.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.227},"t":10.553,"s":[49.872,-1251.625,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":90.2548828125,"s":[529.872,440.375,0]}],"ix":2},"a":{"a":0,"k":[36.5,156,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":52.324,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":75.324,"s":[100,-100,100]},{"t":99.32421875,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":11,"ty":2,"nm":"Layer 11","parent":1,"refId":"image_9","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":82.3828125,"s":[-452.243]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,23.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.25},"t":9.722,"s":[17.572,-733.066,0],"to":[0,0,0],"ti":[0,-1.333,0]},{"t":103.9873046875,"s":[57.872,424.375,0]}],"ix":2},"a":{"a":0,"k":[38.5,122,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":52.705,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":75.705,"s":[100,-100,100]},{"t":99.705078125,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":12,"ty":2,"nm":"Layer 12","parent":1,"refId":"image_10","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":115.109375,"s":[316.435]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,23.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.211},"t":11.565,"s":[-183.479,-864.334,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":100.826171875,"s":[-542.128,480.375,0]}],"ix":2},"a":{"a":0,"k":[38.5,122,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":33,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":55.999,"s":[100,-100,100]},{"t":80,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":13,"ty":2,"nm":"Layer 13","parent":1,"refId":"image_11","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":84.4169921875,"s":[88.571]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,24.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.173},"t":15.813,"s":[-618.369,-911.114,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":95,"s":[-486.128,536.375,0]}],"ix":2},"a":{"a":0,"k":[37.5,124,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":43.172,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":66.172,"s":[100,-100,100]},{"t":90.171875,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":14,"ty":2,"nm":"Layer 14","parent":1,"refId":"image_12","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":83.9404296875,"s":[-251.629]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,22.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.191},"t":15.252,"s":[-420.029,-756.057,0],"to":[0,0,0],"ti":[304,-2314,0]},{"t":73.033203125,"s":[65.872,464.375,0]}],"ix":2},"a":{"a":0,"k":[38.5,120,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":53.378,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":76.378,"s":[100,-100,100]},{"t":100.3779296875,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":15,"ty":2,"nm":"Layer 15","parent":1,"refId":"image_13","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":93.32421875,"s":[-221.347]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,59.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.243},"t":10.837,"s":[173.826,-1008.003,0],"to":[0,0,0],"ti":[96,-2098,0]},{"t":105.357421875,"s":[-158.128,448.375,0]}],"ix":2},"a":{"a":0,"k":[53.5,194,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":38.935,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":61.935,"s":[100,-100,100]},{"t":85.9345703125,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":16,"ty":2,"nm":"Layer 16","parent":1,"refId":"image_14","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":110.423828125,"s":[-449.185]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,59.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.142},"t":16.032,"s":[-270.448,-966.067,0],"to":[0,0,0],"ti":[184,-2394,0]},{"t":84,"s":[-638.128,552.375,0]}],"ix":2},"a":{"a":0,"k":[52,194,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":38.72,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":61.72,"s":[100,-100,100]},{"t":85.7197265625,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":17,"ty":2,"nm":"Layer 17","parent":1,"refId":"image_15","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":96.00390625,"s":[183.632]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,58.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.218},"t":8.6,"s":[-186.287,-660.152,0],"to":[0,0,0],"ti":[128,-2218,0]},{"t":103.9892578125,"s":[-614.128,488.375,0]}],"ix":2},"a":{"a":0,"k":[55,192,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":55.063,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":78.063,"s":[100,-100,100]},{"t":102.0634765625,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":18,"ty":2,"nm":"Layer 18","parent":1,"refId":"image_16","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":90.724609375,"s":[-93.048]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,56.722,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.226},"t":9.443,"s":[-308.83,-718.718,0],"to":[0,0,0],"ti":[136,-2018,0]},{"t":93.0234375,"s":[-742.128,544.375,0]}],"ix":2},"a":{"a":0,"k":[44.5,189,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":43.755,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":66.755,"s":[100,-100,100]},{"t":90.7548828125,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":19,"ty":2,"nm":"Layer 19","parent":1,"refId":"image_17","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":85.91796875,"s":[323.925]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,43.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.177},"t":7.259,"s":[131.777,-1201.391,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":80,"s":[137.872,480.375,0]}],"ix":2},"a":{"a":0,"k":[40,162,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":50.032,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":73.032,"s":[100,-100,100]},{"t":97.0322265625,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":20,"ty":2,"nm":"Layer 20","parent":1,"refId":"image_18","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":81.072265625,"s":[-63.263]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,58.722,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.211},"t":9.802,"s":[-139.641,-990.282,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":67.1083984375,"s":[-694.128,544.375,0]}],"ix":2},"a":{"a":0,"k":[41,193,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":37.565,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":60.565,"s":[100,-100,100]},{"t":84.5654296875,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":21,"ty":2,"nm":"Layer 21","parent":1,"refId":"image_19","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":96.97265625,"s":[-315.838]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,53.722,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.209},"t":8.128,"s":[-206.256,-1145.789,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":102,"s":[-806.128,480.375,0]}],"ix":2},"a":{"a":0,"k":[52,183,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":65.619,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":88.619,"s":[100,-100,100]},{"t":112.619140625,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":22,"ty":2,"nm":"Layer 22","parent":1,"refId":"image_20","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":114.46484375,"s":[-259.512]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,56.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.238},"t":8.52,"s":[-366.619,-1069.492,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":96.6259765625,"s":[-686.128,488.375,0]}],"ix":2},"a":{"a":0,"k":[44.5,188,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":40.262,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":63.262,"s":[100,-100,100]},{"t":87.26171875,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":23,"ty":2,"nm":"Layer 23","parent":1,"refId":"image_21","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":78.58203125,"s":[-236.661]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,10.722,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.173},"t":16.523,"s":[-505.73,-563.466,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":73.544921875,"s":[81.872,488.375,0]}],"ix":2},"a":{"a":0,"k":[88,97,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":27.63,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":50.63,"s":[100,-100,100]},{"t":74.6298828125,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":24,"ty":2,"nm":"Layer 24","parent":1,"refId":"image_22","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":79.9482421875,"s":[-65.959]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,33.722,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.182},"t":14.115,"s":[-361.573,-377.534,0],"to":[0,0,0],"ti":[24,-2354,0]},{"t":84.2890625,"s":[-78.128,520.375,0]}],"ix":2},"a":{"a":0,"k":[72,143,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":48.496,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":71.496,"s":[100,-100,100]},{"t":95.49609375,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":25,"ty":2,"nm":"Layer 25","parent":1,"refId":"image_23","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":104.2109375,"s":[-60.331]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,6.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.197},"t":14.122,"s":[-468.314,-460.573,0],"to":[0,0,0],"ti":[296,-2114,0]},{"t":90.72265625,"s":[-198.128,600.375,0]}],"ix":2},"a":{"a":0,"k":[71,88,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":26.418,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":49.418,"s":[100,-100,100]},{"t":73.41796875,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":26,"ty":2,"nm":"Layer 26","parent":1,"refId":"image_24","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":77.802734375,"s":[328.004]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,3.722,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.133},"t":7.976,"s":[-259.378,-370.437,0],"to":[0,0,0],"ti":[272,-2330,0]},{"t":88,"s":[-70.128,528.375,0]}],"ix":2},"a":{"a":0,"k":[56,83,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":62.791,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":85.791,"s":[100,-100,100]},{"t":109.791015625,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":27,"ty":2,"nm":"Layer 27","parent":1,"refId":"image_25","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":83.486328125,"s":[-312.749]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,41.722,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.235},"t":13.124,"s":[-585.135,-722.821,0],"to":[0,0,0],"ti":[208,-2018,0]},{"t":105.2685546875,"s":[-422.128,512.375,0]}],"ix":2},"a":{"a":0,"k":[107,159,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":28.163,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":51.163,"s":[100,-100,100]},{"t":75.1630859375,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":28,"ty":2,"nm":"Layer 28","parent":1,"refId":"image_26","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":110.236328125,"s":[463.981]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,91.722,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.212},"t":7.548,"s":[-29.778,-1062.058,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":86.9501953125,"s":[457.872,488.375,0]}],"ix":2},"a":{"a":0,"k":[57,259,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":53.864,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":76.863,"s":[100,-100,100]},{"t":100.8642578125,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":29,"ty":2,"nm":"Layer 29","parent":1,"refId":"image_27","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":89.0361328125,"s":[-484.46]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,85.722,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.241},"t":9.685,"s":[-411.043,-866.994,0],"to":[0,0,0],"ti":[-80,-2138,0]},{"t":99.0771484375,"s":[-678.128,568.375,0]}],"ix":2},"a":{"a":0,"k":[67,247,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":35.429,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":58.429,"s":[100,-100,100]},{"t":82.4287109375,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":30,"ty":2,"nm":"Layer 30","parent":1,"refId":"image_28","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":104.14453125,"s":[-431.019]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,91.722,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.152},"t":17.008,"s":[-79.428,-780.951,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":97,"s":[-758.128,584.375,0]}],"ix":2},"a":{"a":0,"k":[56,259,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":62.371,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":85.371,"s":[100,-100,100]},{"t":109.37109375,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":31,"ty":2,"nm":"Layer 31","parent":1,"refId":"image_29","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":78.328125,"s":[446.848]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,6.722,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.231},"t":8.974,"s":[318.579,-1167.501,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":80.373046875,"s":[401.872,440.375,0]}],"ix":2},"a":{"a":0,"k":[28,89,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":43.723,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":66.723,"s":[100,-100,100]},{"t":90.72265625,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":32,"ty":2,"nm":"Layer 32","parent":1,"refId":"image_30","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":95.12890625,"s":[-50.488]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,15.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.238},"t":10.871,"s":[492.056,-1143.467,0],"to":[0,0,0],"ti":[296,-2618,0]},{"t":103.08984375,"s":[641.872,448.375,0]}],"ix":2},"a":{"a":0,"k":[29,106,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":41.872,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":64.872,"s":[100,-100,100]},{"t":88.8720703125,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":33,"ty":2,"nm":"Layer 33","parent":1,"refId":"image_31","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":93.06640625,"s":[-141.337]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,-11.278,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.266},"t":7.979,"s":[679.848,-661.065,0],"to":[0,0,0],"ti":[384,-1434,0]},{"t":83.6396484375,"s":[409.872,408.375,0]}],"ix":2},"a":{"a":0,"k":[54.5,53,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":54.619,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":77.619,"s":[100,-100,100]},{"t":101.619140625,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":34,"ty":2,"nm":"Layer 34","parent":1,"refId":"image_32","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":95.068359375,"s":[-111.289]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,17.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.214},"t":14.7,"s":[80.419,-1124.493,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":97.6572265625,"s":[345.872,400.375,0]}],"ix":2},"a":{"a":0,"k":[26,110,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":33.359,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":56.359,"s":[100,-100,100]},{"t":80.359375,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":35,"ty":2,"nm":"Layer 35","parent":1,"refId":"image_33","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":99.09375,"s":[461.811]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,15.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.17},"t":16.078,"s":[300.585,-845.216,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":104,"s":[305.872,472.375,0]}],"ix":2},"a":{"a":0,"k":[29,106,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":30.469,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":53.469,"s":[100,-100,100]},{"t":77.46875,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":36,"ty":2,"nm":"Layer 36","parent":1,"refId":"image_34","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":120,"s":[-363.787]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,41.722,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.186},"t":15.279,"s":[550.606,-859.847,0],"to":[0,0,0],"ti":[456,-2490,0]},{"t":102,"s":[81.872,424.375,0]}],"ix":2},"a":{"a":0,"k":[40.5,159,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":26.315,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":49.315,"s":[100,-100,100]},{"t":73.3154296875,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":37,"ty":2,"nm":"Layer 37","parent":1,"refId":"image_35","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":113.2197265625,"s":[-378.462]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,24.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.192},"t":8.781,"s":[565.396,-1046.958,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":103,"s":[665.872,568.375,0]}],"ix":2},"a":{"a":0,"k":[45.5,124,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":55.754,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":78.753,"s":[100,-100,100]},{"t":102.75390625,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":38,"ty":2,"nm":"Layer 38","parent":1,"refId":"image_36","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":80.3076171875,"s":[54.174]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,23.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.189},"t":16.634,"s":[221.723,-864.331,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":81.63671875,"s":[305.872,448.375,0]}],"ix":2},"a":{"a":0,"k":[38.5,122,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":41.028,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":64.028,"s":[100,-100,100]},{"t":88.0283203125,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":39,"ty":2,"nm":"Layer 39","parent":1,"refId":"image_37","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":95.115234375,"s":[299.774]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,24.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.259},"t":7.976,"s":[657.604,-911.115,0],"to":[0,0,0],"ti":[400,-1810,0]},{"t":74.6279296875,"s":[529.872,440.375,0]}],"ix":2},"a":{"a":0,"k":[37.5,124,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":30.896,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":53.896,"s":[100,-100,100]},{"t":77.896484375,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":40,"ty":2,"nm":"Layer 40","parent":1,"refId":"image_38","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":94.71484375,"s":[408.356]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,23.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.213},"t":14.321,"s":[458.294,-754.048,0],"to":[0,0,0],"ti":[336,-2346,0]},{"t":104.5693359375,"s":[529.872,440.375,0]}],"ix":2},"a":{"a":0,"k":[38.5,122,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":64.818,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":87.818,"s":[100,-100,100]},{"t":111.818359375,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":41,"ty":2,"nm":"Layer 41","parent":1,"refId":"image_39","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":87.1083984375,"s":[276.287]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,59.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.206},"t":13.954,"s":[309.209,-966.075,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":83.669921875,"s":[529.872,440.375,0]}],"ix":2},"a":{"a":0,"k":[52,194,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":50.654,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":73.654,"s":[100,-100,100]},{"t":97.654296875,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":42,"ty":2,"nm":"Layer 42","parent":1,"refId":"image_40","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":106.5673828125,"s":[-1.984]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,58.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.186},"t":14.708,"s":[225.01,-660.153,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":92.6083984375,"s":[649.872,544.375,0]}],"ix":2},"a":{"a":0,"k":[55,192,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":35.781,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":58.781,"s":[100,-100,100]},{"t":82.78125,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":43,"ty":2,"nm":"Layer 43","parent":1,"refId":"image_41","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":87.626953125,"s":[-494.691]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,56.722,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.206},"t":11.514,"s":[32.736,-923.559,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":88.0556640625,"s":[529.872,440.375,0]}],"ix":2},"a":{"a":0,"k":[44.5,189,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":56.146,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":79.146,"s":[100,-100,100]},{"t":103.146484375,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":44,"ty":2,"nm":"Layer 44","parent":1,"refId":"image_42","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":78.0693359375,"s":[-385.194]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,59.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.216},"t":14.825,"s":[244.176,-1136.626,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":91.99609375,"s":[529.872,440.375,0]}],"ix":2},"a":{"a":0,"k":[42,194,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":36.859,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":59.859,"s":[100,-100,100]},{"t":83.859375,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":45,"ty":2,"nm":"Layer 45","parent":1,"refId":"image_43","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.735],"y":[0.9]},"o":{"x":[0.159],"y":[0.09]},"t":0,"s":[0]},{"t":87,"s":[445.112]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,56.722,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.178},"t":15.908,"s":[347.991,-718.714,0],"to":[0,0,0],"ti":[144,-2674,0]},{"t":121,"s":[529.872,440.375,0]}],"ix":2},"a":{"a":0,"k":[44.5,189,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":42.171,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":65.171,"s":[100,-100,100]},{"t":89.1708984375,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":46,"ty":2,"nm":"Layer 46","parent":1,"refId":"image_44","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":91.416015625,"s":[333.236]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,56.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.238},"t":8,"s":[400.078,-1076.292,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":99.583984375,"s":[529.872,440.375,0]}],"ix":2},"a":{"a":0,"k":[44.5,188,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":65.277,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":88.277,"s":[100,-100,100]},{"t":112.27734375,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":47,"ty":2,"nm":"Layer 47","parent":1,"refId":"image_45","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":113.0849609375,"s":[-485.494]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,10.722,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.208},"t":15.515,"s":[544.431,-563.471,0],"to":[0,0,0],"ti":[384,-1994,0]},{"t":94.806640625,"s":[529.872,440.375,0]}],"ix":2},"a":{"a":0,"k":[88,97,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":54.68,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":77.68,"s":[100,-100,100]},{"t":101.6796875,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":48,"ty":2,"nm":"Layer 48","parent":1,"refId":"image_46","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":97.6953125,"s":[-409.417]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,33.722,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.215},"t":7.144,"s":[400.007,-377.545,0],"to":[0,0,0],"ti":[240,-1674,0]},{"t":92.912109375,"s":[593.872,448.375,0]}],"ix":2},"a":{"a":0,"k":[72,143,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":42.787,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":65.787,"s":[100,-100,100]},{"t":89.787109375,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":49,"ty":2,"nm":"Layer 49","parent":1,"refId":"image_47","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":115.154296875,"s":[-336.791]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,6.222,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.173},"t":8.119,"s":[506.829,-460.573,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":103,"s":[633.872,456.375,0]}],"ix":2},"a":{"a":0,"k":[71,88,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":32.079,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":55.079,"s":[100,-100,100]},{"t":79.0791015625,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":50,"ty":2,"nm":"Layer 50","parent":1,"refId":"image_48","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":88.5029296875,"s":[-210.512]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,3.722,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.194},"t":7.479,"s":[297.883,-370.437,0],"to":[0,0,0],"ti":[344,-2146,0]},{"t":102.8251953125,"s":[609.872,504.375,0]}],"ix":2},"a":{"a":0,"k":[56,83,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":35.676,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":58.676,"s":[100,-100,100]},{"t":82.67578125,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":51,"ty":2,"nm":"Layer 51","parent":1,"refId":"image_49","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":92.5166015625,"s":[317.237]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,41.722,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.245},"t":7.901,"s":[623.397,-722.821,0],"to":[0,0,0],"ti":[96,-1842,0]},{"t":71.728515625,"s":[745.872,504.375,0]}],"ix":2},"a":{"a":0,"k":[107,159,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":33.498,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":56.497,"s":[100,-100,100]},{"t":80.498046875,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":52,"ty":2,"nm":"Layer 52","parent":1,"refId":"image_50","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":84.5986328125,"s":[159.427]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,85.722,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.169},"t":10.031,"s":[449.823,-866.997,0],"to":[0,0,0],"ti":[320,-2754,0]},{"t":95,"s":[601.872,560.375,0]}],"ix":2},"a":{"a":0,"k":[67,247,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":65.121,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":88.121,"s":[100,-100,100]},{"t":112.12109375,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0},{"ddd":0,"ind":53,"ty":2,"nm":"Layer 53","parent":1,"refId":"image_51","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":107.0546875,"s":[146.171]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[43.284,91.722,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.721,"y":1},"o":{"x":0.167,"y":0.194},"t":11.752,"s":[117.819,-780.948,0],"to":[0,0,0],"ti":[72,-3306,0]},{"t":95.6337890625,"s":[697.872,536.375,0]}],"ix":2},"a":{"a":0,"k":[56,259,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.519,0.519,0.519],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":42.219,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":65.218,"s":[100,-100,100]},{"t":89.21875,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":105,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/extras/6592-downloading-icon-by-amin-edalatipour.json b/extras/6592-downloading-icon-by-amin-edalatipour.json new file mode 100644 index 0000000..2f7b54b --- /dev/null +++ b/extras/6592-downloading-icon-by-amin-edalatipour.json @@ -0,0 +1 @@ +{"v":"5.4.3","fr":29.9700012207031,"ip":0,"op":70.0000028511585,"w":307,"h":389,"nm":"refresh-button","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-44,"ix":10},"p":{"a":0,"k":[154.149,195.327,0],"ix":2},"a":{"a":0,"k":[-2.021,-4,0],"ix":1},"s":{"a":0,"k":[71.946,71.946,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[217,217],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.211764705882,0.211764705882,0.211764705882,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":2,"lj":1,"ml":4,"ml2":{"a":0,"k":4,"ix":8},"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":33,"ix":1}},{"n":"o","nm":"offset","v":{"a":0,"k":0,"ix":7}}],"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[-1.5,-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":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.625],"y":[0]},"n":["0p667_1_0p625_0"],"t":26,"s":[0],"e":[100]},{"t":65.0000026475043}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[1],"y":[0]},"n":["0p667_1_1_0"],"t":7,"s":[0],"e":[100]},{"t":41.0000016699642}],"ix":2},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[-179],"e":[181]},{"t":65.0000026475043}],"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":70.0000028511585,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Shape Layer 3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-44,"ix":10},"p":{"a":0,"k":[154.149,195.327,0],"ix":2},"a":{"a":0,"k":[-2.021,-4,0],"ix":1},"s":{"a":0,"k":[71.946,71.946,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[217,217],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.31397151573,0.909803921569,0.778370337393,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":2,"lj":1,"ml":4,"ml2":{"a":0,"k":4,"ix":8},"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":33,"ix":1}},{"n":"o","nm":"offset","v":{"a":0,"k":0,"ix":7}}],"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[-1.5,-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":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.625],"y":[0]},"n":["0p667_1_0p625_0"],"t":26,"s":[0],"e":[100]},{"t":65.0000026475043}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[1],"y":[0]},"n":["0p667_1_1_0"],"t":0,"s":[0],"e":[100]},{"t":41.0000016699642}],"ix":2},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[-224],"e":[136]},{"t":65.0000026475043}],"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":70.0000028511585,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Shape Layer 4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-44,"ix":10},"p":{"a":0,"k":[154.149,195.327,0],"ix":2},"a":{"a":0,"k":[-2.021,-4,0],"ix":1},"s":{"a":0,"k":[46.072,46.072,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[217,217],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.862745098039,0.669896324008,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":2,"lj":1,"ml":4,"ml2":{"a":0,"k":4,"ix":8},"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[-1.5,-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":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[1],"y":[0]},"n":["0p667_1_1_0"],"t":0,"s":[100],"e":[0]},{"t":38.0000015477717}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.733],"y":[0.015]},"n":["0p667_1_0p733_0p015"],"t":19,"s":[100],"e":[0]},{"t":60.0000024438501}],"ix":2},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[-319],"e":[-679]},{"t":65.0000026475043}],"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":70.0000028511585,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Shape Layer 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-44,"ix":10},"p":{"a":0,"k":[154.149,195.327,0],"ix":2},"a":{"a":0,"k":[-2.021,-4,0],"ix":1},"s":{"a":0,"k":[46.072,46.072,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[217,217],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.105882352941,0.105882352941,0.105882352941,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":2,"lj":1,"ml":4,"ml2":{"a":0,"k":4,"ix":8},"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[-1.5,-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":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[1],"y":[0]},"n":["0p667_1_1_0"],"t":0,"s":[100],"e":[0]},{"t":38.0000015477717}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.733],"y":[0.015]},"n":["0p667_1_0p733_0p015"],"t":19,"s":[100],"e":[0]},{"t":60.0000024438501}],"ix":2},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[-224],"e":[-584]},{"t":65.0000026475043}],"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":70.0000028511585,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Shape Layer 5","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[4.436],"e":[-355.564]},{"t":69.0000028104276}],"ix":10},"p":{"a":0,"k":[155,194,0],"ix":2},"a":{"a":0,"k":[-1.5,-4,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[217,217],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.317031890271,0.850980392157,0.731588206572,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":1,"lj":1,"ml":4,"ml2":{"a":0,"k":4,"ix":8},"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[-1.5,-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":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":0,"k":85,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":70.0000028511585,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[4.436],"e":[-355.564]},{"t":69.0000028104276}],"ix":10},"p":{"a":0,"k":[155,194,0],"ix":2},"a":{"a":0,"k":[-1.5,-4,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[217,217],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.462745098039,0.359274142396,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":1,"lj":1,"ml":4,"ml2":{"a":0,"k":4,"ix":8},"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[-1.5,-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":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":0,"k":85,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":70.0000028511585,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"refresh-button Outlines","parent":7,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":85.093,"ix":10},"p":{"a":0,"k":[-6.619,-112.041,0],"ix":2},"a":{"a":0,"k":[188.881,115.959,0],"ix":1},"s":{"a":0,"k":[58.516,58.516,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[1.875,-1.875],[-1.875,-1.875],[0,0],[-1.274,0],[-0.898,0.903],[0,0],[1.875,1.875],[1.875,-1.875],[0,0]],"o":[[-1.875,-1.875],[-1.875,1.875],[0,0],[0.899,0.903],[1.277,0],[0,0],[1.875,-1.875],[-1.875,-1.875],[0,0],[0,0]],"v":[[-14.662,-12.188],[-21.451,-12.188],[-21.451,-5.398],[-3.393,12.656],[-0.002,14.063],[3.392,12.656],[21.451,-5.398],[21.451,-12.188],[14.662,-12.188],[-0.002,2.473]],"c":true},"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]],"o":[[0,0]],"v":[[-14.662,-12.188]],"c":false},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.003921568627,0.862745098039,0.670588235294,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[188.943,118.162],"ix":2},"a":{"a":0,"k":[0.062,2.438],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"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}],"ip":0,"op":70.0000028511585,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/extras/calendar_today-black-24dp.svg b/extras/calendar_today-black-24dp.svg new file mode 100644 index 0000000..bdeabae --- /dev/null +++ b/extras/calendar_today-black-24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/extras/date_range-black-24dp.svg b/extras/date_range-black-24dp.svg new file mode 100644 index 0000000..0317c3b --- /dev/null +++ b/extras/date_range-black-24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/extras/today-black-24dp.svg b/extras/today-black-24dp.svg new file mode 100644 index 0000000..8447d8a --- /dev/null +++ b/extras/today-black-24dp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fastlane/Appfile b/fastlane/Appfile deleted file mode 100644 index 620a499..0000000 --- a/fastlane/Appfile +++ /dev/null @@ -1,2 +0,0 @@ -json_key_file("api-5245190277294621651-718463-f914fb7573c6.json") # Path to the json secret file - Follow https://docs.fastlane.tools/actions/supply/#setup to get one -package_name("com.javinator9889.handwashingreminder") # e.g. com.krausefx.app diff --git a/fastlane/Fastfile b/fastlane/Fastfile deleted file mode 100644 index ce0f9bd..0000000 --- a/fastlane/Fastfile +++ /dev/null @@ -1,58 +0,0 @@ -# This file contains the fastlane.tools configuration -# You can find the documentation at https://docs.fastlane.tools -# -# For a list of all available actions, check out -# -# https://docs.fastlane.tools/actions -# -# For a list of all available plugins, check out -# -# https://docs.fastlane.tools/plugins/available-plugins -# - -# Uncomment the line if you want fastlane to automatically update itself -# update_fastlane - -default_platform(:android) - -platform :android do - - desc "Builds the debug code" - lane :buildDebug do - gradle(task: "assembleDebug") - end - - desc "Builds the release code" - lane :buildRelease do - gradle(task: "assembleRelease") - end - - desc "Runs all the tests" - lane :test do - gradle(task: "test") - end - - desc "Submit a new Internal Build to Play Store" - lane :internal do - upload_to_play_store(track: 'internal', apk: 'app/build/outputs/apk/release/app-release.apk') - end - - # `skip_upload_changelogs` from https://github.com/fastlane/fastlane/issues/15681#issuecomment-556617987 - desc "Promote Internal to Alpha" - lane :promote_internal_to_alpha do - upload_to_play_store(track: 'internal', skip_upload_changelogs: true, track_promote_to: 'alpha') - end - - # `skip_upload_changelogs` from https://github.com/fastlane/fastlane/issues/15681#issuecomment-556617987 - desc "Promote Alpha to Beta" - lane :promote_alpha_to_beta do - upload_to_play_store(track: 'alpha', skip_upload_changelogs: true, track_promote_to: 'beta') - end - - # `skip_upload_changelogs` from https://github.com/fastlane/fastlane/issues/15681#issuecomment-556617987 - desc "Promote Beta to Production" - lane :promote_beta_to_production do - upload_to_play_store(track: 'beta', skip_upload_changelogs: true, track_promote_to: 'production') - end -end - diff --git a/fastlane/README.md b/fastlane/README.md deleted file mode 100644 index dc840ad..0000000 --- a/fastlane/README.md +++ /dev/null @@ -1,59 +0,0 @@ -fastlane documentation -================ -# Installation - -Make sure you have the latest version of the Xcode command line tools installed: - -``` -xcode-select --install -``` - -Install _fastlane_ using -``` -[sudo] gem install fastlane -NV -``` -or alternatively using `brew cask install fastlane` - -# Available Actions -## Android -### android buildDebug -``` -fastlane android buildDebug -``` -Builds the debug code -### android buildRelease -``` -fastlane android buildRelease -``` -Builds the release code -### android test -``` -fastlane android test -``` -Runs all the tests -### android internal -``` -fastlane android internal -``` -Submit a new Internal Build to Play Store -### android promote_internal_to_alpha -``` -fastlane android promote_internal_to_alpha -``` -Promote Internal to Alpha -### android promote_alpha_to_beta -``` -fastlane android promote_alpha_to_beta -``` -Promote Alpha to Beta -### android promote_beta_to_production -``` -fastlane android promote_beta_to_production -``` -Promote Beta to Production - ----- - -This README.md is auto-generated and will be re-generated every time [fastlane](https://fastlane.tools) is run. -More information about fastlane can be found on [fastlane.tools](https://fastlane.tools). -The documentation of fastlane can be found on [docs.fastlane.tools](https://docs.fastlane.tools). diff --git a/fastlane/metadata/android/es-ES/full_description.txt b/fastlane/metadata/android/es-ES/full_description.txt deleted file mode 100644 index 466eded..0000000 --- a/fastlane/metadata/android/es-ES/full_description.txt +++ /dev/null @@ -1 +0,0 @@ -Una aplicación que te recuerda que te laves las manos de forma inteligente \ No newline at end of file diff --git a/fastlane/metadata/android/es-ES/images/featureGraphic.png b/fastlane/metadata/android/es-ES/images/featureGraphic.png deleted file mode 100644 index b6861fb..0000000 Binary files a/fastlane/metadata/android/es-ES/images/featureGraphic.png and /dev/null differ diff --git a/fastlane/metadata/android/es-ES/images/icon.png b/fastlane/metadata/android/es-ES/images/icon.png deleted file mode 100644 index face3ce..0000000 Binary files a/fastlane/metadata/android/es-ES/images/icon.png and /dev/null differ diff --git a/fastlane/metadata/android/es-ES/images/phoneScreenshots/1_es-ES.png b/fastlane/metadata/android/es-ES/images/phoneScreenshots/1_es-ES.png deleted file mode 100644 index cd5ff86..0000000 Binary files a/fastlane/metadata/android/es-ES/images/phoneScreenshots/1_es-ES.png and /dev/null differ diff --git a/fastlane/metadata/android/es-ES/images/phoneScreenshots/2_es-ES.png b/fastlane/metadata/android/es-ES/images/phoneScreenshots/2_es-ES.png deleted file mode 100644 index d5b7eaa..0000000 Binary files a/fastlane/metadata/android/es-ES/images/phoneScreenshots/2_es-ES.png and /dev/null differ diff --git a/fastlane/metadata/android/es-ES/short_description.txt b/fastlane/metadata/android/es-ES/short_description.txt deleted file mode 100644 index 466eded..0000000 --- a/fastlane/metadata/android/es-ES/short_description.txt +++ /dev/null @@ -1 +0,0 @@ -Una aplicación que te recuerda que te laves las manos de forma inteligente \ No newline at end of file diff --git a/fastlane/metadata/android/es-ES/title.txt b/fastlane/metadata/android/es-ES/title.txt deleted file mode 100644 index 14aa7c7..0000000 --- a/fastlane/metadata/android/es-ES/title.txt +++ /dev/null @@ -1 +0,0 @@ -Handwashing reminder \ No newline at end of file diff --git a/fastlane/metadata/android/es-ES/video.txt b/fastlane/metadata/android/es-ES/video.txt deleted file mode 100644 index e69de29..0000000 diff --git a/fastlane/report.xml b/fastlane/report.xml deleted file mode 100644 index aa300ac..0000000 --- a/fastlane/report.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/firebase.json b/firebase.json new file mode 100644 index 0000000..b1a3ed3 --- /dev/null +++ b/firebase.json @@ -0,0 +1,54 @@ +{ + "functions": { + "predeploy": [ + "npm --prefix \"$RESOURCE_DIR\" run lint", + "npm --prefix \"$RESOURCE_DIR\" run build" + ], + "source": "functions" + }, + "hosting": { + "public": "public", + "ignore": [ + "firebase.json", + "**/.*", + "**/node_modules/**" + ], + "rewrites": [ + { + "source": "/{,**}", + "destination": "/api/v1" + }, + { + "source": "/api/v1**", + "function": "www-webApi" + } + ] + }, + "firestore": { + "rules": "firestore.rules", + "indexes": "firestore.indexes.json" + }, + "emulators": { + "functions": { + "port": 5001 + }, + "firestore": { + "port": 8080 + }, + "hosting": { + "port": 5000 + }, + "pubsub": { + "port": 8085 + }, + "ui": { + "enabled": true + }, + "database": { + "port": 9000 + } + }, + "storage": { + "rules": "storage.rules" + } +} diff --git a/functions/.dockerignore b/functions/.dockerignore new file mode 100644 index 0000000..730cbec --- /dev/null +++ b/functions/.dockerignore @@ -0,0 +1,2 @@ +node_modules +ui-debug.log \ No newline at end of file diff --git a/functions/.gitignore b/functions/.gitignore new file mode 100644 index 0000000..0b9c6b4 --- /dev/null +++ b/functions/.gitignore @@ -0,0 +1,15 @@ +## Compiled JavaScript files +**/*.js +**/*.js.map + +# Typescript v1 declaration files +typings/ + +node_modules/ + +handwashing-firebase-adminsdk.json +.runtimeconfig.json + +# Log files +*.log +admin-sdk.json \ No newline at end of file diff --git a/functions/.idea/.gitignore b/functions/.idea/.gitignore new file mode 100644 index 0000000..b58b603 --- /dev/null +++ b/functions/.idea/.gitignore @@ -0,0 +1,5 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/functions/.idea/codeStyles/codeStyleConfig.xml b/functions/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 0000000..a55e7a1 --- /dev/null +++ b/functions/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/functions/.idea/dictionaries/javinator9889.xml b/functions/.idea/dictionaries/javinator9889.xml new file mode 100644 index 0000000..c228d45 --- /dev/null +++ b/functions/.idea/dictionaries/javinator9889.xml @@ -0,0 +1,8 @@ + + + + mins + newsriver + + + \ No newline at end of file diff --git a/functions/.idea/inspectionProfiles/Project_Default.xml b/functions/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..9c69411 --- /dev/null +++ b/functions/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/functions/.idea/jsLibraryMappings.xml b/functions/.idea/jsLibraryMappings.xml new file mode 100644 index 0000000..f100f32 --- /dev/null +++ b/functions/.idea/jsLibraryMappings.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/functions/.idea/misc.xml b/functions/.idea/misc.xml new file mode 100644 index 0000000..28a804d --- /dev/null +++ b/functions/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/functions/.idea/modules.xml b/functions/.idea/modules.xml new file mode 100644 index 0000000..17059ae --- /dev/null +++ b/functions/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/functions/.idea/vcs.xml b/functions/.idea/vcs.xml new file mode 100644 index 0000000..6c0b863 --- /dev/null +++ b/functions/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/functions/.idea/watcherTasks.xml b/functions/.idea/watcherTasks.xml new file mode 100644 index 0000000..ef17274 --- /dev/null +++ b/functions/.idea/watcherTasks.xml @@ -0,0 +1,25 @@ + + + + + + + + \ No newline at end of file diff --git a/functions/daemon.json b/functions/daemon.json new file mode 100644 index 0000000..32b4eb2 --- /dev/null +++ b/functions/daemon.json @@ -0,0 +1,9 @@ +{ + "apps": [ + { + "name": "Newsriver-daemon", + "script": "npm", + "args": "run daemon" + } + ] +} \ No newline at end of file diff --git a/functions/lib/tsconfig.tsbuildinfo b/functions/lib/tsconfig.tsbuildinfo new file mode 100644 index 0000000..c99f439 --- /dev/null +++ b/functions/lib/tsconfig.tsbuildinfo @@ -0,0 +1,2500 @@ +{ + "program": { + "fileInfos": { + "../node_modules/typescript/lib/lib.es5.d.ts": { + "version": "70ae6416528e68c2ee7b62892200d2ca631759943d4429f8b779b947ff1e124d", + "signature": "70ae6416528e68c2ee7b62892200d2ca631759943d4429f8b779b947ff1e124d", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.d.ts": { + "version": "dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6", + "signature": "dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6", + "affectsGlobalScope": false + }, + "../node_modules/typescript/lib/lib.es2016.d.ts": { + "version": "7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467", + "signature": "7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467", + "affectsGlobalScope": false + }, + "../node_modules/typescript/lib/lib.es2017.d.ts": { + "version": "8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9", + "signature": "8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9", + "affectsGlobalScope": false + }, + "../node_modules/typescript/lib/lib.dom.d.ts": { + "version": "9affb0a2ddc57df5b8174c0af96c288d697a262e5bc9ca1f544c999dc64a91e6", + "signature": "9affb0a2ddc57df5b8174c0af96c288d697a262e5bc9ca1f544c999dc64a91e6", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.dom.iterable.d.ts": { + "version": "fb0c09b697dc42afa84d1587e3c994a2f554d2a45635e4f0618768d16a86b69a", + "signature": "fb0c09b697dc42afa84d1587e3c994a2f554d2a45635e4f0618768d16a86b69a", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.webworker.importscripts.d.ts": { + "version": "7fac8cb5fc820bc2a59ae11ef1c5b38d3832c6d0dfaec5acdb5569137d09a481", + "signature": "7fac8cb5fc820bc2a59ae11ef1c5b38d3832c6d0dfaec5acdb5569137d09a481", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.scripthost.d.ts": { + "version": "097a57355ded99c68e6df1b738990448e0bf170e606707df5a7c0481ff2427cd", + "signature": "097a57355ded99c68e6df1b738990448e0bf170e606707df5a7c0481ff2427cd", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.core.d.ts": { + "version": "63e0cc12d0f77394094bd19e84464f9840af0071e5b9358ced30511efef1d8d2", + "signature": "63e0cc12d0f77394094bd19e84464f9840af0071e5b9358ced30511efef1d8d2", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.collection.d.ts": { + "version": "43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c", + "signature": "43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.generator.d.ts": { + "version": "cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a", + "signature": "cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.iterable.d.ts": { + "version": "42f5e41e5893da663dbf0394268f54f1da4b43dc0ddd2ea4bf471fe5361d6faf", + "signature": "42f5e41e5893da663dbf0394268f54f1da4b43dc0ddd2ea4bf471fe5361d6faf", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.promise.d.ts": { + "version": "0b7a905675e6cb4211c128f0a3aa47d414b275180a299a9aad5d3ec298abbfc4", + "signature": "0b7a905675e6cb4211c128f0a3aa47d414b275180a299a9aad5d3ec298abbfc4", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.proxy.d.ts": { + "version": "dfff68b3c34338f6b307a25d4566de15eed7973b0dc5d69f9fde2bcac1c25315", + "signature": "dfff68b3c34338f6b307a25d4566de15eed7973b0dc5d69f9fde2bcac1c25315", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.reflect.d.ts": { + "version": "cb609802a8698aa28b9c56331d4b53f590ca3c1c3a255350304ae3d06017779d", + "signature": "cb609802a8698aa28b9c56331d4b53f590ca3c1c3a255350304ae3d06017779d", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.symbol.d.ts": { + "version": "3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93", + "signature": "3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts": { + "version": "4670208dd7da9d6c774ab1b75c1527a810388c7989c4905de6aaea8561cb9dce", + "signature": "4670208dd7da9d6c774ab1b75c1527a810388c7989c4905de6aaea8561cb9dce", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2016.array.include.d.ts": { + "version": "3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006", + "signature": "3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2017.object.d.ts": { + "version": "17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a", + "signature": "17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts": { + "version": "d0db416bccdb33975548baf09a42ee8c47eace1aac7907351a000f1e568e7232", + "signature": "d0db416bccdb33975548baf09a42ee8c47eace1aac7907351a000f1e568e7232", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2017.string.d.ts": { + "version": "6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577", + "signature": "6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2017.intl.d.ts": { + "version": "12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d", + "signature": "12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts": { + "version": "b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e", + "signature": "b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e", + "affectsGlobalScope": true + }, + "../node_modules/typescript/lib/lib.es2017.full.d.ts": { + "version": "d2f31f19e1ba6ed59be9259d660a239d9a3fcbbc8e038c6b2009bde34b175fed", + "signature": "d2f31f19e1ba6ed59be9259d660a239d9a3fcbbc8e038c6b2009bde34b175fed", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/inspector.d.ts": { + "version": "7e49dbf1543b3ee54853ade4c5e9fa460b6a4eca967efe6bf943e0c505d087ed", + "signature": "7e49dbf1543b3ee54853ade4c5e9fa460b6a4eca967efe6bf943e0c505d087ed", + "affectsGlobalScope": false + }, + "../node_modules/@types/node/base.d.ts": { + "version": "39daac3cc4e13d9f1031c4b208c4cd10cb206782a381e71dbaa2353d170b41b4", + "signature": "39daac3cc4e13d9f1031c4b208c4cd10cb206782a381e71dbaa2353d170b41b4", + "affectsGlobalScope": true + }, + "../node_modules/@types/node/ts3.2/index.d.ts": { + "version": "1de0ff6200b92798a5aef43f57029c79dbf69932037dee1c007fdd2c562db258", + "signature": "1de0ff6200b92798a5aef43f57029c79dbf69932037dee1c007fdd2c562db258", + "affectsGlobalScope": false + }, + "../node_modules/@types/range-parser/index.d.ts": { + "version": "4e88b833be14c7f384e0dcd57bb30acd799e8e34d212635d693e41a75a71164b", + "signature": "4e88b833be14c7f384e0dcd57bb30acd799e8e34d212635d693e41a75a71164b", + "affectsGlobalScope": false + }, + "../node_modules/@types/qs/index.d.ts": { + "version": "b9cd23278040e3d4ea73660829a5c0d25cc303e493f79668e605f69edaf6d7b7", + "signature": "b9cd23278040e3d4ea73660829a5c0d25cc303e493f79668e605f69edaf6d7b7", + "affectsGlobalScope": false + }, + "../node_modules/@types/express-serve-static-core/index.d.ts": { + "version": "814f4d16f7e7c47feaba5979673dcc60b6d5f7e87b247ea5da1dbc83a6da9387", + "signature": "814f4d16f7e7c47feaba5979673dcc60b6d5f7e87b247ea5da1dbc83a6da9387", + "affectsGlobalScope": true + }, + "../node_modules/@types/mime/index.d.ts": { + "version": "be27a64e821a3e5af838650e4aa25805c60f057d0c37a9762c378d19d364b3e6", + "signature": "be27a64e821a3e5af838650e4aa25805c60f057d0c37a9762c378d19d364b3e6", + "affectsGlobalScope": false + }, + "../node_modules/@types/serve-static/index.d.ts": { + "version": "5b56da2c458a9522dbfec8ee94287abe037f52fc9dea766d87bd9aaf100cf14f", + "signature": "5b56da2c458a9522dbfec8ee94287abe037f52fc9dea766d87bd9aaf100cf14f", + "affectsGlobalScope": false + }, + "../node_modules/@types/connect/index.d.ts": { + "version": "e6ffa74698f0a1d23e4223242ed7dcdb89d02bbbb063a1930e9f91d0385abe16", + "signature": "e6ffa74698f0a1d23e4223242ed7dcdb89d02bbbb063a1930e9f91d0385abe16", + "affectsGlobalScope": false + }, + "../node_modules/@types/body-parser/index.d.ts": { + "version": "ebddbd167c2fabd0151f50e5df94ca6d845149c47521280d8867afe3429dd078", + "signature": "ebddbd167c2fabd0151f50e5df94ca6d845149c47521280d8867afe3429dd078", + "affectsGlobalScope": false + }, + "../node_modules/@types/express/index.d.ts": { + "version": "ead1ed9dd4874f4907a506a31e4fe9c4e079b42816f6b7ea5016a6d5ddf2fde3", + "signature": "ead1ed9dd4874f4907a506a31e4fe9c4e079b42816f6b7ea5016a6d5ddf2fde3", + "affectsGlobalScope": false + }, + "../node_modules/event-target-shim/index.d.ts": { + "version": "2859adaa4f2db3d4f0fc37ad86f056045341496b58fba0dbc16a222f9d5d55b1", + "signature": "2859adaa4f2db3d4f0fc37ad86f056045341496b58fba0dbc16a222f9d5d55b1", + "affectsGlobalScope": false + }, + "../node_modules/abort-controller/dist/abort-controller.d.ts": { + "version": "655ed305e8f4cb95d3f578040301a4e4d6ace112b1bd8824cd32bda66c3677d1", + "signature": "655ed305e8f4cb95d3f578040301a4e4d6ace112b1bd8824cd32bda66c3677d1", + "affectsGlobalScope": false + }, + "../node_modules/google-auth-library/node_modules/gaxios/build/src/common.d.ts": { + "version": "a955fa0d2d8dbcfcb1296963e49b907a2ac501d02b5a8916108eb238afc19fc6", + "signature": "a955fa0d2d8dbcfcb1296963e49b907a2ac501d02b5a8916108eb238afc19fc6", + "affectsGlobalScope": false + }, + "../node_modules/google-auth-library/node_modules/gaxios/build/src/gaxios.d.ts": { + "version": "dc1a68ad8a9684ad4b452c03aa656d4d63bdde95b4010411e233a5c4326e6f6a", + "signature": "dc1a68ad8a9684ad4b452c03aa656d4d63bdde95b4010411e233a5c4326e6f6a", + "affectsGlobalScope": false + }, + "../node_modules/google-auth-library/node_modules/gaxios/build/src/index.d.ts": { + "version": "cb789da1f75dc9d53848949aed3bb1d521de13c6340e5792a6b3f2c5e0c53e29", + "signature": "cb789da1f75dc9d53848949aed3bb1d521de13c6340e5792a6b3f2c5e0c53e29", + "affectsGlobalScope": false + }, + "../node_modules/google-auth-library/build/src/transporters.d.ts": { + "version": "82b70e72d3e16b95c6f933b0d146240214ef01dfe8e270f6e50f349223b0615d", + "signature": "82b70e72d3e16b95c6f933b0d146240214ef01dfe8e270f6e50f349223b0615d", + "affectsGlobalScope": false + }, + "../node_modules/google-auth-library/build/src/crypto/crypto.d.ts": { + "version": "48426cea1f526c040f5e25b5b46c72dc58e28dbca236ecb2d2f3c23ee2f3147e", + "signature": "48426cea1f526c040f5e25b5b46c72dc58e28dbca236ecb2d2f3c23ee2f3147e", + "affectsGlobalScope": false + }, + "../node_modules/google-auth-library/build/src/auth/credentials.d.ts": { + "version": "683563004226b83f33e4759f7976b180fab13042224e319476669d833f9f1fe0", + "signature": "683563004226b83f33e4759f7976b180fab13042224e319476669d833f9f1fe0", + "affectsGlobalScope": false + }, + "../node_modules/google-auth-library/build/src/auth/authclient.d.ts": { + "version": "ee00a6280d0c2a54ca31bc935a678ec560ec47fdab207382b64290b06995e626", + "signature": "ee00a6280d0c2a54ca31bc935a678ec560ec47fdab207382b64290b06995e626", + "affectsGlobalScope": false + }, + "../node_modules/google-auth-library/build/src/auth/loginticket.d.ts": { + "version": "3da10acc144b58168388267b5bd91d0df6a4ca4a24badfd235d3947576d3f9a9", + "signature": "3da10acc144b58168388267b5bd91d0df6a4ca4a24badfd235d3947576d3f9a9", + "affectsGlobalScope": false + }, + "../node_modules/google-auth-library/build/src/auth/oauth2client.d.ts": { + "version": "1d40605771c09e1b999b87725e20b6fea9a117c4ff6832f41b19838ff2b95008", + "signature": "1d40605771c09e1b999b87725e20b6fea9a117c4ff6832f41b19838ff2b95008", + "affectsGlobalScope": false + }, + "../node_modules/google-auth-library/build/src/auth/computeclient.d.ts": { + "version": "615954e8fe193fb3a2a7b91c9bb46fe18aaf60d2014da08da3c4d9a610c83477", + "signature": "615954e8fe193fb3a2a7b91c9bb46fe18aaf60d2014da08da3c4d9a610c83477", + "affectsGlobalScope": false + }, + "../node_modules/google-auth-library/build/src/auth/idtokenclient.d.ts": { + "version": "01b8fe09ea0b18ceba458308fd349bd2545227995c1b370a6897ea7c8f4ae577", + "signature": "01b8fe09ea0b18ceba458308fd349bd2545227995c1b370a6897ea7c8f4ae577", + "affectsGlobalScope": false + }, + "../node_modules/google-auth-library/build/src/auth/envDetect.d.ts": { + "version": "ea9efc84288c02adb551e56f59235b5b3d613993acb0cbb74f1e1169a6ddaf23", + "signature": "ea9efc84288c02adb551e56f59235b5b3d613993acb0cbb74f1e1169a6ddaf23", + "affectsGlobalScope": false + }, + "../node_modules/google-auth-library/node_modules/gtoken/build/src/index.d.ts": { + "version": "645096a656964fdc919d68a791dc764c85eb9128fb164686a70c4f2d75fe1caa", + "signature": "645096a656964fdc919d68a791dc764c85eb9128fb164686a70c4f2d75fe1caa", + "affectsGlobalScope": false + }, + "../node_modules/google-auth-library/build/src/auth/jwtclient.d.ts": { + "version": "1445ef80723618786694bf663714c7cc1be265647d5b14299029554c9da115e1", + "signature": "1445ef80723618786694bf663714c7cc1be265647d5b14299029554c9da115e1", + "affectsGlobalScope": false + }, + "../node_modules/google-auth-library/build/src/auth/refreshclient.d.ts": { + "version": "e9203259c5f820618a0c10df0e0e28df87f2469770461540919b23d864b0e2f8", + "signature": "e9203259c5f820618a0c10df0e0e28df87f2469770461540919b23d864b0e2f8", + "affectsGlobalScope": false + }, + "../node_modules/google-auth-library/build/src/auth/googleauth.d.ts": { + "version": "d28ae5ca2e567db94cb2a19070820036bda8713fb1403fbb00bb239d2eb336b3", + "signature": "d28ae5ca2e567db94cb2a19070820036bda8713fb1403fbb00bb239d2eb336b3", + "affectsGlobalScope": false + }, + "../node_modules/google-auth-library/build/src/auth/iam.d.ts": { + "version": "925f03e0d23441ea93e30508a0b0c21ccbb06ed6af0fc19eed66729763849158", + "signature": "925f03e0d23441ea93e30508a0b0c21ccbb06ed6af0fc19eed66729763849158", + "affectsGlobalScope": false + }, + "../node_modules/google-auth-library/build/src/auth/jwtaccess.d.ts": { + "version": "bcea68b9bf0547a5b8ce7faf25cbbd7b7d0918e93c748d8e0e337a264440ad0d", + "signature": "bcea68b9bf0547a5b8ce7faf25cbbd7b7d0918e93c748d8e0e337a264440ad0d", + "affectsGlobalScope": false + }, + "../node_modules/google-auth-library/build/src/index.d.ts": { + "version": "b5f5fb8682b627fabd6173249639436577a19d93a36d09599879dd9dc104ac63", + "signature": "b5f5fb8682b627fabd6173249639436577a19d93a36d09599879dd9dc104ac63", + "affectsGlobalScope": false + }, + "../node_modules/teeny-request/build/src/index.d.ts": { + "version": "1ef82373a19bae276d64e230a668816d96562ffdf266bc67e0a91dd30bb20d0f", + "signature": "1ef82373a19bae276d64e230a668816d96562ffdf266bc67e0a91dd30bb20d0f", + "affectsGlobalScope": false + }, + "../node_modules/@google-cloud/common/build/src/util.d.ts": { + "version": "6e2c8ed913b49e9c93cf0aa682e48c97347d3da54d60d81d2b0e11e09da2f953", + "signature": "6e2c8ed913b49e9c93cf0aa682e48c97347d3da54d60d81d2b0e11e09da2f953", + "affectsGlobalScope": false + }, + "../node_modules/@google-cloud/common/build/src/service-object.d.ts": { + "version": "2931f8609009719078a11c85a1069470ff2a74ca01e19f2a46ff08cdecb22c28", + "signature": "2931f8609009719078a11c85a1069470ff2a74ca01e19f2a46ff08cdecb22c28", + "affectsGlobalScope": false + }, + "../node_modules/@google-cloud/common/build/src/operation.d.ts": { + "version": "7b0dad26d8d3ea293d332162f563f1f60c35dd5b0d44850fa330a901e781ca5d", + "signature": "7b0dad26d8d3ea293d332162f563f1f60c35dd5b0d44850fa330a901e781ca5d", + "affectsGlobalScope": false + }, + "../node_modules/@google-cloud/common/build/src/service.d.ts": { + "version": "27d8eb0ae5461fac42501d2fed4ff876414de3182dea7df38f465409b2ccb039", + "signature": "27d8eb0ae5461fac42501d2fed4ff876414de3182dea7df38f465409b2ccb039", + "affectsGlobalScope": false + }, + "../node_modules/@google-cloud/common/build/src/index.d.ts": { + "version": "a673754b47203b9e1d15d95014c847593f00b3e33fb2ace08f76d9c3dca3f9ab", + "signature": "a673754b47203b9e1d15d95014c847593f00b3e33fb2ace08f76d9c3dca3f9ab", + "affectsGlobalScope": false + }, + "../node_modules/@google-cloud/storage/build/src/acl.d.ts": { + "version": "4a16f63eab2003bf18f93d7c39c2cc582c75ebed56e64d382c427e22bcec509a", + "signature": "4a16f63eab2003bf18f93d7c39c2cc582c75ebed56e64d382c427e22bcec509a", + "affectsGlobalScope": false + }, + "../node_modules/@google-cloud/storage/build/src/signer.d.ts": { + "version": "22977aa28fc8f6c082d2065d6d8b7fa4dcd416f8ae4dff6ed99ec5e1555fe298", + "signature": "22977aa28fc8f6c082d2065d6d8b7fa4dcd416f8ae4dff6ed99ec5e1555fe298", + "affectsGlobalScope": false + }, + "../node_modules/@google-cloud/storage/build/src/file.d.ts": { + "version": "38878788e3023527bd860f1300650e246274cd214ad09eb689bc561fd7831719", + "signature": "38878788e3023527bd860f1300650e246274cd214ad09eb689bc561fd7831719", + "affectsGlobalScope": false + }, + "../node_modules/@google-cloud/storage/build/src/hmacKey.d.ts": { + "version": "bd7f97a3fb993367447f8fbd7dedf0d9b4269a778404fef0ac5f398313b221a2", + "signature": "bd7f97a3fb993367447f8fbd7dedf0d9b4269a778404fef0ac5f398313b221a2", + "affectsGlobalScope": false + }, + "../node_modules/@google-cloud/storage/build/src/storage.d.ts": { + "version": "07098b194f4ad45856fc01df2f3d7ce2f68956ed86e6299254b204eabcf5bac8", + "signature": "07098b194f4ad45856fc01df2f3d7ce2f68956ed86e6299254b204eabcf5bac8", + "affectsGlobalScope": false + }, + "../node_modules/@google-cloud/storage/build/src/channel.d.ts": { + "version": "88e327017e5db7730f40e993f75fe947a8f4fdbf344d6176dba1a85490c824e4", + "signature": "88e327017e5db7730f40e993f75fe947a8f4fdbf344d6176dba1a85490c824e4", + "affectsGlobalScope": false + }, + "../node_modules/@google-cloud/storage/build/src/iam.d.ts": { + "version": "15981245ba7b6481bfab67ef18725554e5031da8d90f5153bfadce62aeedbb9e", + "signature": "15981245ba7b6481bfab67ef18725554e5031da8d90f5153bfadce62aeedbb9e", + "affectsGlobalScope": false + }, + "../node_modules/@google-cloud/storage/build/src/notification.d.ts": { + "version": "d3ff34f8218bcadd383b56f85f6ddf27f54f49abaf17ac05e58a04ff49bdcab7", + "signature": "d3ff34f8218bcadd383b56f85f6ddf27f54f49abaf17ac05e58a04ff49bdcab7", + "affectsGlobalScope": false + }, + "../node_modules/@google-cloud/storage/build/src/bucket.d.ts": { + "version": "8662bdd582ba440517d194716cd779b615f661b9b6f939cc91381363334fb6bd", + "signature": "8662bdd582ba440517d194716cd779b615f661b9b6f939cc91381363334fb6bd", + "affectsGlobalScope": false + }, + "../node_modules/@google-cloud/storage/build/src/index.d.ts": { + "version": "053ea839b135a17a15ad95c3635ab23fc1e12681082a86b91684df20c6e379df", + "signature": "053ea839b135a17a15ad95c3635ab23fc1e12681082a86b91684df20c6e379df", + "affectsGlobalScope": false + }, + "../node_modules/@google-cloud/firestore/types/firestore.d.ts": { + "version": "b6bc9b6873b882ac3fa59e9c46dba66075296a6ff252727ae4bfefddc98e76be", + "signature": "b6bc9b6873b882ac3fa59e9c46dba66075296a6ff252727ae4bfefddc98e76be", + "affectsGlobalScope": true + }, + "../node_modules/firebase-admin/lib/auth.d.ts": { + "version": "1163f9a573b30c6e62fd41a109f344e593c66fcd8c69769d6d9ee898037832d9", + "signature": "1163f9a573b30c6e62fd41a109f344e593c66fcd8c69769d6d9ee898037832d9", + "affectsGlobalScope": false + }, + "../node_modules/firebase-admin/lib/database.d.ts": { + "version": "45cc8779dc91edaa36e3873161b1bcf1147958bfda913e074a5e70524491dc14", + "signature": "45cc8779dc91edaa36e3873161b1bcf1147958bfda913e074a5e70524491dc14", + "affectsGlobalScope": false + }, + "../node_modules/firebase-admin/lib/messaging.d.ts": { + "version": "ff745567658097cfa143772fcc9b6c3f8b9c518260b38032da7ab8bc67de3f30", + "signature": "ff745567658097cfa143772fcc9b6c3f8b9c518260b38032da7ab8bc67de3f30", + "affectsGlobalScope": false + }, + "../node_modules/firebase-admin/lib/instance-id.d.ts": { + "version": "6ff4a3e66bf27360dfa01bbc4dca36531583afdec9a0d0fd3f4cf687f4d9895f", + "signature": "6ff4a3e66bf27360dfa01bbc4dca36531583afdec9a0d0fd3f4cf687f4d9895f", + "affectsGlobalScope": false + }, + "../node_modules/firebase-admin/lib/project-management.d.ts": { + "version": "48b9fdc7e89a788bb45fb37e59c7794051e5a16746a2ab237467c4b3df6f8593", + "signature": "48b9fdc7e89a788bb45fb37e59c7794051e5a16746a2ab237467c4b3df6f8593", + "affectsGlobalScope": false + }, + "../node_modules/firebase-admin/lib/security-rules.d.ts": { + "version": "1d457000b22888ba93c4e891df2b37470d2e15f0d6822fb504066560c23e4b3d", + "signature": "1d457000b22888ba93c4e891df2b37470d2e15f0d6822fb504066560c23e4b3d", + "affectsGlobalScope": false + }, + "../node_modules/firebase-admin/lib/index.d.ts": { + "version": "3779efe6a208b757ad4f02a20b39ed5d3a9181fd90d2fda8c479973ffd5f416d", + "signature": "3779efe6a208b757ad4f02a20b39ed5d3a9181fd90d2fda8c479973ffd5f416d", + "affectsGlobalScope": false + }, + "../src/interfaces/projectProperties.ts": { + "version": "44177f7d98a63cd427e07d250c3d7116ee321716c62362096a8ae8340e34aacf", + "signature": "18a43c234d04ffd95f36e9f5d95b020c80ec051d059cfc4678ae61bfa3addc5f", + "affectsGlobalScope": false + }, + "../src/newsriver.ts": { + "version": "a44bef4b3ef7750ed7d4abe5b7a1ce561b2cc04ac9a97f123e70464771ab0212", + "signature": "e6adb74b0adbeef9ea1da6803d1b5c3af7b9e961971eeb5ce8cf598d8b33c093", + "affectsGlobalScope": false + }, + "../node_modules/firebase-functions-helper/dist/firebase.d.ts": { + "version": "0c6f77926881e6b5444b3577c6d498a450721eaaf84c188b1e1fded3c2c4c415", + "signature": "0c6f77926881e6b5444b3577c6d498a450721eaaf84c188b1e1fded3c2c4c415", + "affectsGlobalScope": false + }, + "../node_modules/firebase-functions-helper/dist/firestore.d.ts": { + "version": "8d87f83b36fb5f55726dcfbb171b0faf85701323bb937ed1853c91298daf6897", + "signature": "8d87f83b36fb5f55726dcfbb171b0faf85701323bb937ed1853c91298daf6897", + "affectsGlobalScope": false + }, + "../node_modules/firebase-functions-helper/dist/realtime.d.ts": { + "version": "e2ade4e2e060488c0dda507dd28e718bcfd748f7f6dfa864e8c8b6d509d8d6bb", + "signature": "e2ade4e2e060488c0dda507dd28e718bcfd748f7f6dfa864e8c8b6d509d8d6bb", + "affectsGlobalScope": false + }, + "../node_modules/firebase-functions-helper/dist/index.d.ts": { + "version": "4f64b8107769278a6dada173dadb40afc975024b5551c3419f208677830a99c0", + "signature": "4f64b8107769278a6dada173dadb40afc975024b5551c3419f208677830a99c0", + "affectsGlobalScope": false + }, + "../src/updater.ts": { + "version": "a95ed0ec52eb5fd158644846bdf7c4b5b97957c394e6d98d8d9d07df2c2c2669", + "signature": "468e09e13fd92c765047426e852c73d7064f2f2968097cc1a379fa52293bd1d4", + "affectsGlobalScope": false + }, + "../node_modules/firebase-functions/lib/function-configuration.d.ts": { + "version": "0853b3b64117e2f64f7489e4484c0fd87767f26e68f0cebeb766feb2d2ae0e49", + "signature": "0853b3b64117e2f64f7489e4484c0fd87767f26e68f0cebeb766feb2d2ae0e49", + "affectsGlobalScope": false + }, + "../node_modules/firebase-functions/lib/cloud-functions.d.ts": { + "version": "2b19546f07ff0901dc3acbe2230de54bff0816bc1182722d3584abbc2d31d825", + "signature": "2b19546f07ff0901dc3acbe2230de54bff0816bc1182722d3584abbc2d31d825", + "affectsGlobalScope": false + }, + "../node_modules/firebase-functions/lib/providers/analytics.d.ts": { + "version": "230f2776b970caf8e470648d09f4bf01d6cf1612d6aadef4d4783343a8b5c7b7", + "signature": "230f2776b970caf8e470648d09f4bf01d6cf1612d6aadef4d4783343a8b5c7b7", + "affectsGlobalScope": false + }, + "../node_modules/firebase-functions/lib/providers/auth.d.ts": { + "version": "8a5cec8e62bd0dcb6e933c76743d57fd5b712663b8fd28c2c21c098e8fe027a4", + "signature": "8a5cec8e62bd0dcb6e933c76743d57fd5b712663b8fd28c2c21c098e8fe027a4", + "affectsGlobalScope": false + }, + "../node_modules/firebase-functions/lib/providers/crashlytics.d.ts": { + "version": "3bdc88b3cd30892523ee658bbde13bc59b6171e4e61095b417be0c6cfa823b6b", + "signature": "3bdc88b3cd30892523ee658bbde13bc59b6171e4e61095b417be0c6cfa823b6b", + "affectsGlobalScope": false + }, + "../node_modules/firebase-functions/lib/apps.d.ts": { + "version": "074ac0dea7b1b926227b2b990a9b38c8a2b36b5b0fb16591fc2c28234e35829e", + "signature": "074ac0dea7b1b926227b2b990a9b38c8a2b36b5b0fb16591fc2c28234e35829e", + "affectsGlobalScope": false + }, + "../node_modules/firebase-functions/lib/providers/database.d.ts": { + "version": "342a94a0c459dac647aac37217a8f3d3276086e5fda5ebc970ef05c4f8d7d76d", + "signature": "342a94a0c459dac647aac37217a8f3d3276086e5fda5ebc970ef05c4f8d7d76d", + "affectsGlobalScope": false + }, + "../node_modules/firebase-functions/lib/providers/firestore.d.ts": { + "version": "7b96e9c9c8e0f799ddbb18968c0f71ba687261f4cac3fe9fc4df03838564aa5d", + "signature": "7b96e9c9c8e0f799ddbb18968c0f71ba687261f4cac3fe9fc4df03838564aa5d", + "affectsGlobalScope": false + }, + "../node_modules/firebase-functions/lib/providers/https.d.ts": { + "version": "ba2a150318f33e7d446842c0af63e548dfa3c8b90cfb378cdf08936523a438e6", + "signature": "ba2a150318f33e7d446842c0af63e548dfa3c8b90cfb378cdf08936523a438e6", + "affectsGlobalScope": false + }, + "../node_modules/firebase-functions/lib/providers/pubsub.d.ts": { + "version": "35663f87496f91f80e16eb8a35a7c7c8e8ee0c6d321c93b4b48648911e225228", + "signature": "35663f87496f91f80e16eb8a35a7c7c8e8ee0c6d321c93b4b48648911e225228", + "affectsGlobalScope": false + }, + "../node_modules/firebase-functions/lib/providers/remoteConfig.d.ts": { + "version": "c4c0261b12524279056993ee8223189a7025f85f29d51317d417623b0fa5c090", + "signature": "c4c0261b12524279056993ee8223189a7025f85f29d51317d417623b0fa5c090", + "affectsGlobalScope": false + }, + "../node_modules/firebase-functions/lib/providers/storage.d.ts": { + "version": "496d7fa3b5a354fbe298366e17ce6bc0ecec576df7fafb63bf12f22fc47d935b", + "signature": "496d7fa3b5a354fbe298366e17ce6bc0ecec576df7fafb63bf12f22fc47d935b", + "affectsGlobalScope": false + }, + "../node_modules/firebase-functions/lib/providers/testLab.d.ts": { + "version": "471805944a5f2b948be9b514ab4f1206bfdf285cf07ea9749820146750ffbfe1", + "signature": "471805944a5f2b948be9b514ab4f1206bfdf285cf07ea9749820146750ffbfe1", + "affectsGlobalScope": false + }, + "../node_modules/firebase-functions/lib/handler-builder.d.ts": { + "version": "720b6958371bbb4683ec48709096e489c51f926e54e884f0c214c66df50e41c6", + "signature": "720b6958371bbb4683ec48709096e489c51f926e54e884f0c214c66df50e41c6", + "affectsGlobalScope": false + }, + "../node_modules/firebase-functions/lib/config.d.ts": { + "version": "e6f78f98b64c3340ad0d49a455132fbc9c50954dd49de5651824962e458d33ed", + "signature": "e6f78f98b64c3340ad0d49a455132fbc9c50954dd49de5651824962e458d33ed", + "affectsGlobalScope": false + }, + "../node_modules/firebase-functions/lib/function-builder.d.ts": { + "version": "82f234207c0d3bc2ff82655f1dc3f4ef13d703c2262d32e4bc80461545923467", + "signature": "82f234207c0d3bc2ff82655f1dc3f4ef13d703c2262d32e4bc80461545923467", + "affectsGlobalScope": false + }, + "../node_modules/firebase-functions/lib/index.d.ts": { + "version": "194b7011603bac1a064e579d5e392a630244b8a64c4853ec30d987997e77a546", + "signature": "194b7011603bac1a064e579d5e392a630244b8a64c4853ec30d987997e77a546", + "affectsGlobalScope": false + }, + "../src/rcdata.ts": { + "version": "bc02021ac0d0562d06c998d41192c133db6258baf68b1eb58f3fdf62a9931a40", + "signature": "9edfbbdc51de383c169c179f775a6f24a8c78c85e57516104f008cec0d1b58e2", + "affectsGlobalScope": false + }, + "../src/models/api.ts": { + "version": "b1820d723a6942e1948ca962f917f78113bfd35e71ab878197ff1dccc4eed78e", + "signature": "968f2998b91af36726206957073a7bbbce81e7503bda7f9b8f0eba947a9cf478", + "affectsGlobalScope": false + }, + "../src/controllers/api.ts": { + "version": "913c7d7b91c0f6a66a0c726cae7ec14d0c394c57afbad098bc76682a71fdabcb", + "signature": "6a7d540939495f5f26982f1978c294c6cb8e8353e3d35b2264f9a9e7dbf51686", + "affectsGlobalScope": false + }, + "../src/routes/api.ts": { + "version": "f926d468e745b7e38a732aa5bcb944f6859ef9db1365630b5381d73068ce7512", + "signature": "df1a2e3e5f95ee7e85d28a0c12bc6a5cc3cef558deb67e90a523199f9f31703b", + "affectsGlobalScope": false + }, + "../src/app.ts": { + "version": "b009d96946058a532521e9c3420f41d5d31160ba0e5f939f76b2a9b17a8b8695", + "signature": "5ab0082578d32976c6616ce01e0b4d85859b6f6749be207b2548bb5516623999", + "affectsGlobalScope": false + }, + "../src/bin/www.ts": { + "version": "43eebc266d8211231172799d79011556a2023f03a2b43ac1f93fbae1f3b9837a", + "signature": "8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881", + "affectsGlobalScope": false + }, + "../node_modules/@types/fs-extra/index.d.ts": { + "version": "5171627120eeb3a7e8afb8ed04ea9be7f0b53ba09bb1fc95172483e0fbb0740c", + "signature": "5171627120eeb3a7e8afb8ed04ea9be7f0b53ba09bb1fc95172483e0fbb0740c", + "affectsGlobalScope": false + }, + "../node_modules/@types/lodash/ts3.1/common/common.d.ts": { + "version": "4025cf62742c5bb3d383c8a62342481622c87e3397ea5e7b7baab18b9efd5798", + "signature": "4025cf62742c5bb3d383c8a62342481622c87e3397ea5e7b7baab18b9efd5798", + "affectsGlobalScope": false + }, + "../node_modules/@types/lodash/ts3.1/common/array.d.ts": { + "version": "f6a75f23e42dc475bdd7fefa8c527a3c5ed502ad371900abe9d138a9010ad80a", + "signature": "f6a75f23e42dc475bdd7fefa8c527a3c5ed502ad371900abe9d138a9010ad80a", + "affectsGlobalScope": false + }, + "../node_modules/@types/lodash/ts3.1/common/collection.d.ts": { + "version": "0c75b204aed9cf6ff1c7b4bed87a3ece0d9d6fc857a6350c0c95ed0c38c814e8", + "signature": "0c75b204aed9cf6ff1c7b4bed87a3ece0d9d6fc857a6350c0c95ed0c38c814e8", + "affectsGlobalScope": false + }, + "../node_modules/@types/lodash/ts3.1/common/date.d.ts": { + "version": "187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42", + "signature": "187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42", + "affectsGlobalScope": false + }, + "../node_modules/@types/lodash/ts3.1/common/function.d.ts": { + "version": "035b95793288bf4457a2b80bfe9b7500a29324ad62adcf9991277198e8833096", + "signature": "035b95793288bf4457a2b80bfe9b7500a29324ad62adcf9991277198e8833096", + "affectsGlobalScope": false + }, + "../node_modules/@types/lodash/ts3.1/common/lang.d.ts": { + "version": "c2d47e5668f89ed8768d306919c42bb88d50d4029d68f58343141360895cfcc0", + "signature": "c2d47e5668f89ed8768d306919c42bb88d50d4029d68f58343141360895cfcc0", + "affectsGlobalScope": false + }, + "../node_modules/@types/lodash/ts3.1/common/math.d.ts": { + "version": "65648639567d214f62c1b21d200c852807e68bdb08311f95ab6f526ef5b98995", + "signature": "65648639567d214f62c1b21d200c852807e68bdb08311f95ab6f526ef5b98995", + "affectsGlobalScope": false + }, + "../node_modules/@types/lodash/ts3.1/common/number.d.ts": { + "version": "00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a", + "signature": "00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a", + "affectsGlobalScope": false + }, + "../node_modules/@types/lodash/ts3.1/common/object.d.ts": { + "version": "7fc5a3d7cff296cea5c225911726a56283b663328709088fcc912d61f73682fc", + "signature": "7fc5a3d7cff296cea5c225911726a56283b663328709088fcc912d61f73682fc", + "affectsGlobalScope": false + }, + "../node_modules/@types/lodash/ts3.1/common/seq.d.ts": { + "version": "3c92b6dfd43cc1c2485d9eba5ff0b74a19bb8725b692773ef1d66dac48cda4bd", + "signature": "3c92b6dfd43cc1c2485d9eba5ff0b74a19bb8725b692773ef1d66dac48cda4bd", + "affectsGlobalScope": false + }, + "../node_modules/@types/lodash/ts3.1/common/string.d.ts": { + "version": "e34f3f6159b1e23de9bb5521382795aaa5aaed6f53b4702e70a2ec45bc76ddb5", + "signature": "e34f3f6159b1e23de9bb5521382795aaa5aaed6f53b4702e70a2ec45bc76ddb5", + "affectsGlobalScope": false + }, + "../node_modules/@types/lodash/ts3.1/common/util.d.ts": { + "version": "2630a7cbb597e85d713b7ef47f2946d4280d3d4c02733282770741d40672b1a5", + "signature": "2630a7cbb597e85d713b7ef47f2946d4280d3d4c02733282770741d40672b1a5", + "affectsGlobalScope": false + }, + "../node_modules/@types/lodash/ts3.1/index.d.ts": { + "version": "bbf144d4354e2aaa6439f32761f3ee798cc68d1600adab6e2a596f25269f106d", + "signature": "bbf144d4354e2aaa6439f32761f3ee798cc68d1600adab6e2a596f25269f106d", + "affectsGlobalScope": true + }, + "../node_modules/@types/long/index.d.ts": { + "version": "e8465811693dfe4e96ef2b3dffda539d6edfe896961b7af37b44db2c0e48532b", + "signature": "e8465811693dfe4e96ef2b3dffda539d6edfe896961b7af37b44db2c0e48532b", + "affectsGlobalScope": false + } + }, + "options": { + "module": 1, + "noImplicitReturns": true, + "noUnusedLocals": true, + "outDir": "./", + "sourceMap": true, + "strict": false, + "target": 4, + "incremental": true, + "configFilePath": "../tsconfig.json" + }, + "referencedMap": { + "../node_modules/@google-cloud/common/build/src/index.d.ts": [ + "../node_modules/@google-cloud/common/build/src/operation.d.ts", + "../node_modules/@google-cloud/common/build/src/service-object.d.ts", + "../node_modules/@google-cloud/common/build/src/service.d.ts", + "../node_modules/@google-cloud/common/build/src/util.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/google-auth-library/build/src/index.d.ts" + ], + "../node_modules/@google-cloud/common/build/src/operation.d.ts": [ + "../node_modules/@google-cloud/common/build/src/service-object.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@google-cloud/common/build/src/service-object.d.ts": [ + "../node_modules/@google-cloud/common/build/src/util.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/teeny-request/build/src/index.d.ts" + ], + "../node_modules/@google-cloud/common/build/src/service.d.ts": [ + "../node_modules/@google-cloud/common/build/src/service-object.d.ts", + "../node_modules/@google-cloud/common/build/src/util.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/google-auth-library/build/src/index.d.ts", + "../node_modules/teeny-request/build/src/index.d.ts" + ], + "../node_modules/@google-cloud/common/build/src/util.d.ts": [ + "../node_modules/@google-cloud/common/build/src/service-object.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/google-auth-library/build/src/index.d.ts", + "../node_modules/teeny-request/build/src/index.d.ts" + ], + "../node_modules/@google-cloud/firestore/types/firestore.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@google-cloud/storage/build/src/acl.d.ts": [ + "../node_modules/@google-cloud/common/build/src/index.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@google-cloud/storage/build/src/bucket.d.ts": [ + "../node_modules/@google-cloud/common/build/src/index.d.ts", + "../node_modules/@google-cloud/storage/build/src/acl.d.ts", + "../node_modules/@google-cloud/storage/build/src/channel.d.ts", + "../node_modules/@google-cloud/storage/build/src/file.d.ts", + "../node_modules/@google-cloud/storage/build/src/iam.d.ts", + "../node_modules/@google-cloud/storage/build/src/notification.d.ts", + "../node_modules/@google-cloud/storage/build/src/signer.d.ts", + "../node_modules/@google-cloud/storage/build/src/storage.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@google-cloud/storage/build/src/channel.d.ts": [ + "../node_modules/@google-cloud/common/build/src/index.d.ts", + "../node_modules/@google-cloud/storage/build/src/storage.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@google-cloud/storage/build/src/file.d.ts": [ + "../node_modules/@google-cloud/common/build/src/index.d.ts", + "../node_modules/@google-cloud/common/build/src/util.d.ts", + "../node_modules/@google-cloud/storage/build/src/acl.d.ts", + "../node_modules/@google-cloud/storage/build/src/bucket.d.ts", + "../node_modules/@google-cloud/storage/build/src/signer.d.ts", + "../node_modules/@google-cloud/storage/build/src/storage.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@google-cloud/storage/build/src/hmacKey.d.ts": [ + "../node_modules/@google-cloud/common/build/src/index.d.ts", + "../node_modules/@google-cloud/storage/build/src/storage.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@google-cloud/storage/build/src/iam.d.ts": [ + "../node_modules/@google-cloud/common/build/src/index.d.ts", + "../node_modules/@google-cloud/storage/build/src/bucket.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@google-cloud/storage/build/src/index.d.ts": [ + "../node_modules/@google-cloud/storage/build/src/acl.d.ts", + "../node_modules/@google-cloud/storage/build/src/bucket.d.ts", + "../node_modules/@google-cloud/storage/build/src/channel.d.ts", + "../node_modules/@google-cloud/storage/build/src/file.d.ts", + "../node_modules/@google-cloud/storage/build/src/hmacKey.d.ts", + "../node_modules/@google-cloud/storage/build/src/iam.d.ts", + "../node_modules/@google-cloud/storage/build/src/notification.d.ts", + "../node_modules/@google-cloud/storage/build/src/signer.d.ts", + "../node_modules/@google-cloud/storage/build/src/storage.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@google-cloud/storage/build/src/notification.d.ts": [ + "../node_modules/@google-cloud/common/build/src/index.d.ts", + "../node_modules/@google-cloud/common/build/src/util.d.ts", + "../node_modules/@google-cloud/storage/build/src/bucket.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@google-cloud/storage/build/src/signer.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@google-cloud/storage/build/src/storage.d.ts": [ + "../node_modules/@google-cloud/common/build/src/index.d.ts", + "../node_modules/@google-cloud/storage/build/src/bucket.d.ts", + "../node_modules/@google-cloud/storage/build/src/channel.d.ts", + "../node_modules/@google-cloud/storage/build/src/file.d.ts", + "../node_modules/@google-cloud/storage/build/src/hmacKey.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@types/body-parser/index.d.ts": [ + "../node_modules/@types/connect/index.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@types/connect/index.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@types/express-serve-static-core/index.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/@types/qs/index.d.ts", + "../node_modules/@types/range-parser/index.d.ts" + ], + "../node_modules/@types/express/index.d.ts": [ + "../node_modules/@types/body-parser/index.d.ts", + "../node_modules/@types/express-serve-static-core/index.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/@types/qs/index.d.ts", + "../node_modules/@types/serve-static/index.d.ts" + ], + "../node_modules/@types/fs-extra/index.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@types/lodash/ts3.1/common/array.d.ts": [ + "../node_modules/@types/lodash/ts3.1/common/collection.d.ts", + "../node_modules/@types/lodash/ts3.1/common/common.d.ts", + "../node_modules/@types/lodash/ts3.1/common/date.d.ts", + "../node_modules/@types/lodash/ts3.1/common/function.d.ts", + "../node_modules/@types/lodash/ts3.1/common/lang.d.ts", + "../node_modules/@types/lodash/ts3.1/common/math.d.ts", + "../node_modules/@types/lodash/ts3.1/common/number.d.ts", + "../node_modules/@types/lodash/ts3.1/common/object.d.ts", + "../node_modules/@types/lodash/ts3.1/common/seq.d.ts", + "../node_modules/@types/lodash/ts3.1/common/string.d.ts", + "../node_modules/@types/lodash/ts3.1/common/util.d.ts", + "../node_modules/@types/lodash/ts3.1/index.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@types/lodash/ts3.1/common/collection.d.ts": [ + "../node_modules/@types/lodash/ts3.1/common/array.d.ts", + "../node_modules/@types/lodash/ts3.1/common/common.d.ts", + "../node_modules/@types/lodash/ts3.1/common/date.d.ts", + "../node_modules/@types/lodash/ts3.1/common/function.d.ts", + "../node_modules/@types/lodash/ts3.1/common/lang.d.ts", + "../node_modules/@types/lodash/ts3.1/common/math.d.ts", + "../node_modules/@types/lodash/ts3.1/common/number.d.ts", + "../node_modules/@types/lodash/ts3.1/common/object.d.ts", + "../node_modules/@types/lodash/ts3.1/common/seq.d.ts", + "../node_modules/@types/lodash/ts3.1/common/string.d.ts", + "../node_modules/@types/lodash/ts3.1/common/util.d.ts", + "../node_modules/@types/lodash/ts3.1/index.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@types/lodash/ts3.1/common/common.d.ts": [ + "../node_modules/@types/lodash/ts3.1/common/array.d.ts", + "../node_modules/@types/lodash/ts3.1/common/collection.d.ts", + "../node_modules/@types/lodash/ts3.1/common/date.d.ts", + "../node_modules/@types/lodash/ts3.1/common/function.d.ts", + "../node_modules/@types/lodash/ts3.1/common/lang.d.ts", + "../node_modules/@types/lodash/ts3.1/common/math.d.ts", + "../node_modules/@types/lodash/ts3.1/common/number.d.ts", + "../node_modules/@types/lodash/ts3.1/common/object.d.ts", + "../node_modules/@types/lodash/ts3.1/common/seq.d.ts", + "../node_modules/@types/lodash/ts3.1/common/string.d.ts", + "../node_modules/@types/lodash/ts3.1/common/util.d.ts", + "../node_modules/@types/lodash/ts3.1/index.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@types/lodash/ts3.1/common/date.d.ts": [ + "../node_modules/@types/lodash/ts3.1/common/array.d.ts", + "../node_modules/@types/lodash/ts3.1/common/collection.d.ts", + "../node_modules/@types/lodash/ts3.1/common/common.d.ts", + "../node_modules/@types/lodash/ts3.1/common/function.d.ts", + "../node_modules/@types/lodash/ts3.1/common/lang.d.ts", + "../node_modules/@types/lodash/ts3.1/common/math.d.ts", + "../node_modules/@types/lodash/ts3.1/common/number.d.ts", + "../node_modules/@types/lodash/ts3.1/common/object.d.ts", + "../node_modules/@types/lodash/ts3.1/common/seq.d.ts", + "../node_modules/@types/lodash/ts3.1/common/string.d.ts", + "../node_modules/@types/lodash/ts3.1/common/util.d.ts", + "../node_modules/@types/lodash/ts3.1/index.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@types/lodash/ts3.1/common/function.d.ts": [ + "../node_modules/@types/lodash/ts3.1/common/array.d.ts", + "../node_modules/@types/lodash/ts3.1/common/collection.d.ts", + "../node_modules/@types/lodash/ts3.1/common/common.d.ts", + "../node_modules/@types/lodash/ts3.1/common/date.d.ts", + "../node_modules/@types/lodash/ts3.1/common/lang.d.ts", + "../node_modules/@types/lodash/ts3.1/common/math.d.ts", + "../node_modules/@types/lodash/ts3.1/common/number.d.ts", + "../node_modules/@types/lodash/ts3.1/common/object.d.ts", + "../node_modules/@types/lodash/ts3.1/common/seq.d.ts", + "../node_modules/@types/lodash/ts3.1/common/string.d.ts", + "../node_modules/@types/lodash/ts3.1/common/util.d.ts", + "../node_modules/@types/lodash/ts3.1/index.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@types/lodash/ts3.1/common/lang.d.ts": [ + "../node_modules/@types/lodash/ts3.1/common/array.d.ts", + "../node_modules/@types/lodash/ts3.1/common/collection.d.ts", + "../node_modules/@types/lodash/ts3.1/common/common.d.ts", + "../node_modules/@types/lodash/ts3.1/common/date.d.ts", + "../node_modules/@types/lodash/ts3.1/common/function.d.ts", + "../node_modules/@types/lodash/ts3.1/common/math.d.ts", + "../node_modules/@types/lodash/ts3.1/common/number.d.ts", + "../node_modules/@types/lodash/ts3.1/common/object.d.ts", + "../node_modules/@types/lodash/ts3.1/common/seq.d.ts", + "../node_modules/@types/lodash/ts3.1/common/string.d.ts", + "../node_modules/@types/lodash/ts3.1/common/util.d.ts", + "../node_modules/@types/lodash/ts3.1/index.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@types/lodash/ts3.1/common/math.d.ts": [ + "../node_modules/@types/lodash/ts3.1/common/array.d.ts", + "../node_modules/@types/lodash/ts3.1/common/collection.d.ts", + "../node_modules/@types/lodash/ts3.1/common/common.d.ts", + "../node_modules/@types/lodash/ts3.1/common/date.d.ts", + "../node_modules/@types/lodash/ts3.1/common/function.d.ts", + "../node_modules/@types/lodash/ts3.1/common/lang.d.ts", + "../node_modules/@types/lodash/ts3.1/common/number.d.ts", + "../node_modules/@types/lodash/ts3.1/common/object.d.ts", + "../node_modules/@types/lodash/ts3.1/common/seq.d.ts", + "../node_modules/@types/lodash/ts3.1/common/string.d.ts", + "../node_modules/@types/lodash/ts3.1/common/util.d.ts", + "../node_modules/@types/lodash/ts3.1/index.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@types/lodash/ts3.1/common/number.d.ts": [ + "../node_modules/@types/lodash/ts3.1/common/array.d.ts", + "../node_modules/@types/lodash/ts3.1/common/collection.d.ts", + "../node_modules/@types/lodash/ts3.1/common/common.d.ts", + "../node_modules/@types/lodash/ts3.1/common/date.d.ts", + "../node_modules/@types/lodash/ts3.1/common/function.d.ts", + "../node_modules/@types/lodash/ts3.1/common/lang.d.ts", + "../node_modules/@types/lodash/ts3.1/common/math.d.ts", + "../node_modules/@types/lodash/ts3.1/common/object.d.ts", + "../node_modules/@types/lodash/ts3.1/common/seq.d.ts", + "../node_modules/@types/lodash/ts3.1/common/string.d.ts", + "../node_modules/@types/lodash/ts3.1/common/util.d.ts", + "../node_modules/@types/lodash/ts3.1/index.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@types/lodash/ts3.1/common/object.d.ts": [ + "../node_modules/@types/lodash/ts3.1/common/array.d.ts", + "../node_modules/@types/lodash/ts3.1/common/collection.d.ts", + "../node_modules/@types/lodash/ts3.1/common/common.d.ts", + "../node_modules/@types/lodash/ts3.1/common/date.d.ts", + "../node_modules/@types/lodash/ts3.1/common/function.d.ts", + "../node_modules/@types/lodash/ts3.1/common/lang.d.ts", + "../node_modules/@types/lodash/ts3.1/common/math.d.ts", + "../node_modules/@types/lodash/ts3.1/common/number.d.ts", + "../node_modules/@types/lodash/ts3.1/common/seq.d.ts", + "../node_modules/@types/lodash/ts3.1/common/string.d.ts", + "../node_modules/@types/lodash/ts3.1/common/util.d.ts", + "../node_modules/@types/lodash/ts3.1/index.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@types/lodash/ts3.1/common/seq.d.ts": [ + "../node_modules/@types/lodash/ts3.1/common/array.d.ts", + "../node_modules/@types/lodash/ts3.1/common/collection.d.ts", + "../node_modules/@types/lodash/ts3.1/common/common.d.ts", + "../node_modules/@types/lodash/ts3.1/common/date.d.ts", + "../node_modules/@types/lodash/ts3.1/common/function.d.ts", + "../node_modules/@types/lodash/ts3.1/common/lang.d.ts", + "../node_modules/@types/lodash/ts3.1/common/math.d.ts", + "../node_modules/@types/lodash/ts3.1/common/number.d.ts", + "../node_modules/@types/lodash/ts3.1/common/object.d.ts", + "../node_modules/@types/lodash/ts3.1/common/string.d.ts", + "../node_modules/@types/lodash/ts3.1/common/util.d.ts", + "../node_modules/@types/lodash/ts3.1/index.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@types/lodash/ts3.1/common/string.d.ts": [ + "../node_modules/@types/lodash/ts3.1/common/array.d.ts", + "../node_modules/@types/lodash/ts3.1/common/collection.d.ts", + "../node_modules/@types/lodash/ts3.1/common/common.d.ts", + "../node_modules/@types/lodash/ts3.1/common/date.d.ts", + "../node_modules/@types/lodash/ts3.1/common/function.d.ts", + "../node_modules/@types/lodash/ts3.1/common/lang.d.ts", + "../node_modules/@types/lodash/ts3.1/common/math.d.ts", + "../node_modules/@types/lodash/ts3.1/common/number.d.ts", + "../node_modules/@types/lodash/ts3.1/common/object.d.ts", + "../node_modules/@types/lodash/ts3.1/common/seq.d.ts", + "../node_modules/@types/lodash/ts3.1/common/util.d.ts", + "../node_modules/@types/lodash/ts3.1/index.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@types/lodash/ts3.1/common/util.d.ts": [ + "../node_modules/@types/lodash/ts3.1/common/array.d.ts", + "../node_modules/@types/lodash/ts3.1/common/collection.d.ts", + "../node_modules/@types/lodash/ts3.1/common/common.d.ts", + "../node_modules/@types/lodash/ts3.1/common/date.d.ts", + "../node_modules/@types/lodash/ts3.1/common/function.d.ts", + "../node_modules/@types/lodash/ts3.1/common/lang.d.ts", + "../node_modules/@types/lodash/ts3.1/common/math.d.ts", + "../node_modules/@types/lodash/ts3.1/common/number.d.ts", + "../node_modules/@types/lodash/ts3.1/common/object.d.ts", + "../node_modules/@types/lodash/ts3.1/common/seq.d.ts", + "../node_modules/@types/lodash/ts3.1/common/string.d.ts", + "../node_modules/@types/lodash/ts3.1/index.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@types/lodash/ts3.1/index.d.ts": [ + "../node_modules/@types/lodash/ts3.1/common/array.d.ts", + "../node_modules/@types/lodash/ts3.1/common/collection.d.ts", + "../node_modules/@types/lodash/ts3.1/common/common.d.ts", + "../node_modules/@types/lodash/ts3.1/common/date.d.ts", + "../node_modules/@types/lodash/ts3.1/common/function.d.ts", + "../node_modules/@types/lodash/ts3.1/common/lang.d.ts", + "../node_modules/@types/lodash/ts3.1/common/math.d.ts", + "../node_modules/@types/lodash/ts3.1/common/number.d.ts", + "../node_modules/@types/lodash/ts3.1/common/object.d.ts", + "../node_modules/@types/lodash/ts3.1/common/seq.d.ts", + "../node_modules/@types/lodash/ts3.1/common/string.d.ts", + "../node_modules/@types/lodash/ts3.1/common/util.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@types/long/index.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@types/mime/index.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@types/node/base.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/inspector.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@types/node/inspector.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@types/node/ts3.2/index.d.ts": [ + "../node_modules/@types/node/base.d.ts" + ], + "../node_modules/@types/qs/index.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@types/range-parser/index.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@types/serve-static/index.d.ts": [ + "../node_modules/@types/express-serve-static-core/index.d.ts", + "../node_modules/@types/mime/index.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/abort-controller/dist/abort-controller.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/event-target-shim/index.d.ts" + ], + "../node_modules/event-target-shim/index.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/firebase-admin/lib/auth.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-admin/lib/index.d.ts" + ], + "../node_modules/firebase-admin/lib/database.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-admin/lib/index.d.ts" + ], + "../node_modules/firebase-admin/lib/index.d.ts": [ + "../node_modules/@google-cloud/firestore/types/firestore.d.ts", + "../node_modules/@google-cloud/storage/build/src/index.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-admin/lib/auth.d.ts", + "../node_modules/firebase-admin/lib/database.d.ts", + "../node_modules/firebase-admin/lib/instance-id.d.ts", + "../node_modules/firebase-admin/lib/messaging.d.ts", + "../node_modules/firebase-admin/lib/project-management.d.ts", + "../node_modules/firebase-admin/lib/security-rules.d.ts" + ], + "../node_modules/firebase-admin/lib/instance-id.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-admin/lib/index.d.ts" + ], + "../node_modules/firebase-admin/lib/messaging.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-admin/lib/index.d.ts" + ], + "../node_modules/firebase-admin/lib/project-management.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-admin/lib/index.d.ts" + ], + "../node_modules/firebase-admin/lib/security-rules.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-admin/lib/index.d.ts" + ], + "../node_modules/firebase-functions-helper/dist/firebase.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-admin/lib/index.d.ts" + ], + "../node_modules/firebase-functions-helper/dist/firestore.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/firebase-functions-helper/dist/index.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-functions-helper/dist/firebase.d.ts", + "../node_modules/firebase-functions-helper/dist/firestore.d.ts", + "../node_modules/firebase-functions-helper/dist/realtime.d.ts" + ], + "../node_modules/firebase-functions-helper/dist/realtime.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/firebase-functions/lib/apps.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-admin/lib/index.d.ts" + ], + "../node_modules/firebase-functions/lib/cloud-functions.d.ts": [ + "../node_modules/@types/express/index.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-functions/lib/function-configuration.d.ts" + ], + "../node_modules/firebase-functions/lib/config.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-admin/lib/index.d.ts" + ], + "../node_modules/firebase-functions/lib/function-builder.d.ts": [ + "../node_modules/@types/express-serve-static-core/index.d.ts", + "../node_modules/@types/express/index.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-functions/lib/cloud-functions.d.ts", + "../node_modules/firebase-functions/lib/function-configuration.d.ts", + "../node_modules/firebase-functions/lib/providers/analytics.d.ts", + "../node_modules/firebase-functions/lib/providers/auth.d.ts", + "../node_modules/firebase-functions/lib/providers/crashlytics.d.ts", + "../node_modules/firebase-functions/lib/providers/database.d.ts", + "../node_modules/firebase-functions/lib/providers/firestore.d.ts", + "../node_modules/firebase-functions/lib/providers/https.d.ts", + "../node_modules/firebase-functions/lib/providers/pubsub.d.ts", + "../node_modules/firebase-functions/lib/providers/remoteConfig.d.ts", + "../node_modules/firebase-functions/lib/providers/storage.d.ts", + "../node_modules/firebase-functions/lib/providers/testLab.d.ts" + ], + "../node_modules/firebase-functions/lib/function-configuration.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/firebase-functions/lib/handler-builder.d.ts": [ + "../node_modules/@types/express-serve-static-core/index.d.ts", + "../node_modules/@types/express/index.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-functions/lib/cloud-functions.d.ts", + "../node_modules/firebase-functions/lib/providers/analytics.d.ts", + "../node_modules/firebase-functions/lib/providers/auth.d.ts", + "../node_modules/firebase-functions/lib/providers/crashlytics.d.ts", + "../node_modules/firebase-functions/lib/providers/database.d.ts", + "../node_modules/firebase-functions/lib/providers/firestore.d.ts", + "../node_modules/firebase-functions/lib/providers/https.d.ts", + "../node_modules/firebase-functions/lib/providers/pubsub.d.ts", + "../node_modules/firebase-functions/lib/providers/remoteConfig.d.ts", + "../node_modules/firebase-functions/lib/providers/storage.d.ts", + "../node_modules/firebase-functions/lib/providers/testLab.d.ts" + ], + "../node_modules/firebase-functions/lib/index.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-functions/lib/apps.d.ts", + "../node_modules/firebase-functions/lib/cloud-functions.d.ts", + "../node_modules/firebase-functions/lib/config.d.ts", + "../node_modules/firebase-functions/lib/function-builder.d.ts", + "../node_modules/firebase-functions/lib/function-configuration.d.ts", + "../node_modules/firebase-functions/lib/handler-builder.d.ts", + "../node_modules/firebase-functions/lib/providers/analytics.d.ts", + "../node_modules/firebase-functions/lib/providers/auth.d.ts", + "../node_modules/firebase-functions/lib/providers/crashlytics.d.ts", + "../node_modules/firebase-functions/lib/providers/database.d.ts", + "../node_modules/firebase-functions/lib/providers/firestore.d.ts", + "../node_modules/firebase-functions/lib/providers/https.d.ts", + "../node_modules/firebase-functions/lib/providers/pubsub.d.ts", + "../node_modules/firebase-functions/lib/providers/remoteConfig.d.ts", + "../node_modules/firebase-functions/lib/providers/storage.d.ts", + "../node_modules/firebase-functions/lib/providers/testLab.d.ts" + ], + "../node_modules/firebase-functions/lib/providers/analytics.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-functions/lib/cloud-functions.d.ts", + "../node_modules/firebase-functions/lib/function-configuration.d.ts" + ], + "../node_modules/firebase-functions/lib/providers/auth.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-admin/lib/index.d.ts", + "../node_modules/firebase-functions/lib/cloud-functions.d.ts", + "../node_modules/firebase-functions/lib/function-configuration.d.ts" + ], + "../node_modules/firebase-functions/lib/providers/crashlytics.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-functions/lib/cloud-functions.d.ts", + "../node_modules/firebase-functions/lib/function-configuration.d.ts" + ], + "../node_modules/firebase-functions/lib/providers/database.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-admin/lib/index.d.ts", + "../node_modules/firebase-functions/lib/apps.d.ts", + "../node_modules/firebase-functions/lib/cloud-functions.d.ts", + "../node_modules/firebase-functions/lib/function-configuration.d.ts" + ], + "../node_modules/firebase-functions/lib/providers/firestore.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-admin/lib/index.d.ts", + "../node_modules/firebase-functions/lib/cloud-functions.d.ts", + "../node_modules/firebase-functions/lib/function-configuration.d.ts" + ], + "../node_modules/firebase-functions/lib/providers/https.d.ts": [ + "../node_modules/@types/express/index.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-admin/lib/index.d.ts", + "../node_modules/firebase-functions/lib/cloud-functions.d.ts", + "../node_modules/firebase-functions/lib/function-configuration.d.ts" + ], + "../node_modules/firebase-functions/lib/providers/pubsub.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-functions/lib/cloud-functions.d.ts", + "../node_modules/firebase-functions/lib/function-configuration.d.ts" + ], + "../node_modules/firebase-functions/lib/providers/remoteConfig.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-functions/lib/cloud-functions.d.ts", + "../node_modules/firebase-functions/lib/function-configuration.d.ts" + ], + "../node_modules/firebase-functions/lib/providers/storage.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-functions/lib/cloud-functions.d.ts", + "../node_modules/firebase-functions/lib/function-configuration.d.ts" + ], + "../node_modules/firebase-functions/lib/providers/testLab.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-functions/lib/cloud-functions.d.ts" + ], + "../node_modules/google-auth-library/build/src/auth/authclient.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/google-auth-library/build/src/auth/credentials.d.ts", + "../node_modules/google-auth-library/build/src/auth/oauth2client.d.ts", + "../node_modules/google-auth-library/build/src/transporters.d.ts", + "../node_modules/google-auth-library/node_modules/gaxios/build/src/index.d.ts" + ], + "../node_modules/google-auth-library/build/src/auth/computeclient.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/google-auth-library/build/src/auth/oauth2client.d.ts", + "../node_modules/google-auth-library/node_modules/gaxios/build/src/index.d.ts" + ], + "../node_modules/google-auth-library/build/src/auth/credentials.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/google-auth-library/build/src/auth/envDetect.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/google-auth-library/build/src/auth/googleauth.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/google-auth-library/build/src/auth/computeclient.d.ts", + "../node_modules/google-auth-library/build/src/auth/credentials.d.ts", + "../node_modules/google-auth-library/build/src/auth/envDetect.d.ts", + "../node_modules/google-auth-library/build/src/auth/idtokenclient.d.ts", + "../node_modules/google-auth-library/build/src/auth/jwtclient.d.ts", + "../node_modules/google-auth-library/build/src/auth/oauth2client.d.ts", + "../node_modules/google-auth-library/build/src/auth/refreshclient.d.ts", + "../node_modules/google-auth-library/build/src/transporters.d.ts", + "../node_modules/google-auth-library/node_modules/gaxios/build/src/index.d.ts" + ], + "../node_modules/google-auth-library/build/src/auth/iam.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/google-auth-library/build/src/auth/idtokenclient.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/google-auth-library/build/src/auth/oauth2client.d.ts" + ], + "../node_modules/google-auth-library/build/src/auth/jwtaccess.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/google-auth-library/build/src/auth/credentials.d.ts", + "../node_modules/google-auth-library/build/src/auth/oauth2client.d.ts" + ], + "../node_modules/google-auth-library/build/src/auth/jwtclient.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/google-auth-library/build/src/auth/credentials.d.ts", + "../node_modules/google-auth-library/build/src/auth/idtokenclient.d.ts", + "../node_modules/google-auth-library/build/src/auth/oauth2client.d.ts", + "../node_modules/google-auth-library/node_modules/gtoken/build/src/index.d.ts" + ], + "../node_modules/google-auth-library/build/src/auth/loginticket.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/google-auth-library/build/src/auth/oauth2client.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/google-auth-library/build/src/auth/authclient.d.ts", + "../node_modules/google-auth-library/build/src/auth/credentials.d.ts", + "../node_modules/google-auth-library/build/src/auth/loginticket.d.ts", + "../node_modules/google-auth-library/build/src/crypto/crypto.d.ts", + "../node_modules/google-auth-library/build/src/transporters.d.ts", + "../node_modules/google-auth-library/node_modules/gaxios/build/src/index.d.ts" + ], + "../node_modules/google-auth-library/build/src/auth/refreshclient.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/google-auth-library/build/src/auth/credentials.d.ts", + "../node_modules/google-auth-library/build/src/auth/oauth2client.d.ts" + ], + "../node_modules/google-auth-library/build/src/crypto/crypto.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/google-auth-library/build/src/index.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/google-auth-library/build/src/auth/computeclient.d.ts", + "../node_modules/google-auth-library/build/src/auth/credentials.d.ts", + "../node_modules/google-auth-library/build/src/auth/envDetect.d.ts", + "../node_modules/google-auth-library/build/src/auth/googleauth.d.ts", + "../node_modules/google-auth-library/build/src/auth/iam.d.ts", + "../node_modules/google-auth-library/build/src/auth/idtokenclient.d.ts", + "../node_modules/google-auth-library/build/src/auth/jwtaccess.d.ts", + "../node_modules/google-auth-library/build/src/auth/jwtclient.d.ts", + "../node_modules/google-auth-library/build/src/auth/loginticket.d.ts", + "../node_modules/google-auth-library/build/src/auth/oauth2client.d.ts", + "../node_modules/google-auth-library/build/src/auth/refreshclient.d.ts", + "../node_modules/google-auth-library/build/src/transporters.d.ts" + ], + "../node_modules/google-auth-library/build/src/transporters.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/google-auth-library/node_modules/gaxios/build/src/index.d.ts" + ], + "../node_modules/google-auth-library/node_modules/gaxios/build/src/common.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/abort-controller/dist/abort-controller.d.ts" + ], + "../node_modules/google-auth-library/node_modules/gaxios/build/src/gaxios.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/google-auth-library/node_modules/gaxios/build/src/common.d.ts" + ], + "../node_modules/google-auth-library/node_modules/gaxios/build/src/index.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/google-auth-library/node_modules/gaxios/build/src/common.d.ts", + "../node_modules/google-auth-library/node_modules/gaxios/build/src/gaxios.d.ts" + ], + "../node_modules/google-auth-library/node_modules/gtoken/build/src/index.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/teeny-request/build/src/index.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.dom.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.dom.iterable.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.es2015.collection.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.es2015.core.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.es2015.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.es2015.generator.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.es2015.iterable.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.es2015.promise.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.es2015.proxy.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.es2015.reflect.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.es2015.symbol.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.es2016.array.include.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.es2016.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.es2017.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.es2017.full.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.es2017.intl.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.es2017.object.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.es2017.string.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.es5.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.scripthost.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.webworker.importscripts.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../src/app.ts": [ + "../node_modules/@types/express/index.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-admin/lib/index.d.ts", + "../node_modules/firebase-functions/lib/index.d.ts", + "../src/controllers/api.ts", + "../src/interfaces/projectProperties.ts", + "../src/models/api.ts", + "../src/rcdata.ts", + "../src/routes/api.ts" + ], + "../src/bin/www.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../src/app.ts" + ], + "../src/controllers/api.ts": [ + "../node_modules/@types/express/index.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../src/models/api.ts" + ], + "../src/interfaces/projectProperties.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../src/models/api.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../src/interfaces/projectProperties.ts", + "../src/newsriver.ts", + "../src/rcdata.ts", + "../src/updater.ts" + ], + "../src/newsriver.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../src/rcdata.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-admin/lib/index.d.ts", + "../node_modules/firebase-functions/lib/index.d.ts", + "../src/updater.ts" + ], + "../src/routes/api.ts": [ + "../node_modules/@types/express/index.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-admin/lib/index.d.ts", + "../src/controllers/api.ts", + "../src/models/api.ts" + ], + "../src/updater.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-functions-helper/dist/index.d.ts", + "../src/newsriver.ts" + ] + }, + "exportedModulesMap": { + "../node_modules/@google-cloud/common/build/src/index.d.ts": [ + "../node_modules/@google-cloud/common/build/src/operation.d.ts", + "../node_modules/@google-cloud/common/build/src/service-object.d.ts", + "../node_modules/@google-cloud/common/build/src/service.d.ts", + "../node_modules/@google-cloud/common/build/src/util.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/google-auth-library/build/src/index.d.ts" + ], + "../node_modules/@google-cloud/common/build/src/operation.d.ts": [ + "../node_modules/@google-cloud/common/build/src/service-object.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@google-cloud/common/build/src/service-object.d.ts": [ + "../node_modules/@google-cloud/common/build/src/util.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/teeny-request/build/src/index.d.ts" + ], + "../node_modules/@google-cloud/common/build/src/service.d.ts": [ + "../node_modules/@google-cloud/common/build/src/service-object.d.ts", + "../node_modules/@google-cloud/common/build/src/util.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/google-auth-library/build/src/index.d.ts", + "../node_modules/teeny-request/build/src/index.d.ts" + ], + "../node_modules/@google-cloud/common/build/src/util.d.ts": [ + "../node_modules/@google-cloud/common/build/src/service-object.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/google-auth-library/build/src/index.d.ts", + "../node_modules/teeny-request/build/src/index.d.ts" + ], + "../node_modules/@google-cloud/firestore/types/firestore.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@google-cloud/storage/build/src/acl.d.ts": [ + "../node_modules/@google-cloud/common/build/src/index.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@google-cloud/storage/build/src/bucket.d.ts": [ + "../node_modules/@google-cloud/common/build/src/index.d.ts", + "../node_modules/@google-cloud/storage/build/src/acl.d.ts", + "../node_modules/@google-cloud/storage/build/src/channel.d.ts", + "../node_modules/@google-cloud/storage/build/src/file.d.ts", + "../node_modules/@google-cloud/storage/build/src/iam.d.ts", + "../node_modules/@google-cloud/storage/build/src/notification.d.ts", + "../node_modules/@google-cloud/storage/build/src/signer.d.ts", + "../node_modules/@google-cloud/storage/build/src/storage.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@google-cloud/storage/build/src/channel.d.ts": [ + "../node_modules/@google-cloud/common/build/src/index.d.ts", + "../node_modules/@google-cloud/storage/build/src/storage.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@google-cloud/storage/build/src/file.d.ts": [ + "../node_modules/@google-cloud/common/build/src/index.d.ts", + "../node_modules/@google-cloud/common/build/src/util.d.ts", + "../node_modules/@google-cloud/storage/build/src/acl.d.ts", + "../node_modules/@google-cloud/storage/build/src/bucket.d.ts", + "../node_modules/@google-cloud/storage/build/src/signer.d.ts", + "../node_modules/@google-cloud/storage/build/src/storage.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@google-cloud/storage/build/src/hmacKey.d.ts": [ + "../node_modules/@google-cloud/common/build/src/index.d.ts", + "../node_modules/@google-cloud/storage/build/src/storage.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@google-cloud/storage/build/src/iam.d.ts": [ + "../node_modules/@google-cloud/common/build/src/index.d.ts", + "../node_modules/@google-cloud/storage/build/src/bucket.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@google-cloud/storage/build/src/index.d.ts": [ + "../node_modules/@google-cloud/storage/build/src/acl.d.ts", + "../node_modules/@google-cloud/storage/build/src/bucket.d.ts", + "../node_modules/@google-cloud/storage/build/src/channel.d.ts", + "../node_modules/@google-cloud/storage/build/src/file.d.ts", + "../node_modules/@google-cloud/storage/build/src/hmacKey.d.ts", + "../node_modules/@google-cloud/storage/build/src/iam.d.ts", + "../node_modules/@google-cloud/storage/build/src/notification.d.ts", + "../node_modules/@google-cloud/storage/build/src/signer.d.ts", + "../node_modules/@google-cloud/storage/build/src/storage.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@google-cloud/storage/build/src/notification.d.ts": [ + "../node_modules/@google-cloud/common/build/src/index.d.ts", + "../node_modules/@google-cloud/common/build/src/util.d.ts", + "../node_modules/@google-cloud/storage/build/src/bucket.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@google-cloud/storage/build/src/signer.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@google-cloud/storage/build/src/storage.d.ts": [ + "../node_modules/@google-cloud/common/build/src/index.d.ts", + "../node_modules/@google-cloud/storage/build/src/bucket.d.ts", + "../node_modules/@google-cloud/storage/build/src/channel.d.ts", + "../node_modules/@google-cloud/storage/build/src/file.d.ts", + "../node_modules/@google-cloud/storage/build/src/hmacKey.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@types/body-parser/index.d.ts": [ + "../node_modules/@types/connect/index.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@types/connect/index.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@types/express-serve-static-core/index.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/@types/qs/index.d.ts", + "../node_modules/@types/range-parser/index.d.ts" + ], + "../node_modules/@types/express/index.d.ts": [ + "../node_modules/@types/body-parser/index.d.ts", + "../node_modules/@types/express-serve-static-core/index.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/@types/qs/index.d.ts", + "../node_modules/@types/serve-static/index.d.ts" + ], + "../node_modules/@types/fs-extra/index.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@types/lodash/ts3.1/common/array.d.ts": [ + "../node_modules/@types/lodash/ts3.1/common/collection.d.ts", + "../node_modules/@types/lodash/ts3.1/common/common.d.ts", + "../node_modules/@types/lodash/ts3.1/common/date.d.ts", + "../node_modules/@types/lodash/ts3.1/common/function.d.ts", + "../node_modules/@types/lodash/ts3.1/common/lang.d.ts", + "../node_modules/@types/lodash/ts3.1/common/math.d.ts", + "../node_modules/@types/lodash/ts3.1/common/number.d.ts", + "../node_modules/@types/lodash/ts3.1/common/object.d.ts", + "../node_modules/@types/lodash/ts3.1/common/seq.d.ts", + "../node_modules/@types/lodash/ts3.1/common/string.d.ts", + "../node_modules/@types/lodash/ts3.1/common/util.d.ts", + "../node_modules/@types/lodash/ts3.1/index.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@types/lodash/ts3.1/common/collection.d.ts": [ + "../node_modules/@types/lodash/ts3.1/common/array.d.ts", + "../node_modules/@types/lodash/ts3.1/common/common.d.ts", + "../node_modules/@types/lodash/ts3.1/common/date.d.ts", + "../node_modules/@types/lodash/ts3.1/common/function.d.ts", + "../node_modules/@types/lodash/ts3.1/common/lang.d.ts", + "../node_modules/@types/lodash/ts3.1/common/math.d.ts", + "../node_modules/@types/lodash/ts3.1/common/number.d.ts", + "../node_modules/@types/lodash/ts3.1/common/object.d.ts", + "../node_modules/@types/lodash/ts3.1/common/seq.d.ts", + "../node_modules/@types/lodash/ts3.1/common/string.d.ts", + "../node_modules/@types/lodash/ts3.1/common/util.d.ts", + "../node_modules/@types/lodash/ts3.1/index.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@types/lodash/ts3.1/common/common.d.ts": [ + "../node_modules/@types/lodash/ts3.1/common/array.d.ts", + "../node_modules/@types/lodash/ts3.1/common/collection.d.ts", + "../node_modules/@types/lodash/ts3.1/common/date.d.ts", + "../node_modules/@types/lodash/ts3.1/common/function.d.ts", + "../node_modules/@types/lodash/ts3.1/common/lang.d.ts", + "../node_modules/@types/lodash/ts3.1/common/math.d.ts", + "../node_modules/@types/lodash/ts3.1/common/number.d.ts", + "../node_modules/@types/lodash/ts3.1/common/object.d.ts", + "../node_modules/@types/lodash/ts3.1/common/seq.d.ts", + "../node_modules/@types/lodash/ts3.1/common/string.d.ts", + "../node_modules/@types/lodash/ts3.1/common/util.d.ts", + "../node_modules/@types/lodash/ts3.1/index.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@types/lodash/ts3.1/common/date.d.ts": [ + "../node_modules/@types/lodash/ts3.1/common/array.d.ts", + "../node_modules/@types/lodash/ts3.1/common/collection.d.ts", + "../node_modules/@types/lodash/ts3.1/common/common.d.ts", + "../node_modules/@types/lodash/ts3.1/common/function.d.ts", + "../node_modules/@types/lodash/ts3.1/common/lang.d.ts", + "../node_modules/@types/lodash/ts3.1/common/math.d.ts", + "../node_modules/@types/lodash/ts3.1/common/number.d.ts", + "../node_modules/@types/lodash/ts3.1/common/object.d.ts", + "../node_modules/@types/lodash/ts3.1/common/seq.d.ts", + "../node_modules/@types/lodash/ts3.1/common/string.d.ts", + "../node_modules/@types/lodash/ts3.1/common/util.d.ts", + "../node_modules/@types/lodash/ts3.1/index.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@types/lodash/ts3.1/common/function.d.ts": [ + "../node_modules/@types/lodash/ts3.1/common/array.d.ts", + "../node_modules/@types/lodash/ts3.1/common/collection.d.ts", + "../node_modules/@types/lodash/ts3.1/common/common.d.ts", + "../node_modules/@types/lodash/ts3.1/common/date.d.ts", + "../node_modules/@types/lodash/ts3.1/common/lang.d.ts", + "../node_modules/@types/lodash/ts3.1/common/math.d.ts", + "../node_modules/@types/lodash/ts3.1/common/number.d.ts", + "../node_modules/@types/lodash/ts3.1/common/object.d.ts", + "../node_modules/@types/lodash/ts3.1/common/seq.d.ts", + "../node_modules/@types/lodash/ts3.1/common/string.d.ts", + "../node_modules/@types/lodash/ts3.1/common/util.d.ts", + "../node_modules/@types/lodash/ts3.1/index.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@types/lodash/ts3.1/common/lang.d.ts": [ + "../node_modules/@types/lodash/ts3.1/common/array.d.ts", + "../node_modules/@types/lodash/ts3.1/common/collection.d.ts", + "../node_modules/@types/lodash/ts3.1/common/common.d.ts", + "../node_modules/@types/lodash/ts3.1/common/date.d.ts", + "../node_modules/@types/lodash/ts3.1/common/function.d.ts", + "../node_modules/@types/lodash/ts3.1/common/math.d.ts", + "../node_modules/@types/lodash/ts3.1/common/number.d.ts", + "../node_modules/@types/lodash/ts3.1/common/object.d.ts", + "../node_modules/@types/lodash/ts3.1/common/seq.d.ts", + "../node_modules/@types/lodash/ts3.1/common/string.d.ts", + "../node_modules/@types/lodash/ts3.1/common/util.d.ts", + "../node_modules/@types/lodash/ts3.1/index.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@types/lodash/ts3.1/common/math.d.ts": [ + "../node_modules/@types/lodash/ts3.1/common/array.d.ts", + "../node_modules/@types/lodash/ts3.1/common/collection.d.ts", + "../node_modules/@types/lodash/ts3.1/common/common.d.ts", + "../node_modules/@types/lodash/ts3.1/common/date.d.ts", + "../node_modules/@types/lodash/ts3.1/common/function.d.ts", + "../node_modules/@types/lodash/ts3.1/common/lang.d.ts", + "../node_modules/@types/lodash/ts3.1/common/number.d.ts", + "../node_modules/@types/lodash/ts3.1/common/object.d.ts", + "../node_modules/@types/lodash/ts3.1/common/seq.d.ts", + "../node_modules/@types/lodash/ts3.1/common/string.d.ts", + "../node_modules/@types/lodash/ts3.1/common/util.d.ts", + "../node_modules/@types/lodash/ts3.1/index.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@types/lodash/ts3.1/common/number.d.ts": [ + "../node_modules/@types/lodash/ts3.1/common/array.d.ts", + "../node_modules/@types/lodash/ts3.1/common/collection.d.ts", + "../node_modules/@types/lodash/ts3.1/common/common.d.ts", + "../node_modules/@types/lodash/ts3.1/common/date.d.ts", + "../node_modules/@types/lodash/ts3.1/common/function.d.ts", + "../node_modules/@types/lodash/ts3.1/common/lang.d.ts", + "../node_modules/@types/lodash/ts3.1/common/math.d.ts", + "../node_modules/@types/lodash/ts3.1/common/object.d.ts", + "../node_modules/@types/lodash/ts3.1/common/seq.d.ts", + "../node_modules/@types/lodash/ts3.1/common/string.d.ts", + "../node_modules/@types/lodash/ts3.1/common/util.d.ts", + "../node_modules/@types/lodash/ts3.1/index.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@types/lodash/ts3.1/common/object.d.ts": [ + "../node_modules/@types/lodash/ts3.1/common/array.d.ts", + "../node_modules/@types/lodash/ts3.1/common/collection.d.ts", + "../node_modules/@types/lodash/ts3.1/common/common.d.ts", + "../node_modules/@types/lodash/ts3.1/common/date.d.ts", + "../node_modules/@types/lodash/ts3.1/common/function.d.ts", + "../node_modules/@types/lodash/ts3.1/common/lang.d.ts", + "../node_modules/@types/lodash/ts3.1/common/math.d.ts", + "../node_modules/@types/lodash/ts3.1/common/number.d.ts", + "../node_modules/@types/lodash/ts3.1/common/seq.d.ts", + "../node_modules/@types/lodash/ts3.1/common/string.d.ts", + "../node_modules/@types/lodash/ts3.1/common/util.d.ts", + "../node_modules/@types/lodash/ts3.1/index.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@types/lodash/ts3.1/common/seq.d.ts": [ + "../node_modules/@types/lodash/ts3.1/common/array.d.ts", + "../node_modules/@types/lodash/ts3.1/common/collection.d.ts", + "../node_modules/@types/lodash/ts3.1/common/common.d.ts", + "../node_modules/@types/lodash/ts3.1/common/date.d.ts", + "../node_modules/@types/lodash/ts3.1/common/function.d.ts", + "../node_modules/@types/lodash/ts3.1/common/lang.d.ts", + "../node_modules/@types/lodash/ts3.1/common/math.d.ts", + "../node_modules/@types/lodash/ts3.1/common/number.d.ts", + "../node_modules/@types/lodash/ts3.1/common/object.d.ts", + "../node_modules/@types/lodash/ts3.1/common/string.d.ts", + "../node_modules/@types/lodash/ts3.1/common/util.d.ts", + "../node_modules/@types/lodash/ts3.1/index.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@types/lodash/ts3.1/common/string.d.ts": [ + "../node_modules/@types/lodash/ts3.1/common/array.d.ts", + "../node_modules/@types/lodash/ts3.1/common/collection.d.ts", + "../node_modules/@types/lodash/ts3.1/common/common.d.ts", + "../node_modules/@types/lodash/ts3.1/common/date.d.ts", + "../node_modules/@types/lodash/ts3.1/common/function.d.ts", + "../node_modules/@types/lodash/ts3.1/common/lang.d.ts", + "../node_modules/@types/lodash/ts3.1/common/math.d.ts", + "../node_modules/@types/lodash/ts3.1/common/number.d.ts", + "../node_modules/@types/lodash/ts3.1/common/object.d.ts", + "../node_modules/@types/lodash/ts3.1/common/seq.d.ts", + "../node_modules/@types/lodash/ts3.1/common/util.d.ts", + "../node_modules/@types/lodash/ts3.1/index.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@types/lodash/ts3.1/common/util.d.ts": [ + "../node_modules/@types/lodash/ts3.1/common/array.d.ts", + "../node_modules/@types/lodash/ts3.1/common/collection.d.ts", + "../node_modules/@types/lodash/ts3.1/common/common.d.ts", + "../node_modules/@types/lodash/ts3.1/common/date.d.ts", + "../node_modules/@types/lodash/ts3.1/common/function.d.ts", + "../node_modules/@types/lodash/ts3.1/common/lang.d.ts", + "../node_modules/@types/lodash/ts3.1/common/math.d.ts", + "../node_modules/@types/lodash/ts3.1/common/number.d.ts", + "../node_modules/@types/lodash/ts3.1/common/object.d.ts", + "../node_modules/@types/lodash/ts3.1/common/seq.d.ts", + "../node_modules/@types/lodash/ts3.1/common/string.d.ts", + "../node_modules/@types/lodash/ts3.1/index.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@types/lodash/ts3.1/index.d.ts": [ + "../node_modules/@types/lodash/ts3.1/common/array.d.ts", + "../node_modules/@types/lodash/ts3.1/common/collection.d.ts", + "../node_modules/@types/lodash/ts3.1/common/common.d.ts", + "../node_modules/@types/lodash/ts3.1/common/date.d.ts", + "../node_modules/@types/lodash/ts3.1/common/function.d.ts", + "../node_modules/@types/lodash/ts3.1/common/lang.d.ts", + "../node_modules/@types/lodash/ts3.1/common/math.d.ts", + "../node_modules/@types/lodash/ts3.1/common/number.d.ts", + "../node_modules/@types/lodash/ts3.1/common/object.d.ts", + "../node_modules/@types/lodash/ts3.1/common/seq.d.ts", + "../node_modules/@types/lodash/ts3.1/common/string.d.ts", + "../node_modules/@types/lodash/ts3.1/common/util.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@types/long/index.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@types/mime/index.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@types/node/base.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/inspector.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@types/node/inspector.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@types/node/ts3.2/index.d.ts": [ + "../node_modules/@types/node/base.d.ts" + ], + "../node_modules/@types/qs/index.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@types/range-parser/index.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/@types/serve-static/index.d.ts": [ + "../node_modules/@types/express-serve-static-core/index.d.ts", + "../node_modules/@types/mime/index.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/abort-controller/dist/abort-controller.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/event-target-shim/index.d.ts" + ], + "../node_modules/event-target-shim/index.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/firebase-admin/lib/auth.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-admin/lib/index.d.ts" + ], + "../node_modules/firebase-admin/lib/database.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-admin/lib/index.d.ts" + ], + "../node_modules/firebase-admin/lib/index.d.ts": [ + "../node_modules/@google-cloud/firestore/types/firestore.d.ts", + "../node_modules/@google-cloud/storage/build/src/index.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-admin/lib/auth.d.ts", + "../node_modules/firebase-admin/lib/database.d.ts", + "../node_modules/firebase-admin/lib/instance-id.d.ts", + "../node_modules/firebase-admin/lib/messaging.d.ts", + "../node_modules/firebase-admin/lib/project-management.d.ts", + "../node_modules/firebase-admin/lib/security-rules.d.ts" + ], + "../node_modules/firebase-admin/lib/instance-id.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-admin/lib/index.d.ts" + ], + "../node_modules/firebase-admin/lib/messaging.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-admin/lib/index.d.ts" + ], + "../node_modules/firebase-admin/lib/project-management.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-admin/lib/index.d.ts" + ], + "../node_modules/firebase-admin/lib/security-rules.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-admin/lib/index.d.ts" + ], + "../node_modules/firebase-functions-helper/dist/firebase.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-admin/lib/index.d.ts" + ], + "../node_modules/firebase-functions-helper/dist/firestore.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/firebase-functions-helper/dist/index.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-functions-helper/dist/firebase.d.ts", + "../node_modules/firebase-functions-helper/dist/firestore.d.ts", + "../node_modules/firebase-functions-helper/dist/realtime.d.ts" + ], + "../node_modules/firebase-functions-helper/dist/realtime.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/firebase-functions/lib/apps.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-admin/lib/index.d.ts" + ], + "../node_modules/firebase-functions/lib/cloud-functions.d.ts": [ + "../node_modules/@types/express/index.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-functions/lib/function-configuration.d.ts" + ], + "../node_modules/firebase-functions/lib/config.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-admin/lib/index.d.ts" + ], + "../node_modules/firebase-functions/lib/function-builder.d.ts": [ + "../node_modules/@types/express-serve-static-core/index.d.ts", + "../node_modules/@types/express/index.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-functions/lib/cloud-functions.d.ts", + "../node_modules/firebase-functions/lib/function-configuration.d.ts", + "../node_modules/firebase-functions/lib/providers/analytics.d.ts", + "../node_modules/firebase-functions/lib/providers/auth.d.ts", + "../node_modules/firebase-functions/lib/providers/crashlytics.d.ts", + "../node_modules/firebase-functions/lib/providers/database.d.ts", + "../node_modules/firebase-functions/lib/providers/firestore.d.ts", + "../node_modules/firebase-functions/lib/providers/https.d.ts", + "../node_modules/firebase-functions/lib/providers/pubsub.d.ts", + "../node_modules/firebase-functions/lib/providers/remoteConfig.d.ts", + "../node_modules/firebase-functions/lib/providers/storage.d.ts", + "../node_modules/firebase-functions/lib/providers/testLab.d.ts" + ], + "../node_modules/firebase-functions/lib/function-configuration.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/firebase-functions/lib/handler-builder.d.ts": [ + "../node_modules/@types/express-serve-static-core/index.d.ts", + "../node_modules/@types/express/index.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-functions/lib/cloud-functions.d.ts", + "../node_modules/firebase-functions/lib/providers/analytics.d.ts", + "../node_modules/firebase-functions/lib/providers/auth.d.ts", + "../node_modules/firebase-functions/lib/providers/crashlytics.d.ts", + "../node_modules/firebase-functions/lib/providers/database.d.ts", + "../node_modules/firebase-functions/lib/providers/firestore.d.ts", + "../node_modules/firebase-functions/lib/providers/https.d.ts", + "../node_modules/firebase-functions/lib/providers/pubsub.d.ts", + "../node_modules/firebase-functions/lib/providers/remoteConfig.d.ts", + "../node_modules/firebase-functions/lib/providers/storage.d.ts", + "../node_modules/firebase-functions/lib/providers/testLab.d.ts" + ], + "../node_modules/firebase-functions/lib/index.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-functions/lib/apps.d.ts", + "../node_modules/firebase-functions/lib/cloud-functions.d.ts", + "../node_modules/firebase-functions/lib/config.d.ts", + "../node_modules/firebase-functions/lib/function-builder.d.ts", + "../node_modules/firebase-functions/lib/function-configuration.d.ts", + "../node_modules/firebase-functions/lib/handler-builder.d.ts", + "../node_modules/firebase-functions/lib/providers/analytics.d.ts", + "../node_modules/firebase-functions/lib/providers/auth.d.ts", + "../node_modules/firebase-functions/lib/providers/crashlytics.d.ts", + "../node_modules/firebase-functions/lib/providers/database.d.ts", + "../node_modules/firebase-functions/lib/providers/firestore.d.ts", + "../node_modules/firebase-functions/lib/providers/https.d.ts", + "../node_modules/firebase-functions/lib/providers/pubsub.d.ts", + "../node_modules/firebase-functions/lib/providers/remoteConfig.d.ts", + "../node_modules/firebase-functions/lib/providers/storage.d.ts", + "../node_modules/firebase-functions/lib/providers/testLab.d.ts" + ], + "../node_modules/firebase-functions/lib/providers/analytics.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-functions/lib/cloud-functions.d.ts", + "../node_modules/firebase-functions/lib/function-configuration.d.ts" + ], + "../node_modules/firebase-functions/lib/providers/auth.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-admin/lib/index.d.ts", + "../node_modules/firebase-functions/lib/cloud-functions.d.ts", + "../node_modules/firebase-functions/lib/function-configuration.d.ts" + ], + "../node_modules/firebase-functions/lib/providers/crashlytics.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-functions/lib/cloud-functions.d.ts", + "../node_modules/firebase-functions/lib/function-configuration.d.ts" + ], + "../node_modules/firebase-functions/lib/providers/database.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-admin/lib/index.d.ts", + "../node_modules/firebase-functions/lib/apps.d.ts", + "../node_modules/firebase-functions/lib/cloud-functions.d.ts", + "../node_modules/firebase-functions/lib/function-configuration.d.ts" + ], + "../node_modules/firebase-functions/lib/providers/firestore.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-admin/lib/index.d.ts", + "../node_modules/firebase-functions/lib/cloud-functions.d.ts", + "../node_modules/firebase-functions/lib/function-configuration.d.ts" + ], + "../node_modules/firebase-functions/lib/providers/https.d.ts": [ + "../node_modules/@types/express/index.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-admin/lib/index.d.ts", + "../node_modules/firebase-functions/lib/cloud-functions.d.ts", + "../node_modules/firebase-functions/lib/function-configuration.d.ts" + ], + "../node_modules/firebase-functions/lib/providers/pubsub.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-functions/lib/cloud-functions.d.ts", + "../node_modules/firebase-functions/lib/function-configuration.d.ts" + ], + "../node_modules/firebase-functions/lib/providers/remoteConfig.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-functions/lib/cloud-functions.d.ts", + "../node_modules/firebase-functions/lib/function-configuration.d.ts" + ], + "../node_modules/firebase-functions/lib/providers/storage.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-functions/lib/cloud-functions.d.ts", + "../node_modules/firebase-functions/lib/function-configuration.d.ts" + ], + "../node_modules/firebase-functions/lib/providers/testLab.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/firebase-functions/lib/cloud-functions.d.ts" + ], + "../node_modules/google-auth-library/build/src/auth/authclient.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/google-auth-library/build/src/auth/credentials.d.ts", + "../node_modules/google-auth-library/build/src/auth/oauth2client.d.ts", + "../node_modules/google-auth-library/build/src/transporters.d.ts", + "../node_modules/google-auth-library/node_modules/gaxios/build/src/index.d.ts" + ], + "../node_modules/google-auth-library/build/src/auth/computeclient.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/google-auth-library/build/src/auth/oauth2client.d.ts", + "../node_modules/google-auth-library/node_modules/gaxios/build/src/index.d.ts" + ], + "../node_modules/google-auth-library/build/src/auth/credentials.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/google-auth-library/build/src/auth/envDetect.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/google-auth-library/build/src/auth/googleauth.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/google-auth-library/build/src/auth/computeclient.d.ts", + "../node_modules/google-auth-library/build/src/auth/credentials.d.ts", + "../node_modules/google-auth-library/build/src/auth/envDetect.d.ts", + "../node_modules/google-auth-library/build/src/auth/idtokenclient.d.ts", + "../node_modules/google-auth-library/build/src/auth/jwtclient.d.ts", + "../node_modules/google-auth-library/build/src/auth/oauth2client.d.ts", + "../node_modules/google-auth-library/build/src/auth/refreshclient.d.ts", + "../node_modules/google-auth-library/build/src/transporters.d.ts", + "../node_modules/google-auth-library/node_modules/gaxios/build/src/index.d.ts" + ], + "../node_modules/google-auth-library/build/src/auth/iam.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/google-auth-library/build/src/auth/idtokenclient.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/google-auth-library/build/src/auth/oauth2client.d.ts" + ], + "../node_modules/google-auth-library/build/src/auth/jwtaccess.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/google-auth-library/build/src/auth/credentials.d.ts", + "../node_modules/google-auth-library/build/src/auth/oauth2client.d.ts" + ], + "../node_modules/google-auth-library/build/src/auth/jwtclient.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/google-auth-library/build/src/auth/credentials.d.ts", + "../node_modules/google-auth-library/build/src/auth/idtokenclient.d.ts", + "../node_modules/google-auth-library/build/src/auth/oauth2client.d.ts", + "../node_modules/google-auth-library/node_modules/gtoken/build/src/index.d.ts" + ], + "../node_modules/google-auth-library/build/src/auth/loginticket.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/google-auth-library/build/src/auth/oauth2client.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/google-auth-library/build/src/auth/authclient.d.ts", + "../node_modules/google-auth-library/build/src/auth/credentials.d.ts", + "../node_modules/google-auth-library/build/src/auth/loginticket.d.ts", + "../node_modules/google-auth-library/build/src/crypto/crypto.d.ts", + "../node_modules/google-auth-library/build/src/transporters.d.ts", + "../node_modules/google-auth-library/node_modules/gaxios/build/src/index.d.ts" + ], + "../node_modules/google-auth-library/build/src/auth/refreshclient.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/google-auth-library/build/src/auth/credentials.d.ts", + "../node_modules/google-auth-library/build/src/auth/oauth2client.d.ts" + ], + "../node_modules/google-auth-library/build/src/crypto/crypto.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/google-auth-library/build/src/index.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/google-auth-library/build/src/auth/computeclient.d.ts", + "../node_modules/google-auth-library/build/src/auth/credentials.d.ts", + "../node_modules/google-auth-library/build/src/auth/envDetect.d.ts", + "../node_modules/google-auth-library/build/src/auth/googleauth.d.ts", + "../node_modules/google-auth-library/build/src/auth/iam.d.ts", + "../node_modules/google-auth-library/build/src/auth/idtokenclient.d.ts", + "../node_modules/google-auth-library/build/src/auth/jwtaccess.d.ts", + "../node_modules/google-auth-library/build/src/auth/jwtclient.d.ts", + "../node_modules/google-auth-library/build/src/auth/loginticket.d.ts", + "../node_modules/google-auth-library/build/src/auth/oauth2client.d.ts", + "../node_modules/google-auth-library/build/src/auth/refreshclient.d.ts", + "../node_modules/google-auth-library/build/src/transporters.d.ts" + ], + "../node_modules/google-auth-library/build/src/transporters.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/google-auth-library/node_modules/gaxios/build/src/index.d.ts" + ], + "../node_modules/google-auth-library/node_modules/gaxios/build/src/common.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/abort-controller/dist/abort-controller.d.ts" + ], + "../node_modules/google-auth-library/node_modules/gaxios/build/src/gaxios.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/google-auth-library/node_modules/gaxios/build/src/common.d.ts" + ], + "../node_modules/google-auth-library/node_modules/gaxios/build/src/index.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/google-auth-library/node_modules/gaxios/build/src/common.d.ts", + "../node_modules/google-auth-library/node_modules/gaxios/build/src/gaxios.d.ts" + ], + "../node_modules/google-auth-library/node_modules/gtoken/build/src/index.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/teeny-request/build/src/index.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.dom.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.dom.iterable.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.es2015.collection.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.es2015.core.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.es2015.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.es2015.generator.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.es2015.iterable.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.es2015.promise.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.es2015.proxy.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.es2015.reflect.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.es2015.symbol.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.es2016.array.include.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.es2016.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.es2017.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.es2017.full.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.es2017.intl.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.es2017.object.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.es2017.string.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.es5.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.scripthost.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../node_modules/typescript/lib/lib.webworker.importscripts.d.ts": [ + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts" + ], + "../src/app.ts": [ + "../node_modules/@types/express-serve-static-core/index.d.ts" + ], + "../src/controllers/api.ts": [ + "../node_modules/@types/express/index.d.ts", + "../src/models/api.ts" + ], + "../src/models/api.ts": [ + "../src/interfaces/projectProperties.ts", + "../src/newsriver.ts", + "../src/rcdata.ts", + "../src/updater.ts" + ], + "../src/rcdata.ts": [ + "../node_modules/firebase-admin/lib/index.d.ts", + "../src/updater.ts" + ], + "../src/routes/api.ts": [ + "../node_modules/@types/express/index.d.ts", + "../node_modules/firebase-admin/lib/index.d.ts", + "../src/controllers/api.ts", + "../src/models/api.ts" + ], + "../src/updater.ts": [ + "../src/newsriver.ts" + ] + }, + "semanticDiagnosticsPerFile": [ + "../node_modules/@google-cloud/common/build/src/index.d.ts", + "../node_modules/@google-cloud/common/build/src/operation.d.ts", + "../node_modules/@google-cloud/common/build/src/service-object.d.ts", + "../node_modules/@google-cloud/common/build/src/service.d.ts", + "../node_modules/@google-cloud/common/build/src/util.d.ts", + "../node_modules/@google-cloud/firestore/types/firestore.d.ts", + "../node_modules/@google-cloud/storage/build/src/acl.d.ts", + "../node_modules/@google-cloud/storage/build/src/bucket.d.ts", + "../node_modules/@google-cloud/storage/build/src/channel.d.ts", + "../node_modules/@google-cloud/storage/build/src/file.d.ts", + "../node_modules/@google-cloud/storage/build/src/hmacKey.d.ts", + "../node_modules/@google-cloud/storage/build/src/iam.d.ts", + "../node_modules/@google-cloud/storage/build/src/index.d.ts", + "../node_modules/@google-cloud/storage/build/src/notification.d.ts", + "../node_modules/@google-cloud/storage/build/src/signer.d.ts", + "../node_modules/@google-cloud/storage/build/src/storage.d.ts", + "../node_modules/@types/body-parser/index.d.ts", + "../node_modules/@types/connect/index.d.ts", + "../node_modules/@types/express-serve-static-core/index.d.ts", + "../node_modules/@types/express/index.d.ts", + "../node_modules/@types/fs-extra/index.d.ts", + "../node_modules/@types/lodash/ts3.1/common/array.d.ts", + "../node_modules/@types/lodash/ts3.1/common/collection.d.ts", + "../node_modules/@types/lodash/ts3.1/common/common.d.ts", + "../node_modules/@types/lodash/ts3.1/common/date.d.ts", + "../node_modules/@types/lodash/ts3.1/common/function.d.ts", + "../node_modules/@types/lodash/ts3.1/common/lang.d.ts", + "../node_modules/@types/lodash/ts3.1/common/math.d.ts", + "../node_modules/@types/lodash/ts3.1/common/number.d.ts", + "../node_modules/@types/lodash/ts3.1/common/object.d.ts", + "../node_modules/@types/lodash/ts3.1/common/seq.d.ts", + "../node_modules/@types/lodash/ts3.1/common/string.d.ts", + "../node_modules/@types/lodash/ts3.1/common/util.d.ts", + "../node_modules/@types/lodash/ts3.1/index.d.ts", + "../node_modules/@types/long/index.d.ts", + "../node_modules/@types/mime/index.d.ts", + "../node_modules/@types/node/base.d.ts", + "../node_modules/@types/node/inspector.d.ts", + "../node_modules/@types/node/ts3.2/index.d.ts", + "../node_modules/@types/qs/index.d.ts", + "../node_modules/@types/range-parser/index.d.ts", + "../node_modules/@types/serve-static/index.d.ts", + "../node_modules/abort-controller/dist/abort-controller.d.ts", + "../node_modules/event-target-shim/index.d.ts", + "../node_modules/firebase-admin/lib/auth.d.ts", + "../node_modules/firebase-admin/lib/database.d.ts", + "../node_modules/firebase-admin/lib/index.d.ts", + "../node_modules/firebase-admin/lib/instance-id.d.ts", + "../node_modules/firebase-admin/lib/messaging.d.ts", + "../node_modules/firebase-admin/lib/project-management.d.ts", + "../node_modules/firebase-admin/lib/security-rules.d.ts", + "../node_modules/firebase-functions-helper/dist/firebase.d.ts", + "../node_modules/firebase-functions-helper/dist/firestore.d.ts", + "../node_modules/firebase-functions-helper/dist/index.d.ts", + "../node_modules/firebase-functions-helper/dist/realtime.d.ts", + "../node_modules/firebase-functions/lib/apps.d.ts", + "../node_modules/firebase-functions/lib/cloud-functions.d.ts", + "../node_modules/firebase-functions/lib/config.d.ts", + "../node_modules/firebase-functions/lib/function-builder.d.ts", + "../node_modules/firebase-functions/lib/function-configuration.d.ts", + "../node_modules/firebase-functions/lib/handler-builder.d.ts", + "../node_modules/firebase-functions/lib/index.d.ts", + "../node_modules/firebase-functions/lib/providers/analytics.d.ts", + "../node_modules/firebase-functions/lib/providers/auth.d.ts", + "../node_modules/firebase-functions/lib/providers/crashlytics.d.ts", + "../node_modules/firebase-functions/lib/providers/database.d.ts", + "../node_modules/firebase-functions/lib/providers/firestore.d.ts", + "../node_modules/firebase-functions/lib/providers/https.d.ts", + "../node_modules/firebase-functions/lib/providers/pubsub.d.ts", + "../node_modules/firebase-functions/lib/providers/remoteConfig.d.ts", + "../node_modules/firebase-functions/lib/providers/storage.d.ts", + "../node_modules/firebase-functions/lib/providers/testLab.d.ts", + "../node_modules/google-auth-library/build/src/auth/authclient.d.ts", + "../node_modules/google-auth-library/build/src/auth/computeclient.d.ts", + "../node_modules/google-auth-library/build/src/auth/credentials.d.ts", + "../node_modules/google-auth-library/build/src/auth/envDetect.d.ts", + "../node_modules/google-auth-library/build/src/auth/googleauth.d.ts", + "../node_modules/google-auth-library/build/src/auth/iam.d.ts", + "../node_modules/google-auth-library/build/src/auth/idtokenclient.d.ts", + "../node_modules/google-auth-library/build/src/auth/jwtaccess.d.ts", + "../node_modules/google-auth-library/build/src/auth/jwtclient.d.ts", + "../node_modules/google-auth-library/build/src/auth/loginticket.d.ts", + "../node_modules/google-auth-library/build/src/auth/oauth2client.d.ts", + "../node_modules/google-auth-library/build/src/auth/refreshclient.d.ts", + "../node_modules/google-auth-library/build/src/crypto/crypto.d.ts", + "../node_modules/google-auth-library/build/src/index.d.ts", + "../node_modules/google-auth-library/build/src/transporters.d.ts", + "../node_modules/google-auth-library/node_modules/gaxios/build/src/common.d.ts", + "../node_modules/google-auth-library/node_modules/gaxios/build/src/gaxios.d.ts", + "../node_modules/google-auth-library/node_modules/gaxios/build/src/index.d.ts", + "../node_modules/google-auth-library/node_modules/gtoken/build/src/index.d.ts", + "../node_modules/teeny-request/build/src/index.d.ts", + "../node_modules/typescript/lib/lib.dom.d.ts", + "../node_modules/typescript/lib/lib.dom.iterable.d.ts", + "../node_modules/typescript/lib/lib.es2015.collection.d.ts", + "../node_modules/typescript/lib/lib.es2015.core.d.ts", + "../node_modules/typescript/lib/lib.es2015.d.ts", + "../node_modules/typescript/lib/lib.es2015.generator.d.ts", + "../node_modules/typescript/lib/lib.es2015.iterable.d.ts", + "../node_modules/typescript/lib/lib.es2015.promise.d.ts", + "../node_modules/typescript/lib/lib.es2015.proxy.d.ts", + "../node_modules/typescript/lib/lib.es2015.reflect.d.ts", + "../node_modules/typescript/lib/lib.es2015.symbol.d.ts", + "../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts", + "../node_modules/typescript/lib/lib.es2016.array.include.d.ts", + "../node_modules/typescript/lib/lib.es2016.d.ts", + "../node_modules/typescript/lib/lib.es2017.d.ts", + "../node_modules/typescript/lib/lib.es2017.full.d.ts", + "../node_modules/typescript/lib/lib.es2017.intl.d.ts", + "../node_modules/typescript/lib/lib.es2017.object.d.ts", + "../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts", + "../node_modules/typescript/lib/lib.es2017.string.d.ts", + "../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts", + "../node_modules/typescript/lib/lib.es5.d.ts", + "../node_modules/typescript/lib/lib.scripthost.d.ts", + "../node_modules/typescript/lib/lib.webworker.importscripts.d.ts", + "../src/app.ts", + "../src/bin/www.ts", + "../src/controllers/api.ts", + "../src/interfaces/projectProperties.ts", + "../src/models/api.ts", + "../src/newsriver.ts", + "../src/rcdata.ts", + "../src/routes/api.ts", + "../src/updater.ts" + ] + }, + "version": "3.9.3" +} \ No newline at end of file diff --git a/functions/lib/views/error.pug b/functions/lib/views/error.pug new file mode 100644 index 0000000..3b25cfa --- /dev/null +++ b/functions/lib/views/error.pug @@ -0,0 +1,6 @@ +extends layout + +block content + h1= message + h2= error.status + pre #{error.stack} diff --git a/functions/lib/views/layout.pug b/functions/lib/views/layout.pug new file mode 100644 index 0000000..6dc17d8 --- /dev/null +++ b/functions/lib/views/layout.pug @@ -0,0 +1,7 @@ +doctype html +html + head + title= title + link(rel='stylesheet', href='/stylesheets/style.css') + body + block content diff --git a/functions/package-lock.json b/functions/package-lock.json new file mode 100644 index 0000000..b486623 --- /dev/null +++ b/functions/package-lock.json @@ -0,0 +1,2875 @@ +{ + "name": "functions", + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.8.3" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz", + "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==", + "dev": true + }, + "@babel/highlight": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", + "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.9.0", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.1.tgz", + "integrity": "sha512-AUTksaz3FqugBkbTZ1i+lDLG5qy8hIzCaAxEtttU6C0BtZZU9pkNZtWSVAht4EW9kl46YBiyTGMp9xTTGqViNg==" + }, + "@babel/types": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.1.tgz", + "integrity": "sha512-L2yqUOpf3tzlW9GVuipgLEcZxnO+96SzR6fjXMuxxNkIgFJ5+07mHCZ+HkHqaeZu8+3LKnNJJ1bKbjBETQAsrA==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.1", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", + "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==" + } + } + }, + "@firebase/app-types": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.6.1.tgz", + "integrity": "sha512-L/ZnJRAq7F++utfuoTKX4CLBG5YR7tFO3PLzG1/oXXKEezJ0kRL3CMRoueBEmTCzVb/6SIs2Qlaw++uDgi5Xyg==" + }, + "@firebase/auth-interop-types": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.1.5.tgz", + "integrity": "sha512-88h74TMQ6wXChPA6h9Q3E1Jg6TkTHep2+k63OWg3s0ozyGVMeY+TTOti7PFPzq5RhszQPQOoCi59es4MaRvgCw==" + }, + "@firebase/component": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.1.12.tgz", + "integrity": "sha512-03w800MxR/EW1m7N0Q46WNcngwdDIHDWpFPHTdbZEI6U/HuLks5RJQlBxWqb1P73nYPkN8YP3U8gTdqrDpqY3Q==", + "requires": { + "@firebase/util": "0.2.47", + "tslib": "1.11.1" + } + }, + "@firebase/database": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.6.3.tgz", + "integrity": "sha512-gHoCISHQVLoq+rGu+PorYxMkhsjhXov3ocBxz/0uVdznNhrbKkAZaEKF+dIAsUPDlwSYeZuwWuik7xcV3DtRaw==", + "requires": { + "@firebase/auth-interop-types": "0.1.5", + "@firebase/component": "0.1.12", + "@firebase/database-types": "0.5.1", + "@firebase/logger": "0.2.4", + "@firebase/util": "0.2.47", + "faye-websocket": "0.11.3", + "tslib": "1.11.1" + } + }, + "@firebase/database-types": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.5.1.tgz", + "integrity": "sha512-onQxom1ZBYBJ648w/VNRzUewovEDAH7lvnrrpCd69ukkyrMk6rGEO/PQ9BcNEbhlNtukpsqRS0oNOFlHs0FaSA==", + "requires": { + "@firebase/app-types": "0.6.1" + } + }, + "@firebase/logger": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.2.4.tgz", + "integrity": "sha512-akHkOU7izYB1okp/B5sxClGjjw6KvZdSHyjNM5pKd67Zg5W6PsbkI/GFNv21+y6LkUkJwDRbdeDgJoYXWT3mMA==" + }, + "@firebase/util": { + "version": "0.2.47", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-0.2.47.tgz", + "integrity": "sha512-RjcIvcfswyxYhf0OMXod+qeI/933wl9FGLIszf0/O1yMZ/s8moXcse7xnOpMjmQPRLB9vHzCMoxW5X90kKg/bQ==", + "requires": { + "tslib": "1.11.1" + } + }, + "@google-cloud/common": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-2.4.0.tgz", + "integrity": "sha512-zWFjBS35eI9leAHhjfeOYlK5Plcuj/77EzstnrJIZbKgF/nkqjcQuGiMCpzCwOfPyUbz8ZaEOYgbHa759AKbjg==", + "optional": true, + "requires": { + "@google-cloud/projectify": "^1.0.0", + "@google-cloud/promisify": "^1.0.0", + "arrify": "^2.0.0", + "duplexify": "^3.6.0", + "ent": "^2.2.0", + "extend": "^3.0.2", + "google-auth-library": "^5.5.0", + "retry-request": "^4.0.0", + "teeny-request": "^6.0.0" + } + }, + "@google-cloud/firestore": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@google-cloud/firestore/-/firestore-3.8.0.tgz", + "integrity": "sha512-FEv52jhsRAV/0nHaMy0PAmExYkYRLDoOXRB+85euaC72HZU8aV/bgOi1OvAeiD+ogoO39ilxiHQh5PaRHIolug==", + "optional": true, + "requires": { + "deep-equal": "^2.0.0", + "functional-red-black-tree": "^1.0.1", + "google-gax": "^1.13.0", + "readable-stream": "^3.4.0", + "through2": "^3.0.0" + } + }, + "@google-cloud/paginator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-2.0.3.tgz", + "integrity": "sha512-kp/pkb2p/p0d8/SKUu4mOq8+HGwF8NPzHWkj+VKrIPQPyMRw8deZtrO/OcSiy9C/7bpfU5Txah5ltUNfPkgEXg==", + "optional": true, + "requires": { + "arrify": "^2.0.0", + "extend": "^3.0.2" + } + }, + "@google-cloud/projectify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-1.0.4.tgz", + "integrity": "sha512-ZdzQUN02eRsmTKfBj9FDL0KNDIFNjBn/d6tHQmA/+FImH5DO6ZV8E7FzxMgAUiVAUq41RFAkb25p1oHOZ8psfg==", + "optional": true + }, + "@google-cloud/promisify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-1.0.4.tgz", + "integrity": "sha512-VccZDcOql77obTnFh0TbNED/6ZbbmHDf8UMNnzO1d5g9V0Htfm4k5cllY8P1tJsRKC3zWYGRLaViiupcgVjBoQ==", + "optional": true + }, + "@google-cloud/storage": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-4.7.0.tgz", + "integrity": "sha512-f0guAlbeg7Z0m3gKjCfBCu7FG9qS3M3oL5OQQxlvGoPtK7/qg3+W+KQV73O2/sbuS54n0Kh2mvT5K2FWzF5vVQ==", + "optional": true, + "requires": { + "@google-cloud/common": "^2.1.1", + "@google-cloud/paginator": "^2.0.0", + "@google-cloud/promisify": "^1.0.0", + "arrify": "^2.0.0", + "compressible": "^2.0.12", + "concat-stream": "^2.0.0", + "date-and-time": "^0.13.0", + "duplexify": "^3.5.0", + "extend": "^3.0.2", + "gaxios": "^3.0.0", + "gcs-resumable-upload": "^2.2.4", + "hash-stream-validation": "^0.2.2", + "mime": "^2.2.0", + "mime-types": "^2.0.8", + "onetime": "^5.1.0", + "p-limit": "^2.2.0", + "pumpify": "^2.0.0", + "readable-stream": "^3.4.0", + "snakeize": "^0.1.0", + "stream-events": "^1.0.1", + "through2": "^3.0.0", + "xdg-basedir": "^4.0.0" + } + }, + "@grpc/grpc-js": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.0.4.tgz", + "integrity": "sha512-Qawt6HUrEmljQMPWnLnIXpcjelmtIAydi3M9awiG02WWJ1CmIvFEx4IOC1EsWUWUlabOGksRbpfvoIeZKFTNXw==", + "optional": true, + "requires": { + "google-auth-library": "^6.0.0", + "semver": "^6.2.0" + }, + "dependencies": { + "google-auth-library": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-6.0.0.tgz", + "integrity": "sha512-uLydy1t6SHN/EvYUJrtN3GCHFrnJ0c8HJjOxXiGjoTuYHIoCUT3jVxnzmjHwVnSdkfE9Akasm2rM6qG1COTXfQ==", + "optional": true, + "requires": { + "arrify": "^2.0.0", + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "fast-text-encoding": "^1.0.0", + "gaxios": "^3.0.0", + "gcp-metadata": "^4.0.0", + "gtoken": "^5.0.0", + "jws": "^4.0.0", + "lru-cache": "^5.0.0" + } + } + } + }, + "@grpc/proto-loader": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.5.4.tgz", + "integrity": "sha512-HTM4QpI9B2XFkPz7pjwMyMgZchJ93TVkL3kWPW8GDMDKYxsMnmf4w2TNMJK7+KNiYHS5cJrCEAFlF+AwtXWVPA==", + "optional": true, + "requires": { + "lodash.camelcase": "^4.3.0", + "protobufjs": "^6.8.6" + } + }, + "@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=", + "optional": true + }, + "@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "optional": true + }, + "@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "optional": true + }, + "@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=", + "optional": true + }, + "@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", + "optional": true, + "requires": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=", + "optional": true + }, + "@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=", + "optional": true + }, + "@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=", + "optional": true + }, + "@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=", + "optional": true + }, + "@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=", + "optional": true + }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "optional": true + }, + "@types/body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==", + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.33", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.33.tgz", + "integrity": "sha512-2+FrkXY4zllzTNfJth7jOqEHC+enpLeGslEhpnTAkg21GkRrWV4SsAtqchtT4YS9/nODBU2/ZfsBY2X4J/dX7A==", + "requires": { + "@types/node": "*" + } + }, + "@types/express": { + "version": "4.17.3", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.3.tgz", + "integrity": "sha512-I8cGRJj3pyOLs/HndoP+25vOqhqWkAZsWMEmq1qXy/b/M3ppufecUwaK2/TVDVxcV61/iSdhykUjQQ2DLSrTdg==", + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.8", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.8.tgz", + "integrity": "sha512-1SJZ+R3Q/7mLkOD9ewCBDYD2k0WyZQtWYqF/2VvoNN2/uhI49J9CDN4OAm+wGMA0DbArA4ef27xl4+JwMtGggw==", + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "@types/fs-extra": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.1.tgz", + "integrity": "sha512-TcUlBem321DFQzBNuz8p0CLLKp0VvF/XH9E4KHNmgwyp4E3AfgI5cjiIVZWlbfThBop2qxFIh4+LeY6hVWWZ2w==", + "optional": true, + "requires": { + "@types/node": "*" + } + }, + "@types/lodash": { + "version": "4.14.152", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.152.tgz", + "integrity": "sha512-Vwf9YF2x1GE3WNeUMjT5bTHa2DqgUo87ocdgTScupY2JclZ5Nn7W2RLM/N0+oreexUk8uaVugR81NnTY/jNNXg==", + "dev": true + }, + "@types/long": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", + "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==", + "optional": true + }, + "@types/mime": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.2.tgz", + "integrity": "sha512-4kPlzbljFcsttWEq6aBW0OZe6BDajAmyvr2xknBG92tejQnvdGtT9+kXSZ580DqpxY9qG2xeQVF9Dq0ymUTo5Q==" + }, + "@types/node": { + "version": "8.10.61", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.61.tgz", + "integrity": "sha512-l+zSbvT8TPRaCxL1l9cwHCb0tSqGAGcjPJFItGGYat5oCTiq1uQQKYg5m7AF1mgnEBzFXGLJ2LRmNjtreRX76Q==" + }, + "@types/qs": { + "version": "6.9.3", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.3.tgz", + "integrity": "sha512-7s9EQWupR1fTc2pSMtXRQ9w9gLOcrJn+h7HOXw4evxyvVqMi4f+q7d2tnFe3ng3SNHjtK+0EzGMGFUQX4/AQRA==" + }, + "@types/range-parser": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", + "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==" + }, + "@types/serve-static": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.4.tgz", + "integrity": "sha512-jTDt0o/YbpNwZbQmE/+2e+lfjJEJJR0I3OFaKQKPWkASkCoW3i6fsUnqudSMcNAfbtmADGu8f4MV4q+GqULmug==", + "requires": { + "@types/express-serve-static-core": "*", + "@types/mime": "*" + } + }, + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "optional": true, + "requires": { + "event-target-shim": "^5.0.0" + } + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.2.0.tgz", + "integrity": "sha512-apwXVmYVpQ34m/i71vrApRrRKCWQnZZF1+npOD0WV5xZFfwWOmKGQ2RWlfdy9vWITsenisM8M0Qeq8agcFHNiQ==" + }, + "agent-base": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.0.tgz", + "integrity": "sha512-j1Q7cSCqN+AwrmDd+pzgqc0/NpC655x2bUf5ZjRIO77DcNBFmh+OgRNzF6OKdCC9RSCb19fGd99+bhXFdkRNqw==", + "optional": true, + "requires": { + "debug": "4" + } + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "array-filter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", + "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=", + "optional": true + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "optional": true + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, + "assert-never": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.2.1.tgz", + "integrity": "sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==" + }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" + }, + "available-typed-arrays": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz", + "integrity": "sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ==", + "optional": true, + "requires": { + "array-filter": "^1.0.0" + } + }, + "axios": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz", + "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==", + "requires": { + "follow-redirects": "1.5.10" + } + }, + "babel-walk": { + "version": "3.0.0-canary-5", + "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", + "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", + "requires": { + "@babel/types": "^7.9.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", + "optional": true + }, + "basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "requires": { + "safe-buffer": "5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "bignumber.js": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-7.2.1.tgz", + "integrity": "sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==", + "optional": true + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "optional": true + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, + "chai": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", + "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.0", + "type-detect": "^4.0.5" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "character-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", + "integrity": "sha1-x84o821LzZdE5f/CxfzeHHMmH8A=", + "requires": { + "is-regex": "^1.0.3" + } + }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=" + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "optional": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "optional": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "optional": true, + "requires": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + } + }, + "constantinople": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", + "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", + "requires": { + "@babel/parser": "^7.6.0", + "@babel/types": "^7.6.1" + } + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "requires": { + "safe-buffer": "5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "optional": true + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "cross-env": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.2.tgz", + "integrity": "sha512-KZP/bMEOJEDCkDQAyRhu3RL2ZO/SUVrxQVI0G3YEQ+OLbRA3c6zgixe8Mq8a/z7+HKlNEjo8oiLUs8iRijY2Rw==", + "requires": { + "cross-spawn": "^7.0.1" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "optional": true + }, + "date-and-time": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/date-and-time/-/date-and-time-0.13.1.tgz", + "integrity": "sha512-/Uge9DJAT+s+oAcDxtBhyR8+sKjUnZbYmyhbmWjTHNtX7B7oWD8YyYdeXcBRbwSj6hVvj+IQegJam7m7czhbFw==", + "optional": true + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "requires": { + "type-detect": "^4.0.0" + } + }, + "deep-equal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.0.3.tgz", + "integrity": "sha512-Spqdl4H+ky45I9ByyJtXteOm9CaIrPmnIPmOhrkKGNYWeDgCvJ8jNYVCTjChxW4FqGuZnLHADc8EKRMX6+CgvA==", + "optional": true, + "requires": { + "es-abstract": "^1.17.5", + "es-get-iterator": "^1.1.0", + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.2", + "is-regex": "^1.0.5", + "isarray": "^2.0.5", + "object-is": "^1.1.2", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "regexp.prototype.flags": "^1.3.0", + "side-channel": "^1.0.2", + "which-boxed-primitive": "^1.0.1", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.2" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "^1.0.12" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "dicer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.3.0.tgz", + "integrity": "sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==", + "requires": { + "streamsearch": "0.1.2" + } + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "doctypes": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", + "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=" + }, + "dot-prop": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz", + "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==", + "optional": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "optional": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "optional": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "optional": true + } + } + }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "optional": true, + "requires": { + "once": "^1.4.0" + } + }, + "ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", + "optional": true + }, + "es-abstract": { + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", + "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + } + }, + "es-get-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.0.tgz", + "integrity": "sha512-UfrmHuWQlNMTs35e1ypnvikg6jCz3SK8v8ImvmDsh36fCVUR1MqoFDiyn0/k52C8NqO3YsO8Oe0azeesNuqSsQ==", + "optional": true, + "requires": { + "es-abstract": "^1.17.4", + "has-symbols": "^1.0.1", + "is-arguments": "^1.0.4", + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-string": "^1.0.5", + "isarray": "^2.0.5" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "optional": true + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "optional": true + }, + "fast-text-encoding": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.2.tgz", + "integrity": "sha512-5rQdinSsycpzvAoHga2EDn+LRX1d5xLFsuNG0Kg61JrAT/tASXcLL0nf/33v+sAxlQcfYmWbTURa1mmAf55jGw==", + "optional": true + }, + "faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "firebase-admin": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/firebase-admin/-/firebase-admin-8.12.1.tgz", + "integrity": "sha512-DZ4Q7QQJYaO2BhnhZLrhL+mGRTCLS5WrxjbJtuKGmbKRBepwMhx++EQA5yhnGnIXgDHnp5SrZnVKygNdXtH8BQ==", + "requires": { + "@firebase/database": "^0.6.0", + "@google-cloud/firestore": "^3.0.0", + "@google-cloud/storage": "^4.1.2", + "@types/node": "^8.10.59", + "dicer": "^0.3.0", + "jsonwebtoken": "8.1.0", + "node-forge": "0.7.4" + } + }, + "firebase-functions": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/firebase-functions/-/firebase-functions-3.7.0.tgz", + "integrity": "sha512-+ROj2Gs2/KyM+T8jYo7AKaHynFsN49sXbgZMll3zuGa9/8oiDsXp9e1Iy2JMkFmSZg67jeYw5Ue2OSpz0XiqFQ==", + "requires": { + "@types/express": "4.17.3", + "cors": "^2.8.5", + "express": "^4.17.1", + "lodash": "^4.17.14" + } + }, + "firebase-functions-helper": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/firebase-functions-helper/-/firebase-functions-helper-0.7.5.tgz", + "integrity": "sha512-iZripWqrsbBeFq/UP8ycuYl7J7fuQVsjMAnvV3tahBTEPleSk44nUJDo6XRxzQos3gNvPupw2+slAXbrHVtBkg==", + "requires": { + "chai": "^4.2.0", + "firebase-admin": "^8.9.0" + } + }, + "firebase-functions-test": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/firebase-functions-test/-/firebase-functions-test-0.2.1.tgz", + "integrity": "sha512-+ZaNrDoRVy0ar4NGtrYbqVTsnitL3/Ud5yC7ElZUkX3956j+AzPCcrsCfa+5GJnpnVODXkMKpw9AySFJ/12nvA==", + "dev": true, + "requires": { + "@types/lodash": "^4.14.104", + "lodash": "^4.17.5" + } + }, + "follow-redirects": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", + "requires": { + "debug": "=3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "optional": true + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "optional": true + }, + "gaxios": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-3.0.3.tgz", + "integrity": "sha512-PkzQludeIFhd535/yucALT/Wxyj/y2zLyrMwPcJmnLHDugmV49NvAi/vb+VUq/eWztATZCNcb8ue+ywPG+oLuw==", + "optional": true, + "requires": { + "abort-controller": "^3.0.0", + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.3.0" + } + }, + "gcp-metadata": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.1.0.tgz", + "integrity": "sha512-r57SV28+olVsflPlKyVig3Muo/VDlcsObMtvDGOEtEJXj+DDE8bEl0coIkXh//hbkSDTvo+f5lbihZOndYXQQQ==", + "optional": true, + "requires": { + "gaxios": "^3.0.0", + "json-bigint": "^0.3.0" + } + }, + "gcs-resumable-upload": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/gcs-resumable-upload/-/gcs-resumable-upload-2.3.3.tgz", + "integrity": "sha512-sf896I5CC/1AxeaGfSFg3vKMjUq/r+A3bscmVzZm10CElyRanN0XwPu/MxeIO4LSP+9uF6yKzXvNsaTsMXUG6Q==", + "optional": true, + "requires": { + "abort-controller": "^3.0.0", + "configstore": "^5.0.0", + "gaxios": "^2.0.0", + "google-auth-library": "^5.0.0", + "pumpify": "^2.0.0", + "stream-events": "^1.0.4" + }, + "dependencies": { + "gaxios": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-2.3.4.tgz", + "integrity": "sha512-US8UMj8C5pRnao3Zykc4AAVr+cffoNKRTg9Rsf2GiuZCW69vgJj38VK2PzlPuQU73FZ/nTk9/Av6/JGcE1N9vA==", + "optional": true, + "requires": { + "abort-controller": "^3.0.0", + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.3.0" + } + } + } + }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=" + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "google-auth-library": { + "version": "5.10.1", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-5.10.1.tgz", + "integrity": "sha512-rOlaok5vlpV9rSiUu5EpR0vVpc+PhN62oF4RyX/6++DG1VsaulAFEMlDYBLjJDDPI6OcNOCGAKy9UVB/3NIDXg==", + "optional": true, + "requires": { + "arrify": "^2.0.0", + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "fast-text-encoding": "^1.0.0", + "gaxios": "^2.1.0", + "gcp-metadata": "^3.4.0", + "gtoken": "^4.1.0", + "jws": "^4.0.0", + "lru-cache": "^5.0.0" + }, + "dependencies": { + "gaxios": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-2.3.4.tgz", + "integrity": "sha512-US8UMj8C5pRnao3Zykc4AAVr+cffoNKRTg9Rsf2GiuZCW69vgJj38VK2PzlPuQU73FZ/nTk9/Av6/JGcE1N9vA==", + "optional": true, + "requires": { + "abort-controller": "^3.0.0", + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.3.0" + } + }, + "gcp-metadata": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-3.5.0.tgz", + "integrity": "sha512-ZQf+DLZ5aKcRpLzYUyBS3yo3N0JSa82lNDO8rj3nMSlovLcz2riKFBsYgDzeXcv75oo5eqB2lx+B14UvPoCRnA==", + "optional": true, + "requires": { + "gaxios": "^2.1.0", + "json-bigint": "^0.3.0" + } + }, + "google-p12-pem": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-2.0.4.tgz", + "integrity": "sha512-S4blHBQWZRnEW44OcR7TL9WR+QCqByRvhNDZ/uuQfpxywfupikf/miba8js1jZi6ZOGv5slgSuoshCWh6EMDzg==", + "optional": true, + "requires": { + "node-forge": "^0.9.0" + } + }, + "gtoken": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-4.1.4.tgz", + "integrity": "sha512-VxirzD0SWoFUo5p8RDP8Jt2AGyOmyYcT/pOUgDKJCK+iSw0TMqwrVfY37RXTNmoKwrzmDHSk0GMT9FsgVmnVSA==", + "optional": true, + "requires": { + "gaxios": "^2.1.0", + "google-p12-pem": "^2.0.0", + "jws": "^4.0.0", + "mime": "^2.2.0" + } + }, + "node-forge": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.1.tgz", + "integrity": "sha512-G6RlQt5Sb4GMBzXvhfkeFmbqR6MzhtnT7VTHuLadjkii3rdYHNdw0m8zA4BTxVIh68FicCQ2NSUANpsqkr9jvQ==", + "optional": true + } + } + }, + "google-gax": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-1.15.3.tgz", + "integrity": "sha512-3JKJCRumNm3x2EksUTw4P1Rad43FTpqrtW9jzpf3xSMYXx+ogaqTM1vGo7VixHB4xkAyATXVIa3OcNSh8H9zsQ==", + "optional": true, + "requires": { + "@grpc/grpc-js": "~1.0.3", + "@grpc/proto-loader": "^0.5.1", + "@types/fs-extra": "^8.0.1", + "@types/long": "^4.0.0", + "abort-controller": "^3.0.0", + "duplexify": "^3.6.0", + "google-auth-library": "^5.0.0", + "is-stream-ended": "^0.1.4", + "lodash.at": "^4.6.0", + "lodash.has": "^4.5.2", + "node-fetch": "^2.6.0", + "protobufjs": "^6.8.9", + "retry-request": "^4.0.0", + "semver": "^6.0.0", + "walkdir": "^0.4.0" + } + }, + "google-p12-pem": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-3.0.1.tgz", + "integrity": "sha512-VlQgtozgNVVVcYTXS36eQz4PXPt9gIPqLOhHN0QiV6W6h4qSCNVKPtKC5INtJsaHHF2r7+nOIa26MJeJMTaZEQ==", + "optional": true, + "requires": { + "node-forge": "^0.9.0" + }, + "dependencies": { + "node-forge": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.1.tgz", + "integrity": "sha512-G6RlQt5Sb4GMBzXvhfkeFmbqR6MzhtnT7VTHuLadjkii3rdYHNdw0m8zA4BTxVIh68FicCQ2NSUANpsqkr9jvQ==", + "optional": true + } + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "optional": true + }, + "gtoken": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-5.0.1.tgz", + "integrity": "sha512-33w4FNDkUcyIOq/TqyC+drnKdI4PdXmWp9lZzssyEQKuvu9ZFN3KttaSnDKo52U3E51oujVGop93mKxmqO8HHg==", + "optional": true, + "requires": { + "gaxios": "^3.0.0", + "google-p12-pem": "^3.0.0", + "jws": "^4.0.0", + "mime": "^2.2.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + }, + "hash-stream-validation": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/hash-stream-validation/-/hash-stream-validation-0.2.3.tgz", + "integrity": "sha512-OEohGLoUOh+bwsIpHpdvhIXFyRGjeLqJbT8Yc5QTZPbRM7LKywagTQxnX/6mghLDOrD9YGz88hy5mLN2eKflYQ==", + "optional": true, + "requires": { + "through2": "^2.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "optional": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "optional": true + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "optional": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + } + } + }, + "http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "http-parser-js": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.2.tgz", + "integrity": "sha512-opCO9ASqg5Wy2FNo7A0sxy71yGbbkJJXLdgMK04Tcypw9jr2MgWbyubb0+WdmDmGnFflO7fRbqbaihh/ENDlRQ==" + }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "optional": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "optional": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "optional": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", + "optional": true + }, + "is-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.0.tgz", + "integrity": "sha512-t5mGUXC/xRheCK431ylNiSkGGpBp8bHENBcENTkDT6ppwPzEVxNGZRvgvmOEfbWkFhA7D2GEuE2mmQTr78sl2g==", + "optional": true + }, + "is-boolean-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.1.tgz", + "integrity": "sha512-TqZuVwa/sppcrhUCAYkGBk7w0yxfQQnxq28fjkO53tnK9FQXmdwz2JS5+GjsWQ6RByES1K40nI+yDic5c9/aAQ==", + "optional": true + }, + "is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==" + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" + }, + "is-expression": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", + "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", + "requires": { + "acorn": "^7.1.1", + "object-assign": "^4.1.1" + } + }, + "is-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.1.tgz", + "integrity": "sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw==", + "optional": true + }, + "is-number-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", + "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", + "optional": true + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "optional": true + }, + "is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" + }, + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "requires": { + "has": "^1.0.3" + } + }, + "is-set": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.1.tgz", + "integrity": "sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA==", + "optional": true + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "optional": true + }, + "is-stream-ended": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz", + "integrity": "sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==", + "optional": true + }, + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "optional": true + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-typed-array": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.3.tgz", + "integrity": "sha512-BSYUBOK/HJibQ30wWkWold5txYwMUXQct9YHAQJr8fSwvZoiglcqB0pd7vEN23+Tsi9IUEjztdOSzl4qLVYGTQ==", + "optional": true, + "requires": { + "available-typed-arrays": "^1.0.0", + "es-abstract": "^1.17.4", + "foreach": "^2.0.5", + "has-symbols": "^1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "optional": true + }, + "is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "optional": true + }, + "is-weakset": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.1.tgz", + "integrity": "sha512-pi4vhbhVHGLxohUw7PhGsueT4vRGFoXhP7+RGN0jKIv9+8PWYCQTqtADngrxOm2g46hoH0+g8uZZBzMrvVGDmw==", + "optional": true + }, + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "optional": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "js-stringify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", + "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds=" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "json-bigint": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-0.3.0.tgz", + "integrity": "sha1-DM2RLEuCcNBfBW+9E4FLU9OCWx4=", + "optional": true, + "requires": { + "bignumber.js": "^7.0.0" + } + }, + "jsonwebtoken": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.1.0.tgz", + "integrity": "sha1-xjl80uX9WD1lwAeoPce7eOaYK4M=", + "requires": { + "jws": "^3.1.4", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.0.0", + "xtend": "^4.0.1" + }, + "dependencies": { + "jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + } + } + }, + "jstransformer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", + "integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=", + "requires": { + "is-promise": "^2.0.0", + "promise": "^7.0.1" + } + }, + "jwa": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "optional": true, + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "optional": true, + "requires": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + }, + "lodash.at": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.at/-/lodash.at-4.6.0.tgz", + "integrity": "sha1-k83OZk8KGZTqM9181A4jr9EbD/g=", + "optional": true + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", + "optional": true + }, + "lodash.has": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/lodash.has/-/lodash.has-4.5.2.tgz", + "integrity": "sha1-0Z9NwQlQWMzL4rDN9O4P5Ko3yGI=", + "optional": true + }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" + }, + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", + "optional": true + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "optional": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "optional": true, + "requires": { + "semver": "^6.0.0" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "mime": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.5.tgz", + "integrity": "sha512-3hQhEUF027BuxZjQA3s7rIv/7VCQPa27hN9u9g87sEkWaKwQPuXOkVKtOeiyUrnWqTDiOs8Ed2rwg733mB0R5w==", + "optional": true + }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "requires": { + "mime-db": "1.44.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "requires": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "node-fetch": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", + "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==" + }, + "node-forge": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.4.tgz", + "integrity": "sha512-8Df0906+tq/omxuCZD6PqhPaQDYuyJ1d+VITgxoIA8zvQd1ru+nMJcDChHH324MWitIgbVkAkQoGEEVJNpn/PA==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==" + }, + "object-is": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz", + "integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==", + "optional": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", + "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", + "optional": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "optional": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "optional": true + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "pathval": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "optional": true + }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "requires": { + "asap": "~2.0.3" + } + }, + "protobufjs": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.9.0.tgz", + "integrity": "sha512-LlGVfEWDXoI/STstRDdZZKb/qusoAWUnmLg9R8OLSO473mBLWHowx8clbX5/+mKDEI+v7GzjoK9tRPZMMcoTrg==", + "optional": true, + "requires": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.1", + "@types/node": "^13.7.0", + "long": "^4.0.0" + }, + "dependencies": { + "@types/node": { + "version": "13.13.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.9.tgz", + "integrity": "sha512-EPZBIGed5gNnfWCiwEIwTE2Jdg4813odnG8iNPMQGrqVxrI+wL68SPtPeCX+ZxGBaA6pKAVc6jaKgP/Q0QzfdQ==", + "optional": true + } + } + }, + "proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + } + }, + "pug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.0.tgz", + "integrity": "sha512-inmsJyFBSHZaiGLaguoFgJGViX0If6AcfcElimvwj9perqjDpUpw79UIEDZbWFmoGVidh08aoE+e8tVkjVJPCw==", + "requires": { + "pug-code-gen": "^3.0.0", + "pug-filters": "^4.0.0", + "pug-lexer": "^5.0.0", + "pug-linker": "^4.0.0", + "pug-load": "^3.0.0", + "pug-parser": "^6.0.0", + "pug-runtime": "^3.0.0", + "pug-strip-comments": "^2.0.0" + } + }, + "pug-attrs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", + "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", + "requires": { + "constantinople": "^4.0.1", + "js-stringify": "^1.0.2", + "pug-runtime": "^3.0.0" + } + }, + "pug-code-gen": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.1.tgz", + "integrity": "sha512-xJIGvmXTQlkJllq6hqxxjRWcay2F9CU69TuAuiVZgHK0afOhG5txrQOcZyaPHBvSWCU/QQOqEp5XCH94rRZpBQ==", + "requires": { + "constantinople": "^4.0.1", + "doctypes": "^1.1.0", + "js-stringify": "^1.0.2", + "pug-attrs": "^3.0.0", + "pug-error": "^2.0.0", + "pug-runtime": "^3.0.0", + "void-elements": "^3.1.0", + "with": "^7.0.0" + } + }, + "pug-error": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.0.0.tgz", + "integrity": "sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==" + }, + "pug-filters": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", + "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", + "requires": { + "constantinople": "^4.0.1", + "jstransformer": "1.0.0", + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0", + "resolve": "^1.15.1" + } + }, + "pug-lexer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.0.tgz", + "integrity": "sha512-52xMk8nNpuyQ/M2wjZBN5gXQLIylaGkAoTk5Y1pBhVqaopaoj8Z0iVzpbFZAqitL4RHNVDZRnJDsqEYe99Ti0A==", + "requires": { + "character-parser": "^2.2.0", + "is-expression": "^4.0.0", + "pug-error": "^2.0.0" + } + }, + "pug-linker": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", + "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", + "requires": { + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0" + } + }, + "pug-load": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", + "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", + "requires": { + "object-assign": "^4.1.1", + "pug-walk": "^2.0.0" + } + }, + "pug-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", + "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", + "requires": { + "pug-error": "^2.0.0", + "token-stream": "1.0.0" + } + }, + "pug-runtime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.0.tgz", + "integrity": "sha512-GoEPcmQNnaTsePEdVA05bDpY+Op5VLHKayg08AQiqJBWU/yIaywEYv7TetC5dEQS3fzBBoyb2InDcZEg3mPTIA==" + }, + "pug-strip-comments": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", + "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", + "requires": { + "pug-error": "^2.0.0" + } + }, + "pug-walk": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", + "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==" + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "optional": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-2.0.1.tgz", + "integrity": "sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==", + "optional": true, + "requires": { + "duplexify": "^4.1.1", + "inherits": "^2.0.3", + "pump": "^3.0.0" + }, + "dependencies": { + "duplexify": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.1.tgz", + "integrity": "sha512-DY3xVEmVHTv1wSzKNbwoU6nVjzI369Y6sPoqfYr0/xlx3IdX2n94xIszTcjPO8W8ZIv0Wb0PXNcjuZyT4wiICA==", + "optional": true, + "requires": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.0" + } + } + } + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "optional": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "regexp.prototype.flags": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", + "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "optional": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } + }, + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "requires": { + "path-parse": "^1.0.6" + } + }, + "retry-request": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-4.1.1.tgz", + "integrity": "sha512-BINDzVtLI2BDukjWmjAIRZ0oglnCAkpP2vQjM3jdLhmT62h0xnQgciPwBRDAvHqpkPT2Wo1XuUyLyn6nbGrZQQ==", + "optional": true, + "requires": { + "debug": "^4.1.1", + "through2": "^3.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "optional": true + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "side-channel": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.2.tgz", + "integrity": "sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA==", + "optional": true, + "requires": { + "es-abstract": "^1.17.0-next.1", + "object-inspect": "^1.7.0" + } + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "optional": true + }, + "snakeize": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/snakeize/-/snakeize-0.1.0.tgz", + "integrity": "sha1-EMCI2LWOsHazIpu1oE4jLOEmQi0=", + "optional": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "stream-events": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", + "integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==", + "optional": true, + "requires": { + "stubs": "^3.0.0" + } + }, + "stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "optional": true + }, + "streamsearch": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", + "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" + }, + "string.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "string.prototype.trimleft": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz", + "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5", + "string.prototype.trimstart": "^1.0.0" + } + }, + "string.prototype.trimright": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz", + "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5", + "string.prototype.trimend": "^1.0.0" + } + }, + "string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "optional": true + } + } + }, + "stubs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", + "integrity": "sha1-6NK6H6nJBXAwPAMLaQD31fiavls=", + "optional": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "teeny-request": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-6.0.3.tgz", + "integrity": "sha512-TZG/dfd2r6yeji19es1cUIwAlVD8y+/svB1kAC2Y0bjEyysrfbO8EZvJBRwIE6WkwmUoB7uvWLwTIhJbMXZ1Dw==", + "optional": true, + "requires": { + "http-proxy-agent": "^4.0.0", + "https-proxy-agent": "^5.0.0", + "node-fetch": "^2.2.0", + "stream-events": "^1.0.5", + "uuid": "^7.0.0" + } + }, + "through2": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz", + "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==", + "optional": true, + "requires": { + "readable-stream": "2 || 3" + } + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "token-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", + "integrity": "sha1-zCAOqyYT9BZtJ/+a/HylbUnfbrQ=" + }, + "tslib": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" + }, + "tslint": { + "version": "5.20.1", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.20.1.tgz", + "integrity": "sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.3.0", + "commander": "^2.12.1", + "diff": "^4.0.1", + "glob": "^7.1.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.8.0", + "tsutils": "^2.29.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "tsutils": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "optional": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "optional": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typescript": { + "version": "3.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.3.tgz", + "integrity": "sha512-D/wqnB2xzNFIcoBG9FG8cXRDjiqSTbG2wd8DMZeQyJlP1vfTkIxH4GKveWaEBYySKIg+USu+E+EDIR47SqnaMQ==", + "dev": true + }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "optional": true, + "requires": { + "crypto-random-string": "^2.0.0" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "optional": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "uuid": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", + "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==", + "optional": true + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "void-elements": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha1-YU9/v42AHwu18GYfWy9XhXUOTwk=" + }, + "walkdir": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.4.1.tgz", + "integrity": "sha512-3eBwRyEln6E1MSzcxcVpQIhRG8Q1jLvEqRmCZqS3dsfXEDR/AhOF4d+jHg1qvDCpYaVRZjENPQyrVxAkQqxPgQ==", + "optional": true + }, + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", + "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==" + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.1.tgz", + "integrity": "sha512-7BT4TwISdDGBgaemWU0N0OU7FeAEJ9Oo2P1PHRm/FCWoEi2VLWC9b6xvxAA3C/NMpxg3HXVgi0sMmGbNUbNepQ==", + "optional": true, + "requires": { + "is-bigint": "^1.0.0", + "is-boolean-object": "^1.0.0", + "is-number-object": "^1.0.3", + "is-string": "^1.0.4", + "is-symbol": "^1.0.2" + } + }, + "which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "optional": true, + "requires": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + } + }, + "which-typed-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.2.tgz", + "integrity": "sha512-KT6okrd1tE6JdZAy3o2VhMoYPh3+J6EMZLyrxBQsZflI1QCZIxMrIYLkosd8Twf+YfknVIHmYQPgJt238p8dnQ==", + "optional": true, + "requires": { + "available-typed-arrays": "^1.0.2", + "es-abstract": "^1.17.5", + "foreach": "^2.0.5", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.1", + "is-typed-array": "^1.1.3" + } + }, + "with": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/with/-/with-7.0.1.tgz", + "integrity": "sha512-TpHxhlaRS5mNJbCDXqbDJB4qhyV8zQUPytY3o3cCb6t2m13Qw+vsWFvJCBBIkWILRjNlmlnvd/0AW0dPaO7n/w==", + "requires": { + "@babel/parser": "^7.9.6", + "@babel/types": "^7.9.6", + "assert-never": "^1.2.1", + "babel-walk": "3.0.0-canary-5" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "optional": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "optional": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "optional": true + } + } +} diff --git a/functions/package.json b/functions/package.json new file mode 100644 index 0000000..da9db9d --- /dev/null +++ b/functions/package.json @@ -0,0 +1,38 @@ +{ + "name": "functions", + "version": "1.0.2", + "scripts": { + "lint": "tslint --project tsconfig.json", + "build": "tsc", + "serve": "cross-env-shell RUN_SERVER=true RUN_DAEMON=true \"npm run build && firebase emulators:start --only functions\"", + "shell": "npm run build && firebase functions:shell", + "start": "npm run shell", + "deploy": "cross-env-shell RUN_SERVER=true RUN_DAEMON=true firebase deploy --only functions", + "deploy-server": "cross-env-shell RUN_SERVER=true \"firebase deploy --only functions\"", + "logs": "firebase functions:log", + "server": "cross-env-shell RUN_SERVER=true RUNNING_LOCAL=true \"npm run build && firebase emulators:start --only functions\"", + "daemon": "cross-env-shell RUN_DAEMON=true RUNNING_LOCAL=true \"npm run build && firebase emulators:start --only functions\"" + }, + "engines": { + "node": "10" + }, + "main": "lib/bin/index.js", + "dependencies": { + "axios": "^0.19.2", + "body-parser": "^1.19.0", + "cross-env": "^7.0.2", + "express": "^4.17.1", + "firebase-admin": "^8.10.0", + "firebase-functions": "^3.7.0", + "firebase-functions-helper": "^0.7.5", + "http-errors": "^1.7.3", + "morgan": "^1.10.0", + "pug": "^3.0.0" + }, + "devDependencies": { + "firebase-functions-test": "^0.2.0", + "tslint": "^5.12.0", + "typescript": "^3.8.0" + }, + "private": true +} diff --git a/functions/src/app.ts b/functions/src/app.ts new file mode 100644 index 0000000..a0a1b7b --- /dev/null +++ b/functions/src/app.ts @@ -0,0 +1,32 @@ +import * as path from 'path'; +import * as logger from 'morgan'; +import * as express from 'express'; +import * as createError from 'http-errors'; +import router = require("./routes/newsriver"); + + +const app = express(); + +// view engine setup +app.set('views', path.join(__dirname, 'views')); +app.set('view engine', 'pug'); + +app.use(logger('combined')); +app.use(express.json()); +app.use(express.urlencoded({extended: false})); +app.use(express.static(path.join(__dirname, 'public'))); + +app.use(router); +// catch 404 and forward to error handler +app.use((req, res, next) => next(createError(404))); + +// error handler +app.use((err, req, res, next) => { + res.locals.message = err.message; + res.locals.error = res.app.get('env') === 'development' ? err : {}; + + res.status(err.status || 500); + res.render('error'); +}); + +export = app; diff --git a/functions/src/bin/daemon.ts b/functions/src/bin/daemon.ts new file mode 100644 index 0000000..8259abc --- /dev/null +++ b/functions/src/bin/daemon.ts @@ -0,0 +1,23 @@ +import updater = require('../models/updater'); +import functions = require('firebase-functions'); + + +updater.initialize() + .then(_ => updater.scheduleUpdates() + .catch(err => console.warn(`Error while scheduling updates - ${err}`))) + .catch(err => { + console.error(`Error while initializing the updater - ${err}`); + process.exit(1); + }); + +process.on('SIGINT', () => { + updater.stopScheduling() + .finally(process.exit(0)) + .catch(err => console.warn(`Error while finishing the schedules - ${err}`)); +}); + +exports.updater = functions.https.onRequest(async (req, resp) => { + resp.sendStatus(200); +}); + +exports.remoteConfigTrigger = functions.remoteConfig.onUpdate(updater.remoteConfigEventHandler) diff --git a/functions/src/bin/index.ts b/functions/src/bin/index.ts new file mode 100644 index 0000000..e036f8c --- /dev/null +++ b/functions/src/bin/index.ts @@ -0,0 +1,14 @@ +import functions = require('firebase-functions'); + +const runServer = process.env.RUN_SERVER || functions.config().execution?.run_server; +const runDaemon = process.env.RUN_DAEMON || functions.config().execution?.run_daemon; + +if (runServer === undefined && runDaemon === undefined) { + exports.www = require('./www'); + exports.daemon = require('./daemon'); +} else { + if (runServer) + exports.www = require('./www'); + if (runDaemon) + exports.daemon = require('./daemon'); +} \ No newline at end of file diff --git a/functions/src/bin/www.ts b/functions/src/bin/www.ts new file mode 100644 index 0000000..65cc5be --- /dev/null +++ b/functions/src/bin/www.ts @@ -0,0 +1,81 @@ +const app = require('../app'); +import * as http from 'http'; +import functions = require("firebase-functions"); + + +/** + * Get port from environment and store in Express + */ +const port = normalizePort(process.env.PORT || '3000'); + +/** + * Create the http server + */ +const server = http.createServer(app); + +/** + * Listen on a provided port, on all network interfaces + */ +server.on('error', onError); +server.on('listening', onListening); +exports.webApi = functions.https.onRequest(app); + +/** + * Normalize a port into a number, string or false + * @param val the port + */ +function normalizePort(val) { + const parsedPort = parseInt(val, 10); + + if (isNaN(parsedPort)) { + // named pipe + return val; + } + + if (parsedPort >= 0) { + // port number + return parsedPort; + } + + return false; +} + +/** + * Event listener for HTTP server "error" event. + */ + +function onError(error) { + if (error.syscall !== 'listen') { + throw error; + } + + const bind = typeof port === 'string' + ? 'Pipe ' + port + : 'Port ' + port; + + // handle specific listen errors with friendly messages + switch (error.code) { + case 'EACCES': + console.error(bind + ' requires elevated privileges'); + process.exit(1); + break; + case 'EADDRINUSE': + console.error(bind + ' is already in use'); + process.exit(1); + break; + default: + throw error; + } +} + +/** + * Event listener for HTTP server "listening" event. + */ + +function onListening() { + const addr = server.address(); + const bind = typeof addr === 'string' + ? 'pipe ' + addr + : 'port ' + addr.port; + console.log('Listening on ' + bind); +} diff --git a/functions/src/common/properties.ts b/functions/src/common/properties.ts new file mode 100644 index 0000000..73e1e8f --- /dev/null +++ b/functions/src/common/properties.ts @@ -0,0 +1,23 @@ +import admin = require('firebase-admin'); +import functions = require('firebase-functions'); +import {ProjectProperties} from "../interfaces/projectProperties"; + + +export const languages = new Set(['es', 'en']); +export function projectProperties(app?: admin.app.App): ProjectProperties { + return { + collection: 'news', + database: admin.firestore(app), + authToken: functions.config().newsriver.key + } +} +export const databaseURL = 'https://handwashing.firebaseio.com'; + +let serviceAccount = undefined +if (process.env.RUNNING_LOCAL) + serviceAccount = require('../../handwashing-firebase-adminsdk.json'); + +export const firebaseApp = admin.initializeApp({ + credential: process.env.RUNNING_LOCAL ? admin.credential.cert(serviceAccount) : admin.credential.applicationDefault(), + databaseURL: databaseURL +}); \ No newline at end of file diff --git a/functions/src/controllers/newsriver.ts b/functions/src/controllers/newsriver.ts new file mode 100644 index 0000000..95f0f83 --- /dev/null +++ b/functions/src/controllers/newsriver.ts @@ -0,0 +1,27 @@ +export import apiModel = require("../models/newsriver"); +import {Request, Response} from "express"; + + +export async function queryNewsForLanguage(req: Request, res: Response) { + const language = req.query.lang as string; + const fromParam = req.query.from; + const amountParam = req.query.amount; + try { + const newsData = await apiModel.newsForLanguage(language); + if (fromParam === undefined && amountParam === undefined) { + res.json(newsData); + } else { + const from = fromParam !== undefined ? Number(fromParam) : 0; + const amount = amountParam !== undefined ? Number(amountParam) : newsData.length; + + res.json(newsData.slice(from, from + amount)); + } + } catch (err) { + if (err !instanceof RangeError) { + console.error(`Error while getting news data: ${err}`); + res.sendStatus(500); + } + else + res.status(403).send(err); + } +} \ No newline at end of file diff --git a/functions/src/database.ts b/functions/src/database.ts new file mode 100644 index 0000000..f8f997a --- /dev/null +++ b/functions/src/database.ts @@ -0,0 +1,13 @@ +export class Database { + private readonly db: FirebaseFirestore.Firestore; + private readonly collectionName: string; + + get collection(): FirebaseFirestore.CollectionReference { + return this.db.collection(this.collectionName); + } + + constructor(db: FirebaseFirestore.Firestore, collectionName: string) { + this.db = db; + this.collectionName = collectionName; + } +} \ No newline at end of file diff --git a/functions/src/interfaces/projectProperties.ts b/functions/src/interfaces/projectProperties.ts new file mode 100644 index 0000000..2bdee61 --- /dev/null +++ b/functions/src/interfaces/projectProperties.ts @@ -0,0 +1,5 @@ +export interface ProjectProperties { + collection: string, + database: FirebaseFirestore.Firestore, + authToken: string +} \ No newline at end of file diff --git a/functions/src/models/newsriver.ts b/functions/src/models/newsriver.ts new file mode 100644 index 0000000..8511114 --- /dev/null +++ b/functions/src/models/newsriver.ts @@ -0,0 +1,41 @@ +import {NewsriverData} from "../newsriver"; +import {Database} from "../database"; +import properties = require('../common/properties'); + + +const databases: Record = {}; +const latestResults: Record> = {}; +const lastUpdateMsForLanguage: Record = {}; +let initCalled = false; + +export async function initialize() { + initCalled = true; + const projectProperties = properties.projectProperties(properties.firebaseApp); + for (const language of properties.languages) { + databases[language] = new Database( + projectProperties.database, + `${projectProperties.collection}_${language}` + ); + lastUpdateMsForLanguage[language] = 0; + latestResults[language] = null; + } +} + +export async function newsForLanguage(language: string) { + if (!initCalled) + throw new Error('`initialize` not called'); + if (language ! in properties.languages) + throw new RangeError(`invalid language "${language}"`); + if (Math.floor((Date.now() - lastUpdateMsForLanguage[language]) / 60000) <= 15) + return latestResults[language]; + lastUpdateMsForLanguage[language] = Date.now(); + const collection = databases[language].collection; + const snapshot = await collection.orderBy("discoverDate", "desc").get(); + const data = new Array(); + snapshot.forEach(item => { + if (item.data() !== null) + data.push(item.data() as NewsriverData) + }); + latestResults[language] = data; + return data; +} diff --git a/functions/src/models/updater.ts b/functions/src/models/updater.ts new file mode 100644 index 0000000..b4ad6ca --- /dev/null +++ b/functions/src/models/updater.ts @@ -0,0 +1,62 @@ +import {Updater} from '../updater'; +import {RemoteConfigData} from "../rcdata"; +import properties = require('../common/properties'); +import {TemplateVersion} from "firebase-functions/lib/providers/remoteConfig"; +import {languages} from "../common/properties"; +import {EventContext} from "firebase-functions"; + + +const updaters: Record = {}; +const remoteConfig = new RemoteConfigData(properties.firebaseApp); +const timers = new Set(); +let initCalled = false; + +export async function initialize() { + try { + console.info('Updater is being initialized'); + initCalled = true; + const projectProperties = properties.projectProperties(properties.firebaseApp); + for (const language of properties.languages) { + const terms = await remoteConfig.getSearchTermsForLanguage(language); + updaters[language] = new Updater( + projectProperties.database, + `${projectProperties.collection}_${language}`, + terms, + projectProperties.authToken, + language + ); + } + console.info('Updaters initialized') + remoteConfig.subscribeUpdaters(updaters); + } catch (e) { + console.error(`Error while initializing updaters - ${e}`); + console.error(e); + } +} + +export async function scheduleUpdates() { + if (!initCalled) + throw new Error('`initialize` not called'); + console.info('Updaters are scheduling updates') + for (const language of properties.languages) { + timers.add(updaters[language].schedule()); + } + console.info('Schedules for updaters are done'); +} + +export async function stopScheduling() { + if (!initCalled) + throw new Error('`initialize` not called'); + console.info('Updates are being cancelled'); + for (const timer of timers) { + clearInterval(timer); + } +} + +export async function remoteConfigEventHandler(event: TemplateVersion, _: EventContext) { + console.debug(`RemoteConfig values have changed - version ${event.versionNumber}`); + for (const language of languages) { + console.debug(`Updating search terms for language ${language}`); + remoteConfig.updaters[language].searchTerms = await remoteConfig.getSearchTermsForLanguage(language); + } +} diff --git a/functions/src/newsriver.ts b/functions/src/newsriver.ts new file mode 100644 index 0000000..1fd8258 --- /dev/null +++ b/functions/src/newsriver.ts @@ -0,0 +1,48 @@ +interface NewsriverElements { + type: string, + primary: boolean, + url: string, + width: number | null, + height: number | null, + title: string | null, + alternative: string | null + } + + interface NewsriverWebsite { + name: string, + hostName: string, + domainName: string, + iconURL: string, + countryName: string | null, + countryCode: string | null, + region: null + } + + interface Sentiment { + type: string, + sentiment: number + } + + interface ReadTime { + type: string, + seconds: number + } + + interface NewsriverMetadata { + finSentiment: Sentiment, + readTime: ReadTime + } + + export interface NewsriverData { + id: string, + discoverDate: Date, + title: string, + language: string, + text: string, + structuredText: string, + elements: Array, + website: NewsriverWebsite, + metadata: NewsriverMetadata, + highlight: string, + score: number + } \ No newline at end of file diff --git a/functions/src/public/stylesheets/style.css b/functions/src/public/stylesheets/style.css new file mode 100644 index 0000000..b993201 --- /dev/null +++ b/functions/src/public/stylesheets/style.css @@ -0,0 +1,8 @@ +body { + padding: 50px; + font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; +} + +a { + color: #00B7FF; +} diff --git a/functions/src/rcdata.ts b/functions/src/rcdata.ts new file mode 100644 index 0000000..6dc3114 --- /dev/null +++ b/functions/src/rcdata.ts @@ -0,0 +1,64 @@ +import {Updater} from './updater'; +import * as admin from 'firebase-admin'; +import * as functions from 'firebase-functions' + +export class RemoteConfigData { + remoteConfig: admin.remoteConfig.RemoteConfig; + updaters: Record; + + constructor(app: admin.app.App) { + this.remoteConfig = admin.remoteConfig(app); + this.updaters = {}; + this.listenToRCChanges(); + } + + async getSearchTermsForLanguage(language: string) { + console.info('Getting template...'); + const template = await this.remoteConfig.getTemplate(); + console.debug('Checking condition'); + let condition: string; + switch (language) { + case 'es': + condition = 'Spanish users'; + break; + default: + condition = 'Default language users'; + break; + } + console.debug('Parsing JSON'); + return JSON.parse(template.parameters['search_terms'].conditionalValues[condition]['value']); + } + + subscribeUpdaters(updaters: Record) { + this.updaters = updaters; + } + + listenToRCChanges() { + console.info('Listening to changes in RemoteConfig...'); + functions.remoteConfig.onUpdate((version, _) => { + console.debug(`RemoteConfig values have changed - version: ${version}`); + return admin.credential.applicationDefault().getAccessToken() + // tslint:disable-next-line:no-shadowed-variable + .then(_ => { + this.remoteConfig.getTemplate() + .then(template => { + const languages = Object.keys(template.parameters['search_terms'].conditionalValues); + for (const language of languages) { + const terms = JSON.parse( + template.parameters['search_terms'].conditionalValues[language]['value'] + ); + try { + console.debug("Updating updater search terms"); + if (this.updaters[language].searchTerms.length !== terms.lenght) + this.updaters[language].searchTerms = terms; + } catch (e) { + console.warn(`Updaters are not set yet - ${e}`); + } + } + }) + .catch(err => console.warn(`Error while obtaining the template - ${err}`)); + }) + .catch(err => console.error(`Error while obtaining data from RC: ${err}`)); + }); + } +} diff --git a/functions/src/routes/newsriver.ts b/functions/src/routes/newsriver.ts new file mode 100644 index 0000000..c75f269 --- /dev/null +++ b/functions/src/routes/newsriver.ts @@ -0,0 +1,36 @@ +import apiController = require("../controllers/newsriver"); +import express = require("express"); +import admin = require("firebase-admin"); +import properties = require('../common/properties'); + + +const router = express.Router(); + +apiController.apiModel.initialize() + .catch(e => { + console.error(e); + throw e; + }); + +router.get('/api/v1', (req, res, next) => { + try { + const language = req.query.lang; + const tokenId = req.headers.authorization.split(' ')[1]; + admin.auth(properties.firebaseApp).verifyIdToken(tokenId) + .then(_ => { + if (language === undefined) + res.status(403).send('lang must be given [?lang=...]'); + else next(); + }) + .catch(e => { + console.error('Unauthorized'); + res.status(401).send(e); + }); + } catch (e) { + console.error(`Possible missing authorization header: ${e}`); + res.status(401).send(e); + } +}); +router.get('/api/v1', apiController.queryNewsForLanguage); + +export = router; diff --git a/functions/src/updater.ts b/functions/src/updater.ts new file mode 100644 index 0000000..5586948 --- /dev/null +++ b/functions/src/updater.ts @@ -0,0 +1,119 @@ +import {NewsriverData} from "./newsriver"; +import * as firebaseHelper from 'firebase-functions-helper'; +import {AxiosInstance, default as axios} from "axios"; +import * as https from "https"; + + +export class Updater { + private readonly db: FirebaseFirestore.Firestore; + private readonly collectionName: string; + private readonly interval: number; + private _searchTerms: Array; + private readonly language: string; + private readonly auth: string; + private _path: string | undefined; + + get path(): Promise { + if (this._path === undefined) + return this.buildPath() + .then(path => this._path = path); + return Promise.resolve(this._path); + } + + get searchTerms(): Array { + return this._searchTerms; + } + + set searchTerms(value) { + this._searchTerms = value; + this._path = undefined; + } + + get network(): AxiosInstance { + return axios.create({ + baseURL: 'https://api.newsriver.io/v2/', + headers: { + 'Authorization': this.auth, + 'Content-Type': 'application/json' + }, + withCredentials: true, + responseType: 'json', + httpsAgent: new https.Agent({ keepAlive: true }), + timeout: 500000 + }); + } + + constructor(db: FirebaseFirestore.Firestore | null, + collectionName: string | null, + searchTerms: Array, + auth: string, + language: string = 'en', + intervalMins: number = 30) { + this.db = db; + this.collectionName = collectionName; + this.searchTerms = searchTerms; + this.language = language; + this.auth = auth; + this.interval = intervalMins * 60 * 1000; + this.doRequest() + .then(response => { + this.updateData(response) + // tslint:disable-next-line:no-empty + .catch(ignored => { + }); + }) + .catch(err => console.warn(`Unable to update data due to exception: ${err}`)); + } + + schedule(): NodeJS.Timer { + return setInterval(async () => { + try { + const requestData = await this.doRequest(); + await this.updateData(requestData); + } catch (e) { + console.error(`Got error ${e} while querying data`); + } + }, this.interval); + } + + async updateData(content: Array) { + try { + for (const element of content) { + try { + firebaseHelper.firestore.createDocumentWithID(this.db, this.collectionName, element.id, element) + .then(created => console.debug(`Item with ID: ${element.id} was ${created ? 'created' : 'not created'}`)) + .catch(err => console.error(`Error while creating document ${err}`)); + } catch (err) { + console.warn(`Error while creating/updating document - ${err}`); + } + } + console.info(`Updated approximately ${content.length} element(s)`); + } catch (error) { + console.error(`Unhandled error ${error}`); + } + } + + async doRequest(): Promise> { + const response = await this.network.get(await this.path); + if (response.status === 200) + return response.data as Array; + else + throw new TypeError(`The response code is not valid - ${response.status}`); + } + + async buildPath(): Promise { + const parts = ['/search?query='] + this.searchTerms.forEach((term, i, _) => { + if (i !== 0) + parts.push(encodeURI(' OR ')); + parts.push(encodeURI(`title:${term} OR text:${term}`)); + }); + + parts.push(encodeURI(` AND language:${this.language.toUpperCase()}`)); + parts.push(encodeURI('&sortBy=discoverDate')); + parts.push(encodeURI('&sortOrder=DESC')); + parts.push(encodeURI('&limit=100')); + + return parts.join(''); + } +} \ No newline at end of file diff --git a/functions/src/views/error.pug b/functions/src/views/error.pug new file mode 100644 index 0000000..3b25cfa --- /dev/null +++ b/functions/src/views/error.pug @@ -0,0 +1,6 @@ +extends layout + +block content + h1= message + h2= error.status + pre #{error.stack} diff --git a/functions/src/views/layout.pug b/functions/src/views/layout.pug new file mode 100644 index 0000000..6dc17d8 --- /dev/null +++ b/functions/src/views/layout.pug @@ -0,0 +1,7 @@ +doctype html +html + head + title= title + link(rel='stylesheet', href='/stylesheets/style.css') + body + block content diff --git a/functions/tsconfig.json b/functions/tsconfig.json new file mode 100644 index 0000000..8ef9748 --- /dev/null +++ b/functions/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "module": "commonjs", + "noImplicitReturns": true, + "noUnusedLocals": true, + "outDir": "lib", + "sourceMap": true, + "strict": false, + "target": "es2017", + "lib": ["es2015", "es2016", "dom", "es2018.promise"] + }, + "compileOnSave": true, + "include": [ + "src" + ] +} diff --git a/functions/tslint.json b/functions/tslint.json new file mode 100644 index 0000000..3c51143 --- /dev/null +++ b/functions/tslint.json @@ -0,0 +1,115 @@ +{ + "rules": { + // -- Strict errors -- + // These lint rules are likely always a good idea. + + // Force function overloads to be declared together. This ensures readers understand APIs. + "adjacent-overload-signatures": true, + + // Do not allow the subtle/obscure comma operator. + "ban-comma-operator": true, + + // Do not allow internal modules or namespaces . These are deprecated in favor of ES6 modules. + "no-namespace": true, + + // Do not allow parameters to be reassigned. To avoid bugs, developers should instead assign new values to new vars. + "no-parameter-reassignment": true, + + // Force the use of ES6-style imports instead of /// imports. + "no-reference": true, + + // Do not allow type assertions that do nothing. This is a big warning that the developer may not understand the + // code currently being edited (they may be incorrectly handling a different type case that does not exist). + "no-unnecessary-type-assertion": true, + + // Disallow nonsensical label usage. + "label-position": true, + + // Disallows the (often typo) syntax if (var1 = var2). Replace with if (var2) { var1 = var2 }. + "no-conditional-assignment": true, + + // Disallows constructors for primitive types (e.g. new Number('123'), though Number('123') is still allowed). + "no-construct": true, + + // Do not allow super() to be called twice in a constructor. + "no-duplicate-super": true, + + // Do not allow the same case to appear more than once in a switch block. + "no-duplicate-switch-case": true, + + // Do not allow a variable to be declared more than once in the same block. Consider function parameters in this + // rule. + "no-duplicate-variable": [true, "check-parameters"], + + // Disallows a variable definition in an inner scope from shadowing a variable in an outer scope. Developers should + // instead use a separate variable name. + "no-shadowed-variable": true, + + // Empty blocks are almost never needed. Allow the one general exception: empty catch blocks. + "no-empty": [true, "allow-empty-catch"], + + // Functions must either be handled directly (e.g. with a catch() handler) or returned to another function. + // This is a major source of errors in Cloud Functions and the team strongly recommends leaving this rule on. + "no-floating-promises": true, + + // Do not allow any imports for modules that are not in package.json. These will almost certainly fail when + // deployed. + "no-implicit-dependencies": true, + + // The 'this' keyword can only be used inside of classes. + "no-invalid-this": true, + + // Do not allow strings to be thrown because they will not include stack traces. Throw Errors instead. + "no-string-throw": true, + + // Disallow control flow statements, such as return, continue, break, and throw in finally blocks. + "no-unsafe-finally": true, + + // Expressions must always return a value. Avoids common errors like const myValue = functionReturningVoid(); + "no-void-expression": [true, "ignore-arrow-function-shorthand"], + + // Disallow duplicate imports in the same file. + "no-duplicate-imports": true, + + + // -- Strong Warnings -- + // These rules should almost never be needed, but may be included due to legacy code. + // They are left as a warning to avoid frustration with blocked deploys when the developer + // understand the warning and wants to deploy anyway. + + // Warn when an empty interface is defined. These are generally not useful. + "no-empty-interface": {"severity": "warning"}, + + // Warn when an import will have side effects. + "no-import-side-effect": {"severity": "warning"}, + + // Warn when variables are defined with var. Var has subtle meaning that can lead to bugs. Strongly prefer const for + // most values and let for values that will change. + "no-var-keyword": {"severity": "warning"}, + + // Prefer === and !== over == and !=. The latter operators support overloads that are often accidental. + "triple-equals": {"severity": "warning"}, + + // Warn when using deprecated APIs. + "deprecation": {"severity": "warning"}, + + // -- Light Warnings -- + // These rules are intended to help developers use better style. Simpler code has fewer bugs. These would be "info" + // if TSLint supported such a level. + + // prefer for( ... of ... ) to an index loop when the index is only used to fetch an object from an array. + // (Even better: check out utils like .map if transforming an array!) + "prefer-for-of": {"severity": "warning"}, + + // Warns if function overloads could be unified into a single function with optional or rest parameters. + "unified-signatures": {"severity": "warning"}, + + // Prefer const for values that will not change. This better documents code. + "prefer-const": {"severity": "warning"}, + + // Multi-line object literals and function calls should have a trailing comma. This helps avoid merge conflicts. + "trailing-comma": {"severity": "warning"} + }, + + "defaultSeverity": "warn" +} diff --git a/gradle.properties b/gradle.properties index 47cd138..a89146e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -10,11 +10,13 @@ # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true -#Mon Apr 27 18:01:43 CEST 2020 -kotlin.code.style=official +#Thu Jun 04 12:03:50 CEST 2020 android.enableJetifier=true -org.gradle.jvmargs=-Xms512M -Xmx1536M -XX\:MaxPermSize\=512M -XX\:MaxMetaspaceSize\=512M -Dkotlin.daemon.jvm.options\="-Xmx1024M" android.enableR8.fullMode=true android.useAndroidX=true +kotlin.code.style=official org.gradle.caching=true +org.gradle.jvmargs=-Xms512M -Xmx2048M -XX\:MaxPermSize\=512M -XX\:MaxMetaspaceSize\=512M -Dkotlin.daemon.jvm.options\="-Xmx2048M" org.gradle.parallel=true +kapt.use.worker.api=true +kapt.include.compile.classpath=false diff --git a/public/404.html b/public/404.html new file mode 100644 index 0000000..829eda8 --- /dev/null +++ b/public/404.html @@ -0,0 +1,33 @@ + + + + + + Page Not Found + + + + +
+

404

+

Page Not Found

+

The specified file was not found on this website. Please check the URL for mistakes and try again.

+

Why am I seeing this?

+

This page was generated by the Firebase Command-Line Interface. To modify it, edit the 404.html file in your project's configured public directory.

+
+ + diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..329f456 --- /dev/null +++ b/public/index.html @@ -0,0 +1,65 @@ + + + + + + Welcome to Firebase Hosting + + + + + + + + + + + + + + +
+

Welcome

+

Firebase Hosting Setup Complete

+

You're seeing this because you've successfully setup Firebase Hosting. Now it's time to go build something extraordinary!

+ Open Hosting Documentation +
+

Firebase SDK Loading…

+ + + +