diff --git a/README.md b/README.md index e8e0f39..9d51a5f 100644 --- a/README.md +++ b/README.md @@ -21,3 +21,8 @@ Key features: 3. Camera Integration: The app enables users to capture and store photos of rental cars using an internet connection. This feature allows users to record the car's condition for transparency during pickup and drop-off, with the photos being securely stored in the database, accessible from anywhere with an internet connection. + + + +Application Video +https://csuchico-my.sharepoint.com/:f:/g/personal/anaheed_csuchico_edu/EiiEuTmZCd9EvPTAQtE0dRkB6BIVJPq2y9y94O5FBgPWMg?e=LKT4G8 diff --git a/app-release.apk b/app-release.apk new file mode 100755 index 0000000..999f5e1 Binary files /dev/null and b/app-release.apk differ diff --git a/finalproject/.gitignore b/finalproject/.gitignore new file mode 100755 index 0000000..70ccb97 --- /dev/null +++ b/finalproject/.gitignore @@ -0,0 +1,44 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +/build/ + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/finalproject/.metadata b/finalproject/.metadata new file mode 100755 index 0000000..de53984 --- /dev/null +++ b/finalproject/.metadata @@ -0,0 +1,45 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled and should not be manually edited. + +version: + revision: "e1e47221e86272429674bec4f1bd36acc4fc7b77" + channel: "stable" + +project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: e1e47221e86272429674bec4f1bd36acc4fc7b77 + base_revision: e1e47221e86272429674bec4f1bd36acc4fc7b77 + - platform: android + create_revision: e1e47221e86272429674bec4f1bd36acc4fc7b77 + base_revision: e1e47221e86272429674bec4f1bd36acc4fc7b77 + - platform: ios + create_revision: e1e47221e86272429674bec4f1bd36acc4fc7b77 + base_revision: e1e47221e86272429674bec4f1bd36acc4fc7b77 + - platform: linux + create_revision: e1e47221e86272429674bec4f1bd36acc4fc7b77 + base_revision: e1e47221e86272429674bec4f1bd36acc4fc7b77 + - platform: macos + create_revision: e1e47221e86272429674bec4f1bd36acc4fc7b77 + base_revision: e1e47221e86272429674bec4f1bd36acc4fc7b77 + - platform: web + create_revision: e1e47221e86272429674bec4f1bd36acc4fc7b77 + base_revision: e1e47221e86272429674bec4f1bd36acc4fc7b77 + - platform: windows + create_revision: e1e47221e86272429674bec4f1bd36acc4fc7b77 + base_revision: e1e47221e86272429674bec4f1bd36acc4fc7b77 + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/finalproject/README.md b/finalproject/README.md new file mode 100755 index 0000000..9d675ba --- /dev/null +++ b/finalproject/README.md @@ -0,0 +1,16 @@ +# finalproject + +A new Flutter project. + +## Getting Started + +This project is a starting point for a Flutter application. + +A few resources to get you started if this is your first Flutter project: + +- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) +- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) + +For help getting started with Flutter development, view the +[online documentation](https://docs.flutter.dev/), which offers tutorials, +samples, guidance on mobile development, and a full API reference. diff --git a/finalproject/analysis_options.yaml b/finalproject/analysis_options.yaml new file mode 100755 index 0000000..d4e0f0c --- /dev/null +++ b/finalproject/analysis_options.yaml @@ -0,0 +1,28 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at https://dart.dev/lints. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/finalproject/android/.gitignore b/finalproject/android/.gitignore new file mode 100755 index 0000000..5d99765 --- /dev/null +++ b/finalproject/android/.gitignore @@ -0,0 +1,13 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java + +# Remember to never publicly share your keystore. +# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app +key.properties +**/*.keystore +**/*.jks diff --git a/finalproject/android/app/build.gradle b/finalproject/android/app/build.gradle new file mode 100755 index 0000000..cef4988 --- /dev/null +++ b/finalproject/android/app/build.gradle @@ -0,0 +1,69 @@ +plugins { + id "com.android.application" + id "kotlin-android" + id "dev.flutter.flutter-gradle-plugin" +} + +def localProperties = new Properties() +def localPropertiesFile = rootProject.file('local.properties') +if (localPropertiesFile.exists()) { + localPropertiesFile.withReader('UTF-8') { reader -> + localProperties.load(reader) + } +} + +def flutterVersionCode = localProperties.getProperty('flutter.versionCode') +if (flutterVersionCode == null) { + flutterVersionCode = '1' +} + +def flutterVersionName = localProperties.getProperty('flutter.versionName') +if (flutterVersionName == null) { + flutterVersionName = '1.0' +} + +android { + namespace "com.example.finalproject" + compileSdkVersion flutter.compileSdkVersion +// compileSdkVersion 33 + ndkVersion flutter.ndkVersion + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = '1.8' + } + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId "com.example.finalproject" + // You can update the following values to match your application needs. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. +// minSdkVersion flutter.minSdkVersion + minSdkVersion 20 + targetSdkVersion flutter.targetSdkVersion + versionCode flutterVersionCode.toInteger() + versionName flutterVersionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig signingConfigs.debug + } + } +} + +flutter { + source '../..' +} + +dependencies {} diff --git a/finalproject/android/app/google-services.json b/finalproject/android/app/google-services.json new file mode 100755 index 0000000..3fa92f9 --- /dev/null +++ b/finalproject/android/app/google-services.json @@ -0,0 +1,29 @@ +{ + "project_info": { + "project_number": "612408492430", + "project_id": "fp-467", + "storage_bucket": "fp-467.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:612408492430:android:bcb82a7602e5fd243b24df", + "android_client_info": { + "package_name": "com.example.finalproject" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyAI-JDZ_oM6NcMrpNLYWTqphTRAR10eJGY" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/finalproject/android/app/src/debug/AndroidManifest.xml b/finalproject/android/app/src/debug/AndroidManifest.xml new file mode 100755 index 0000000..8ffe024 --- /dev/null +++ b/finalproject/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/finalproject/android/app/src/main/AndroidManifest.xml b/finalproject/android/app/src/main/AndroidManifest.xml new file mode 100755 index 0000000..4ed56a4 --- /dev/null +++ b/finalproject/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/finalproject/android/app/src/main/java/io/flutter/app/FlutterMultiDexApplication.java b/finalproject/android/app/src/main/java/io/flutter/app/FlutterMultiDexApplication.java new file mode 100755 index 0000000..752fc18 --- /dev/null +++ b/finalproject/android/app/src/main/java/io/flutter/app/FlutterMultiDexApplication.java @@ -0,0 +1,25 @@ +// Generated file. +// +// If you wish to remove Flutter's multidex support, delete this entire file. +// +// Modifications to this file should be done in a copy under a different name +// as this file may be regenerated. + +package io.flutter.app; + +import android.app.Application; +import android.content.Context; +import androidx.annotation.CallSuper; +import androidx.multidex.MultiDex; + +/** + * Extension of {@link android.app.Application}, adding multidex support. + */ +public class FlutterMultiDexApplication extends Application { + @Override + @CallSuper + protected void attachBaseContext(Context base) { + super.attachBaseContext(base); + MultiDex.install(this); + } +} diff --git a/finalproject/android/app/src/main/kotlin/com/example/finalproject/MainActivity.kt b/finalproject/android/app/src/main/kotlin/com/example/finalproject/MainActivity.kt new file mode 100755 index 0000000..bbdcc39 --- /dev/null +++ b/finalproject/android/app/src/main/kotlin/com/example/finalproject/MainActivity.kt @@ -0,0 +1,6 @@ +package com.example.finalproject + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity: FlutterActivity() { +} diff --git a/finalproject/android/app/src/main/res/drawable-v21/launch_background.xml b/finalproject/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100755 index 0000000..1cb7aa2 --- /dev/null +++ b/finalproject/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/finalproject/android/app/src/main/res/drawable/launch_background.xml b/finalproject/android/app/src/main/res/drawable/launch_background.xml new file mode 100755 index 0000000..8403758 --- /dev/null +++ b/finalproject/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/finalproject/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/finalproject/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100755 index 0000000..db77bb4 Binary files /dev/null and b/finalproject/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/finalproject/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/finalproject/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100755 index 0000000..17987b7 Binary files /dev/null and b/finalproject/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/finalproject/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/finalproject/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100755 index 0000000..09d4391 Binary files /dev/null and b/finalproject/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/finalproject/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/finalproject/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100755 index 0000000..d5f1c8d Binary files /dev/null and b/finalproject/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/finalproject/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/finalproject/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100755 index 0000000..4d6372e Binary files /dev/null and b/finalproject/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/finalproject/android/app/src/main/res/values-night/styles.xml b/finalproject/android/app/src/main/res/values-night/styles.xml new file mode 100755 index 0000000..360a160 --- /dev/null +++ b/finalproject/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/finalproject/android/app/src/main/res/values/styles.xml b/finalproject/android/app/src/main/res/values/styles.xml new file mode 100755 index 0000000..5fac679 --- /dev/null +++ b/finalproject/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/finalproject/android/app/src/profile/AndroidManifest.xml b/finalproject/android/app/src/profile/AndroidManifest.xml new file mode 100755 index 0000000..8ffe024 --- /dev/null +++ b/finalproject/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/finalproject/android/build.gradle b/finalproject/android/build.gradle new file mode 100755 index 0000000..0bd4dfd --- /dev/null +++ b/finalproject/android/build.gradle @@ -0,0 +1,31 @@ +buildscript { + ext.kotlin_version = '1.7.10' + repositories { + google() + mavenCentral() + } + + dependencies { + classpath 'com.android.tools.build:gradle:7.3.0' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +allprojects { + repositories { + google() + mavenCentral() + } +} + +rootProject.buildDir = '../build' +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(':app') +} + +tasks.register("clean", Delete) { + delete rootProject.buildDir +} diff --git a/finalproject/android/gradle.properties b/finalproject/android/gradle.properties new file mode 100755 index 0000000..46c1f16 --- /dev/null +++ b/finalproject/android/gradle.properties @@ -0,0 +1,3 @@ +org.gradle.jvmargs=-Xmx1536M +android.useAndroidX=true +android.enableJetifier=true diff --git a/finalproject/android/gradle/wrapper/gradle-wrapper.properties b/finalproject/android/gradle/wrapper/gradle-wrapper.properties new file mode 100755 index 0000000..eabb85f --- /dev/null +++ b/finalproject/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip diff --git a/finalproject/android/settings.gradle b/finalproject/android/settings.gradle new file mode 100755 index 0000000..96e86e5 --- /dev/null +++ b/finalproject/android/settings.gradle @@ -0,0 +1,20 @@ +pluginManagement { + def flutterSdkPath = { + def properties = new Properties() + file("local.properties").withInputStream { properties.load(it) } + def flutterSdkPath = properties.getProperty("flutter.sdk") + assert flutterSdkPath != null, "flutter.sdk not set in local.properties" + return flutterSdkPath + } + settings.ext.flutterSdkPath = flutterSdkPath() + + includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle") + + plugins { + id "dev.flutter.flutter-gradle-plugin" version "1.0.0" apply false + } +} + +include ":app" + +apply from: "${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/finalproject/assets/Inboxpage.png b/finalproject/assets/Inboxpage.png new file mode 100755 index 0000000..e5553d0 Binary files /dev/null and b/finalproject/assets/Inboxpage.png differ diff --git a/finalproject/assets/authantication.png b/finalproject/assets/authantication.png new file mode 100755 index 0000000..71687f4 Binary files /dev/null and b/finalproject/assets/authantication.png differ diff --git a/finalproject/assets/camera.png b/finalproject/assets/camera.png new file mode 100755 index 0000000..62418e6 Binary files /dev/null and b/finalproject/assets/camera.png differ diff --git a/finalproject/assets/drivecar.png b/finalproject/assets/drivecar.png new file mode 100755 index 0000000..0863abc Binary files /dev/null and b/finalproject/assets/drivecar.png differ diff --git a/finalproject/assets/dx logo.png b/finalproject/assets/dx logo.png new file mode 100755 index 0000000..0c41c91 Binary files /dev/null and b/finalproject/assets/dx logo.png differ diff --git a/finalproject/assets/email.png b/finalproject/assets/email.png new file mode 100755 index 0000000..3f80b46 Binary files /dev/null and b/finalproject/assets/email.png differ diff --git a/finalproject/assets/google.png b/finalproject/assets/google.png new file mode 100755 index 0000000..467c373 Binary files /dev/null and b/finalproject/assets/google.png differ diff --git a/finalproject/assets/inbox.png b/finalproject/assets/inbox.png new file mode 100755 index 0000000..f70b604 Binary files /dev/null and b/finalproject/assets/inbox.png differ diff --git a/finalproject/assets/message.jpeg b/finalproject/assets/message.jpeg new file mode 100755 index 0000000..22c3a92 Binary files /dev/null and b/finalproject/assets/message.jpeg differ diff --git a/finalproject/assets/profile.jpg b/finalproject/assets/profile.jpg new file mode 100755 index 0000000..de4b534 Binary files /dev/null and b/finalproject/assets/profile.jpg differ diff --git a/finalproject/assets/trips.png b/finalproject/assets/trips.png new file mode 100755 index 0000000..d5fa3b1 Binary files /dev/null and b/finalproject/assets/trips.png differ diff --git a/finalproject/flutter_01.png b/finalproject/flutter_01.png new file mode 100755 index 0000000..dbf1695 Binary files /dev/null and b/finalproject/flutter_01.png differ diff --git a/finalproject/flutter_jank_metrics_01.json b/finalproject/flutter_jank_metrics_01.json new file mode 100755 index 0000000..3eaa53b --- /dev/null +++ b/finalproject/flutter_jank_metrics_01.json @@ -0,0 +1 @@ +{"type":"RenderFrameWithRasterStats","snapshots":[{"layer_unique_id":53436,"duration_micros":2711,"top":0.0,"left":0.0,"width":1080.0,"height":2154.0,"snapshot":[137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,4,56,0,0,8,106,8,6,0,0,0,106,246,175,7,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,32,0,73,68,65,84,120,156,236,221,125,172,151,117,253,199,241,55,96,72,206,16,73,145,129,164,33,102,19,81,80,20,197,76,44,198,141,57,93,44,141,102,89,67,5,7,228,90,186,217,237,198,154,205,150,185,165,40,6,88,76,115,205,155,105,83,88,166,50,83,12,37,193,91,72,165,180,150,184,83,42,30,229,78,147,4,126,127,56,248,121,252,126,185,251,121,224,240,250,245,120,252,213,121,127,175,235,250,126,60,127,117,158,92,215,231,234,180,126,253,250,77,5,0,0,0,16,172,115,71,47,0,0,0,0,224,195,18,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,183,215,166,77,155,58,122,13,0,0,0,0,31,202,94,235,214,173,235,232,53,0,0,0,0,124,40,30,81,1,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,19,56,0,0,0,128,120,2,7,0,0,0,16,79,224,0,0,0,0,226,9,28,0,0,0,64,60,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,222,94,29,189,0,0,96,207,119,223,125,247,213,45,183,220,82,45,45,45,117,204,49,199,212,196,137,19,235,176,195,14,235,232,101,1,0,108,209,169,181,181,117,83,71,47,2,0,254,219,61,249,228,147,117,254,249,231,111,243,152,253,247,223,191,14,62,248,224,234,221,187,119,13,30,60,184,142,59,238,184,26,48,96,64,117,238,188,107,111,200,92,180,104,81,77,158,60,185,205,236,224,131,15,174,155,111,190,185,186,119,239,190,75,191,187,189,204,158,61,187,174,191,254,250,134,249,9,39,156,80,51,102,204,216,238,239,112,225,194,133,245,205,111,126,179,97,222,171,87,175,186,245,214,91,107,191,253,246,107,183,181,2,0,255,55,30,81,1,128,16,111,188,241,70,45,93,186,180,238,191,255,254,186,242,202,43,107,252,248,241,117,209,69,23,213,227,143,63,190,75,191,119,201,146,37,13,179,151,95,126,185,254,242,151,191,236,210,239,109,79,227,199,143,175,62,125,250,52,204,31,123,236,177,122,228,145,71,182,121,238,134,13,27,106,214,172,89,77,63,155,60,121,178,184,1,0,123,8,129,3,0,130,45,89,178,164,46,188,240,194,186,226,138,43,234,157,119,222,217,37,223,177,255,254,251,55,157,39,253,97,255,177,143,125,172,225,46,148,205,102,205,154,85,239,190,251,238,86,207,125,224,129,7,106,233,210,165,13,243,65,131,6,213,216,177,99,219,109,141,0,192,135,35,112,0,192,255,3,183,223,126,123,93,118,217,101,181,102,205,154,118,191,246,23,190,240,133,58,226,136,35,218,204,206,61,247,220,58,252,240,195,219,253,187,118,165,209,163,71,215,177,199,30,219,48,95,182,108,89,61,240,192,3,77,207,89,191,126,253,86,239,222,152,58,117,106,125,228,35,31,105,215,53,2,0,255,119,54,25,5,128,61,216,41,167,156,82,159,255,252,231,171,234,189,63,182,87,174,92,89,11,23,46,172,63,255,249,207,13,199,46,88,176,160,174,188,242,202,154,54,109,90,187,238,203,209,163,71,143,154,51,103,78,45,94,188,184,86,173,90,85,135,28,114,72,13,26,52,168,221,174,191,187,116,233,210,165,166,76,153,210,116,175,147,217,179,103,215,169,167,158,90,123,239,189,119,155,249,239,127,255,251,122,241,197,23,27,142,31,59,118,108,29,127,252,241,187,108,173,0,192,206,19,56,0,96,15,246,181,175,125,173,134,14,29,218,102,118,209,69,23,213,226,197,139,235,167,63,253,105,195,31,223,243,230,205,171,193,131,7,215,184,113,227,218,117,29,221,186,117,171,83,78,57,165,93,175,217,17,134,12,25,82,103,157,117,86,221,117,215,93,109,230,47,190,248,98,221,123,239,189,117,230,153,103,110,153,173,91,183,174,233,221,27,123,237,181,87,77,156,56,113,151,175,21,0,216,57,30,81,1,128,64,199,31,127,124,77,159,62,189,14,57,228,144,134,207,126,241,139,95,212,218,181,107,59,96,85,25,46,184,224,130,234,214,173,91,195,124,214,172,89,181,110,221,186,45,63,223,125,247,221,213,210,210,210,112,220,132,9,19,154,254,222,1,128,142,229,14,14,0,8,213,187,119,239,186,244,210,75,27,94,95,186,114,229,202,186,231,158,123,234,236,179,207,110,51,191,246,218,107,235,87,191,250,85,155,217,180,105,211,234,204,51,207,172,151,95,126,185,110,191,253,246,122,244,209,71,235,133,23,94,168,163,142,58,170,110,186,233,166,170,170,122,244,209,71,107,202,148,41,13,223,191,96,193,130,218,119,223,125,107,245,234,213,53,106,212,168,90,191,126,125,155,207,47,185,228,146,58,247,220,115,155,174,125,213,170,85,117,218,105,167,53,204,191,251,221,239,54,172,123,179,87,94,121,165,22,46,92,88,127,250,211,159,234,165,151,94,170,150,150,150,234,217,179,103,245,237,219,183,142,63,254,248,26,62,124,248,14,237,11,210,183,111,223,186,224,130,11,234,218,107,175,109,51,111,105,105,169,185,115,231,214,248,241,227,235,205,55,223,172,95,254,242,151,13,231,246,234,213,171,190,242,149,175,108,247,59,0,128,221,207,29,28,0,16,108,248,240,225,117,228,145,71,54,204,231,205,155,183,67,231,175,93,187,182,158,122,234,169,250,250,215,191,94,191,254,245,175,235,133,23,94,168,170,247,30,195,216,81,221,187,119,223,178,79,200,251,45,90,180,104,171,231,44,91,182,172,233,124,216,176,97,13,179,183,223,126,187,110,184,225,134,250,226,23,191,88,151,95,126,121,221,127,255,253,181,124,249,242,90,179,102,77,253,227,31,255,168,71,30,121,164,174,190,250,234,250,242,151,191,92,63,254,241,143,235,205,55,223,220,238,154,207,57,231,156,58,248,224,131,27,230,55,220,112,67,173,90,181,170,238,184,227,142,106,109,109,109,248,124,234,212,169,81,111,143,1,128,255,38,2,7,0,4,235,212,169,83,211,87,149,46,93,186,180,94,123,237,181,237,158,191,124,249,242,250,222,247,190,87,111,188,241,70,155,249,206,190,29,228,212,83,79,109,152,45,92,184,176,86,175,94,221,244,248,167,158,122,170,97,118,204,49,199,212,39,62,241,137,54,179,213,171,87,215,119,190,243,157,154,49,99,70,253,251,223,255,222,238,58,238,184,227,142,186,248,226,139,183,251,223,190,239,190,251,54,189,43,165,181,181,181,102,204,152,81,115,230,204,105,248,236,232,163,143,174,209,163,71,111,119,13,0,64,199,16,56,0,32,220,214,30,203,120,254,249,231,183,123,238,220,185,115,235,95,255,250,87,195,124,103,238,224,168,170,58,225,132,19,154,158,243,236,179,207,54,61,254,143,127,252,99,195,108,212,168,81,109,126,222,184,113,99,93,113,197,21,245,240,195,15,239,212,90,150,45,91,86,87,92,113,69,109,216,176,97,155,199,141,28,57,178,233,155,80,110,191,253,246,122,235,173,183,26,230,94,11,11,0,123,54,129,3,0,194,245,233,211,167,233,188,217,35,22,59,106,103,255,144,239,209,163,71,141,24,49,162,97,222,236,78,141,150,150,150,90,190,124,121,195,252,196,19,79,108,243,243,125,247,221,87,247,222,123,111,195,113,3,7,14,172,31,253,232,71,53,123,246,236,186,234,170,171,234,244,211,79,111,56,230,193,7,31,172,7,31,124,112,155,107,238,210,165,75,77,157,58,117,155,199,108,54,118,236,216,134,183,217,0,0,123,22,155,140,2,64,184,143,126,244,163,77,231,171,86,173,218,225,107,156,119,222,121,245,153,207,124,166,14,56,224,128,218,184,113,227,118,239,126,104,230,180,211,78,171,249,243,231,183,153,61,252,240,195,117,209,69,23,181,153,53,219,127,99,224,192,129,117,232,161,135,110,249,121,195,134,13,117,227,141,55,54,28,119,226,137,39,214,207,126,246,179,218,103,159,125,182,204,70,140,24,81,159,252,228,39,235,186,235,174,107,115,236,173,183,222,218,116,111,144,247,27,52,104,80,141,27,55,174,238,188,243,206,173,30,211,181,107,215,154,52,105,210,54,175,3,0,116,60,119,112,0,64,184,189,247,222,187,233,124,205,154,53,59,116,254,207,127,254,243,250,214,183,190,85,67,135,14,173,67,15,61,180,250,247,239,191,67,111,35,249,160,19,78,56,161,97,246,220,115,207,213,43,175,188,210,102,246,196,19,79,52,28,55,106,212,168,234,212,169,211,150,159,159,126,250,233,166,119,121,92,124,241,197,109,226,70,213,123,251,144,124,245,171,95,173,158,61,123,182,153,47,89,178,100,135,246,33,57,255,252,243,171,107,215,174,91,253,252,27,223,248,70,195,222,32,0,192,158,71,224,0,128,255,114,159,253,236,103,219,229,58,31,255,248,199,155,62,166,178,116,233,210,45,255,123,227,198,141,181,96,193,130,134,99,78,58,233,164,173,158,179,217,145,71,30,89,159,254,244,167,155,126,247,222,123,239,93,71,31,125,116,195,124,243,91,97,182,165,181,181,181,225,21,183,239,247,207,127,254,115,187,215,0,0,58,158,71,84,0,32,220,219,111,191,221,116,190,239,190,251,238,230,149,188,247,152,202,7,247,190,120,226,137,39,106,228,200,145,85,85,245,183,191,253,173,97,83,211,35,142,56,162,14,59,236,176,54,179,102,27,164,62,251,236,179,117,245,213,87,111,245,187,95,122,233,165,134,217,235,175,191,190,205,245,110,220,184,177,225,209,150,15,154,59,119,110,157,117,214,89,117,236,177,199,110,243,56,0,160,99,9,28,0,16,110,237,218,181,77,231,61,122,244,216,238,185,221,186,117,107,215,181,52,123,76,101,193,130,5,117,233,165,151,86,231,206,157,155,222,153,49,122,244,232,54,143,167,84,109,61,76,52,219,151,99,91,182,246,187,217,108,254,252,249,181,104,209,162,237,94,103,250,244,233,53,123,246,236,157,126,187,12,0,176,251,120,68,5,0,194,173,92,185,178,233,252,131,123,82,52,211,236,145,146,15,227,160,131,14,170,147,79,62,185,205,172,165,165,165,254,254,247,191,87,213,123,251,98,124,208,7,223,158,82,245,225,222,0,243,126,255,249,207,127,182,250,217,218,181,107,235,218,107,175,221,161,235,60,253,244,211,117,207,61,247,180,203,154,0,128,93,67,224,0,128,112,207,60,243,76,211,249,167,62,245,169,221,188,146,247,124,238,115,159,107,152,61,243,204,51,245,206,59,239,212,195,15,63,220,102,222,191,127,255,166,235,220,218,198,169,237,233,214,91,111,173,151,95,126,185,97,254,237,111,127,187,233,171,119,175,187,238,186,157,122,51,13,0,176,123,185,207,18,0,130,109,220,184,177,30,122,232,161,134,249,192,129,3,235,160,131,14,234,128,21,85,13,27,54,172,97,182,100,201,146,26,48,96,64,195,35,35,99,198,140,169,206,157,27,255,189,229,192,3,15,172,231,158,123,174,205,108,194,132,9,53,117,234,212,118,89,227,138,21,43,106,246,236,217,13,243,1,3,6,212,57,231,156,83,221,187,119,175,105,211,166,181,249,236,213,87,95,173,155,111,190,185,166,76,153,210,46,107,0,0,218,151,59,56,0,32,216,31,254,240,135,90,182,108,89,195,252,140,51,206,232,128,213,188,167,79,159,62,13,123,113,60,244,208,67,245,200,35,143,52,28,251,193,183,167,108,214,191,127,255,134,217,194,133,11,107,227,198,141,237,178,198,153,51,103,54,125,115,202,164,73,147,170,107,215,174,53,102,204,152,166,119,150,220,120,227,141,91,30,183,1,0,246,44,2,7,0,132,90,177,98,69,93,115,205,53,13,243,253,247,223,191,198,142,29,219,1,43,250,95,155,223,154,178,217,91,111,189,85,51,103,206,108,51,235,215,175,223,86,95,251,218,236,141,37,203,151,47,111,250,138,217,247,219,180,105,211,118,55,13,93,188,120,113,253,238,119,191,107,152,31,115,204,49,91,246,36,233,218,181,107,93,120,225,133,13,199,188,251,238,187,117,253,245,215,215,166,77,155,182,249,29,0,192,238,39,112,0,64,160,167,158,122,170,166,76,153,82,43,86,172,104,248,108,210,164,73,213,189,123,247,14,88,213,255,106,246,152,202,7,141,29,59,182,186,116,233,210,244,179,161,67,135,86,191,126,253,26,230,63,249,201,79,154,222,177,82,85,181,110,221,186,154,62,125,122,77,158,60,185,238,188,243,206,166,199,172,95,191,190,166,79,159,222,244,179,137,19,39,182,89,207,136,17,35,106,240,224,193,13,199,205,159,63,191,30,125,244,209,166,215,0,0,58,142,61,56,0,96,15,118,219,109,183,213,107,175,189,86,85,85,27,54,108,168,149,43,87,214,162,69,139,234,177,199,30,107,122,252,152,49,99,234,75,95,250,210,238,92,98,83,253,250,245,171,33,67,134,212,147,79,62,185,213,99,134,15,31,190,213,207,186,117,235,86,147,38,77,170,31,252,224,7,109,230,175,190,250,106,157,119,222,121,53,126,252,248,26,54,108,88,245,232,209,163,214,174,93,91,207,63,255,124,221,125,247,221,91,130,207,229,151,95,94,61,122,244,104,216,240,116,222,188,121,77,3,201,201,39,159,220,240,54,151,46,93,186,212,196,137,19,107,242,228,201,13,199,79,159,62,189,142,59,238,184,221,178,25,42,0,176,99,4,14,0,216,131,205,159,63,191,230,207,159,191,67,199,158,116,210,73,117,217,101,151,53,221,180,179,35,140,26,53,106,171,129,163,79,192,38,26,29,0,0,32,0,73,68,65,84,159,62,117,228,145,71,110,243,252,49,99,198,212,227,143,63,94,191,253,237,111,27,62,187,229,150,91,234,150,91,110,217,230,249,183,221,118,91,141,24,49,98,203,239,163,181,181,181,102,204,152,209,244,216,11,47,188,176,58,117,234,212,48,31,54,108,88,157,114,202,41,13,111,127,89,190,124,121,221,117,215,93,117,206,57,231,108,115,13,0,192,238,179,103,252,63,32,0,224,67,25,55,110,92,93,117,213,85,181,223,126,251,117,244,82,182,216,214,99,42,99,198,140,169,189,246,218,246,191,179,116,238,220,185,46,185,228,146,58,235,172,179,118,250,187,135,12,25,82,151,95,126,121,155,216,115,211,77,55,85,107,107,107,211,181,28,125,244,209,77,175,211,169,83,167,166,123,113,84,85,93,127,253,245,245,250,235,175,239,244,218,0,128,93,67,224,0,128,96,67,135,14,173,153,51,103,214,247,191,255,253,234,214,173,91,71,47,167,141,67,15,61,180,6,13,26,212,244,179,147,79,62,121,135,174,177,207,62,251,212,15,127,248,195,154,54,109,90,245,233,211,103,187,199,111,222,28,244,154,107,174,169,3,14,56,96,203,252,175,127,253,107,221,116,211,77,77,207,153,48,97,194,54,175,121,212,81,71,213,233,167,159,222,48,95,181,106,85,205,153,51,103,187,107,2,0,118,15,143,168,0,64,136,158,61,123,86,223,190,125,171,119,239,222,53,120,240,224,58,238,184,227,106,192,128,1,123,204,35,41,205,140,26,53,170,150,46,93,218,102,214,171,87,175,26,56,112,224,14,95,163,115,231,206,117,230,153,103,214,200,145,35,235,177,199,30,171,37,75,150,212,115,207,61,87,175,188,242,74,173,94,189,186,14,58,232,160,58,252,240,195,107,200,144,33,53,98,196,136,58,240,192,3,219,156,191,105,211,166,186,238,186,235,154,94,251,236,179,207,174,1,3,6,108,119,13,19,38,76,104,250,230,149,223,252,230,55,117,198,25,103,108,245,109,48,0,192,238,211,169,181,181,213,123,206,0,0,0,128,104,123,238,63,249,0,0,0,0,236,32,129,3,0,0,0,136,39,112,0,0,0,0,241,4,14,0,0,0,32,158,192,1,0,0,0,196,251,31,246,238,45,182,235,251,190,255,248,203,198,216,28,108,108,78,198,38,156,2,148,4,74,72,72,154,66,18,154,100,23,203,148,73,213,52,85,90,167,169,91,43,245,102,210,86,85,155,214,117,170,52,109,107,165,73,187,88,43,109,235,54,181,59,104,202,77,183,187,170,218,69,183,169,105,8,180,33,52,132,144,64,2,225,124,198,128,193,224,3,24,176,255,23,249,243,171,29,12,152,131,253,227,3,143,199,149,191,159,223,247,247,253,190,73,175,250,212,239,251,249,10,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,234,170,61,192,131,232,228,201,147,249,151,127,249,151,108,220,184,49,77,77,77,249,236,103,63,155,223,250,173,223,74,93,221,240,255,57,190,247,189,239,229,159,255,249,159,135,173,61,243,204,51,249,238,119,191,59,158,227,2,0,0,192,61,175,242,255,168,95,121,229,149,124,231,59,223,185,227,11,190,248,226,139,249,246,183,191,125,199,215,185,95,13,14,14,230,207,255,252,207,243,230,155,111,86,214,118,238,220,153,9,19,38,228,243,159,255,124,21,39,3,0,0,128,114,121,68,101,156,157,58,117,106,88,220,184,106,253,250,245,85,152,6,0,0,0,238,15,2,199,56,155,58,117,106,234,235,235,175,89,159,53,107,86,21,166,1,0,0,128,251,131,192,49,206,166,76,153,146,175,125,237,107,195,214,90,91,91,243,123,191,247,123,85,154,8,0,0,0,202,119,211,77,70,255,232,143,254,40,205,205,205,163,190,224,244,233,211,239,104,160,7,193,231,62,247,185,60,241,196,19,217,185,115,103,38,77,154,148,39,159,124,50,45,45,45,213,30,11,0,0,0,138,117,211,192,241,155,191,249,155,105,108,108,28,143,89,30,40,75,150,44,201,146,37,75,170,61,6,0,0,0,220,23,60,162,2,0,0,0,20,239,166,191,224,168,150,19,39,78,228,229,151,95,30,182,214,220,220,156,87,95,125,53,73,178,119,239,222,252,228,39,63,201,155,111,190,153,131,7,15,38,249,232,87,17,207,63,255,124,94,126,249,229,76,155,54,173,242,189,254,254,254,188,254,250,235,89,191,126,125,118,237,218,149,35,71,142,100,246,236,217,89,181,106,85,94,124,241,197,172,91,183,46,19,38,76,184,233,76,131,131,131,217,190,125,123,54,109,218,148,119,222,121,39,135,14,29,202,233,211,167,211,218,218,154,246,246,246,60,245,212,83,89,187,118,109,30,125,244,209,27,94,231,203,95,254,114,222,126,251,237,97,107,95,253,234,87,243,197,47,126,113,84,255,109,70,242,225,135,31,230,251,223,255,126,182,109,219,150,5,11,22,228,11,95,248,66,158,127,254,249,219,190,30,0,0,0,148,228,158,13,28,35,233,234,234,74,79,79,79,94,121,229,149,124,239,123,223,187,230,243,142,142,142,252,252,231,63,207,15,126,240,131,252,237,223,254,109,22,47,94,156,125,251,246,229,91,223,250,86,182,110,221,58,236,220,238,238,238,236,219,183,47,63,252,225,15,243,43,191,242,43,249,139,191,248,139,97,81,228,227,62,248,224,131,124,231,59,223,201,230,205,155,175,249,172,187,187,59,123,247,238,205,198,141,27,243,119,127,247,119,249,236,103,63,155,63,248,131,63,72,107,107,235,157,255,163,71,225,236,217,179,249,234,87,191,154,227,199,143,39,249,232,191,195,47,126,241,139,252,251,191,255,123,30,127,252,241,113,153,1,0,0,0,170,169,184,71,84,254,236,207,254,108,196,184,49,212,129,3,7,242,141,111,124,35,59,118,236,200,87,190,242,149,107,226,198,199,189,250,234,171,249,206,119,190,115,221,207,215,175,95,159,47,125,233,75,35,198,141,145,252,232,71,63,202,31,254,225,31,230,244,233,211,163,58,255,78,237,216,177,163,18,55,134,250,249,207,127,62,46,247,7,0,0,128,106,43,46,112,108,220,184,113,84,231,237,218,181,43,95,248,194,23,114,244,232,209,81,157,255,195,31,254,48,31,124,240,193,53,235,251,247,239,207,55,190,241,141,244,247,247,143,248,189,235,109,192,186,123,247,238,252,213,95,253,85,6,6,6,70,117,255,59,49,121,242,228,17,215,167,78,157,58,230,247,6,0,0,128,123,193,77,31,81,217,180,105,83,154,154,154,110,122,161,137,19,39,102,245,234,213,119,101,168,155,121,236,177,199,242,185,207,125,46,237,237,237,57,127,254,124,126,252,227,31,231,127,255,247,127,175,123,254,19,79,60,145,207,125,238,115,105,109,109,205,153,51,103,242,163,31,253,104,196,80,178,97,195,134,107,246,207,248,207,255,252,207,244,246,246,14,91,107,106,106,202,55,191,249,205,172,93,187,54,13,13,13,57,126,252,120,254,233,159,254,41,63,250,209,143,174,185,222,59,239,188,51,230,255,93,86,174,92,153,181,107,215,230,141,55,222,168,172,181,182,182,230,165,151,94,26,211,251,2,0,0,192,189,226,166,129,227,107,95,251,218,168,46,180,116,233,210,252,215,127,253,215,29,15,52,26,223,251,222,247,210,208,208,80,57,126,241,197,23,115,249,242,229,202,6,164,67,253,234,175,254,106,190,245,173,111,165,190,190,126,216,249,95,254,242,151,179,125,251,246,97,231,190,243,206,59,215,124,127,164,107,254,254,239,255,126,94,120,225,133,202,113,91,91,91,190,254,245,175,103,211,166,77,233,232,232,24,118,238,219,111,191,61,230,129,99,226,196,137,249,246,183,191,157,31,255,248,199,217,183,111,95,102,207,158,157,151,94,122,41,179,103,207,30,211,251,2,0,0,192,189,98,76,55,25,189,124,249,114,222,125,247,221,81,157,219,214,214,150,246,246,246,155,158,247,205,111,126,115,88,220,72,146,218,218,218,188,252,242,203,35,198,136,47,125,233,75,195,226,70,146,212,215,215,231,215,126,237,215,174,9,28,7,14,28,24,118,60,56,56,56,226,222,28,115,231,206,189,102,109,202,148,41,89,179,102,205,53,191,226,56,124,248,240,141,255,65,119,201,164,73,147,242,27,191,241,27,227,114,47,0,0,0,184,215,140,105,224,232,237,237,205,151,191,252,229,81,157,251,245,175,127,61,159,255,252,231,111,122,222,146,37,75,70,92,159,57,115,230,136,235,215,123,147,201,72,191,110,232,232,232,200,224,224,96,106,106,106,146,36,53,53,53,89,190,124,249,77,103,186,170,185,185,249,154,181,158,158,158,81,127,31,0,0,0,184,61,69,189,38,246,70,38,78,156,120,75,231,215,213,93,251,79,239,239,239,31,22,56,62,174,171,171,43,155,54,109,202,246,237,219,179,115,231,206,156,56,113,34,167,79,159,78,119,119,247,117,239,51,56,56,120,75,115,1,0,0,0,183,238,166,129,99,253,250,245,215,125,83,200,131,162,175,175,47,63,248,193,15,242,253,239,127,63,23,46,92,168,246,56,0,0,0,192,199,220,55,191,224,24,43,61,61,61,249,198,55,190,145,215,95,127,189,218,163,0,0,0,0,215,49,166,129,99,218,180,105,217,178,101,203,88,222,98,204,253,219,191,253,219,136,113,227,119,126,231,119,242,210,75,47,165,173,173,173,178,137,233,95,255,245,95,231,255,254,239,255,198,123,68,0,0,0,120,224,249,5,199,13,156,57,115,38,175,188,242,202,53,235,127,250,167,127,154,223,254,237,223,190,102,189,173,173,109,60,198,2,0,0,0,62,166,182,218,3,220,203,182,111,223,158,203,151,47,95,179,254,235,191,254,235,35,158,63,210,185,0,0,0,192,216,19,56,110,160,179,179,243,154,181,214,214,214,76,155,54,109,196,243,127,240,131,31,140,245,72,0,0,0,192,8,60,162,114,3,83,166,76,185,102,173,163,163,35,71,143,30,205,220,185,115,135,173,127,248,225,135,227,53,214,136,46,92,184,144,31,255,248,199,217,191,127,127,102,205,154,149,151,94,122,41,179,103,207,174,234,76,0,0,0,48,94,110,26,56,254,251,191,255,251,186,191,88,24,73,115,115,115,158,125,246,217,59,26,234,94,49,127,254,252,17,215,255,242,47,255,50,95,249,202,87,242,208,67,15,229,220,185,115,217,180,105,83,254,241,31,255,113,156,167,251,165,75,151,46,229,143,255,248,143,243,198,27,111,84,214,94,121,229,149,252,199,127,252,71,230,204,153,83,181,185,0,0,0,96,188,220,52,112,252,205,223,252,205,45,93,240,51,159,249,204,125,19,56,150,45,91,150,181,107,215,14,11,7,73,242,139,95,252,34,95,252,226,23,71,117,141,11,23,46,140,197,104,195,188,247,222,123,215,204,216,209,209,145,255,249,159,255,201,239,254,238,239,142,249,253,1,0,0,160,218,236,193,113,3,53,53,53,249,147,63,249,147,76,159,62,253,182,175,113,236,216,177,187,56,209,200,250,250,250,70,92,239,237,237,29,243,123,3,0,0,192,189,64,224,184,137,197,139,23,231,31,254,225,31,242,200,35,143,220,240,188,47,125,233,75,249,238,119,191,123,205,250,158,61,123,114,238,220,185,177,26,47,73,178,98,197,138,180,182,182,94,179,254,204,51,207,140,233,125,1,0,0,224,94,97,147,209,81,88,190,124,121,254,245,95,255,53,175,191,254,122,214,175,95,159,15,63,252,48,199,143,31,79,91,91,91,62,245,169,79,229,229,151,95,206,99,143,61,150,158,158,158,52,54,54,166,187,187,123,216,247,223,126,251,237,188,240,194,11,99,54,95,75,75,75,254,254,239,255,62,223,255,254,247,179,117,235,214,44,90,180,40,95,248,194,23,178,106,213,170,49,187,39,0,0,0,220,75,106,58,59,59,7,171,61,4,0,0,0,192,157,240,136,10,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,213,85,123,128,146,92,186,116,41,253,253,253,185,124,249,114,46,95,190,156,129,129,129,12,14,14,102,112,208,155,118,1,0,0,184,125,53,53,53,169,169,169,73,109,109,109,234,234,234,82,87,87,151,250,250,250,76,156,56,177,218,163,21,67,224,24,162,175,175,47,93,93,93,57,127,254,124,206,159,63,159,158,158,158,244,246,246,166,175,175,47,23,46,92,200,149,43,87,170,61,34,0,0,0,15,144,9,19,38,100,210,164,73,153,60,121,114,166,76,153,146,169,83,167,166,169,169,41,77,77,77,105,110,110,206,228,201,147,171,61,226,61,163,166,179,179,243,129,252,249,65,95,95,95,78,157,58,149,211,167,79,167,179,179,51,103,206,156,201,133,11,23,170,61,22,0,0,0,140,218,164,73,147,50,125,250,244,204,152,49,35,51,103,206,204,172,89,179,30,216,232,241,192,4,142,75,151,46,229,248,241,227,57,126,252,120,58,58,58,114,246,236,217,81,125,111,194,132,9,153,60,121,114,38,77,154,148,134,134,134,202,79,132,234,234,234,82,91,91,155,218,90,219,152,0,0,0,112,231,6,6,6,50,48,48,144,203,151,47,87,182,72,184,120,241,98,46,92,184,144,190,190,190,81,63,85,208,210,210,146,214,214,214,180,181,181,165,173,173,237,129,121,204,229,190,14,28,61,61,61,57,124,248,112,142,28,57,146,99,199,142,221,240,220,198,198,198,180,180,180,164,165,165,37,211,166,77,75,83,83,83,166,78,157,250,192,150,47,0,0,0,238,45,125,125,125,233,233,233,201,249,243,231,115,238,220,185,156,61,123,54,103,207,158,77,119,119,247,13,191,215,222,222,158,135,30,122,40,243,230,205,203,212,169,83,199,105,218,241,119,223,5,142,254,254,254,28,56,112,32,7,15,30,204,241,227,199,71,60,167,182,182,54,173,173,173,153,61,123,118,102,205,154,149,153,51,103,166,161,161,97,156,39,5,0,0,128,59,119,241,226,197,156,62,125,58,167,78,157,202,201,147,39,211,209,209,145,129,129,129,17,207,109,107,107,203,130,5,11,178,112,225,194,212,215,215,143,243,164,99,235,190,9,28,199,143,31,207,222,189,123,179,127,255,254,17,223,106,50,125,250,244,180,183,183,87,126,162,83,83,83,83,133,41,1,0,0,96,108,13,14,14,86,182,104,56,118,236,88,206,156,57,115,205,57,53,53,53,89,180,104,81,22,47,94,156,182,182,182,42,76,121,247,21,31,56,62,252,240,195,236,222,189,59,157,157,157,215,124,54,115,230,204,204,159,63,63,243,230,205,75,115,115,115,21,166,3,0,0,128,234,234,234,234,202,225,195,135,115,232,208,161,156,62,125,250,154,207,103,204,152,145,165,75,151,230,19,159,248,68,21,166,187,123,138,12,28,151,46,93,202,206,157,59,179,115,231,206,107,222,124,50,117,234,212,44,90,180,40,139,22,45,74,75,75,75,149,38,4,0,0,128,123,207,217,179,103,179,127,255,254,236,223,191,63,61,61,61,195,62,155,52,105,82,30,121,228,145,60,242,200,35,69,110,76,90,84,224,184,116,233,82,222,127,255,253,188,255,254,251,185,124,249,242,176,207,230,206,157,155,37,75,150,100,193,130,5,85,154,14,0,0,0,202,113,240,224,193,236,217,179,39,71,143,30,29,182,94,87,87,151,229,203,151,103,249,242,229,69,133,142,98,2,199,142,29,59,178,125,251,246,244,247,247,15,91,95,186,116,105,150,45,91,150,233,211,167,87,105,50,0,0,0,40,215,153,51,103,178,107,215,174,236,222,189,123,216,122,125,125,125,62,249,201,79,102,197,138,21,85,154,236,214,220,243,129,99,223,190,125,121,247,221,119,115,254,252,249,97,235,203,151,47,207,35,143,60,114,95,191,226,6,0,0,0,198,75,79,79,79,118,238,220,153,247,223,127,127,216,122,83,83,83,30,123,236,177,60,252,240,195,85,154,108,116,238,217,192,209,217,217,153,119,222,121,231,154,159,202,60,242,200,35,89,177,98,69,166,76,153,82,165,201,0,0,0,224,254,213,219,219,155,29,59,118,100,231,206,157,195,214,231,206,157,155,199,31,127,60,51,102,204,168,210,100,55,118,79,6,142,119,222,121,39,239,189,247,222,176,181,69,139,22,101,229,202,149,222,134,2,0,0,0,227,160,171,171,43,239,189,247,94,246,239,223,63,108,125,229,202,149,121,252,241,199,171,52,213,245,221,83,129,227,196,137,19,217,178,101,203,176,87,190,206,156,57,51,171,86,173,202,220,185,115,171,56,25,0,0,0,60,152,142,30,61,154,109,219,182,13,123,197,236,140,25,51,242,228,147,79,102,206,156,57,85,156,108,184,123,38,112,108,219,182,45,239,190,251,238,176,181,39,158,120,34,159,252,228,39,171,52,17,0,0,0,112,213,246,237,219,179,117,235,214,97,107,143,61,246,88,86,173,90,85,165,137,134,171,122,224,56,119,238,92,54,111,222,156,227,199,143,87,214,230,206,157,155,39,159,124,210,227,40,0,0,0,112,15,233,234,234,202,150,45,91,134,237,151,217,214,214,150,167,159,126,58,211,166,77,171,226,100,85,14,28,7,14,28,200,166,77,155,114,233,210,165,202,218,147,79,62,153,229,203,151,87,107,36,0,0,0,224,38,222,127,255,253,108,217,178,165,114,60,113,226,196,172,89,179,38,11,23,46,172,218,76,85,11,28,31,127,36,101,198,140,25,249,244,167,63,157,153,51,103,86,99,28,0,0,0,224,22,156,62,125,58,111,190,249,230,176,125,52,171,249,200,202,184,7,142,193,193,193,252,236,103,63,27,182,11,235,210,165,75,179,102,205,154,241,28,3,0,0,0,184,11,54,109,218,148,221,187,119,87,142,23,45,90,148,103,159,125,54,53,53,53,227,58,199,184,6,142,158,158,158,108,220,184,49,39,79,158,172,172,125,234,83,159,202,35,143,60,50,94,35,0,0,0,0,119,217,206,157,59,243,139,95,252,162,114,60,123,246,236,60,247,220,115,153,58,117,234,184,205,48,110,129,227,244,233,211,217,176,97,67,186,187,187,147,36,147,38,77,202,179,207,62,155,246,246,246,241,184,61,0,0,0,48,134,142,29,59,150,159,253,236,103,185,112,225,66,146,164,177,177,49,235,214,173,27,183,173,40,198,37,112,28,63,126,60,235,215,175,175,108,38,58,99,198,140,60,247,220,115,85,223,97,21,0,0,0,184,123,206,157,59,151,141,27,55,86,246,229,152,56,113,98,158,127,254,249,180,181,181,141,249,189,199,60,112,28,57,114,36,175,189,246,90,6,7,63,186,205,220,185,115,179,110,221,186,76,156,56,113,44,111,11,0,0,0,84,193,165,75,151,178,97,195,134,202,171,100,107,106,106,242,194,11,47,228,161,135,30,26,211,251,142,105,224,56,124,248,112,94,123,237,181,202,241,194,133,11,179,110,221,186,177,186,29,0,0,0,112,143,216,176,97,67,14,28,56,80,57,126,225,133,23,50,111,222,188,49,187,95,237,88,93,248,232,209,163,195,226,198,146,37,75,196,13,0,0,0,120,64,172,91,183,46,75,150,44,169,28,191,246,218,107,149,95,117,140,133,49,9,28,39,78,156,184,38,110,172,93,187,118,44,110,5,0,0,0,220,163,214,174,93,123,77,228,56,113,226,196,152,220,235,174,7,142,51,103,206,228,245,215,95,207,192,192,64,146,100,241,226,197,226,6,0,0,0,60,160,214,174,93,155,197,139,23,39,73,6,6,6,242,250,235,175,231,204,153,51,119,253,62,119,53,112,244,245,245,101,195,134,13,185,120,241,98,146,100,193,130,5,121,230,153,103,238,230,45,0,0,0,128,194,60,243,204,51,89,176,96,65,146,228,226,197,139,217,176,97,67,250,250,250,238,234,61,238,106,224,216,184,113,99,206,157,59,151,36,105,107,107,203,103,62,243,153,187,121,121,0,0,0,160,80,159,249,204,103,42,175,139,189,250,58,217,187,233,174,5,142,55,222,120,163,242,28,77,75,75,139,13,69,1,0,0,128,97,214,173,91,151,150,150,150,36,31,237,223,249,198,27,111,220,181,107,223,149,192,177,125,251,246,236,217,179,39,73,50,113,226,196,60,247,220,115,105,104,104,184,27,151,6,0,0,0,238,19,13,13,13,121,238,185,231,50,113,226,196,36,201,158,61,123,178,125,251,246,187,114,237,59,14,28,71,142,28,201,214,173,91,43,199,207,62,251,108,165,198,0,0,0,0,12,213,210,210,146,103,159,125,182,114,188,117,235,214,28,57,114,228,142,175,123,71,129,163,175,175,47,111,190,249,102,229,120,245,234,213,153,55,111,222,29,15,5,0,0,0,220,191,230,205,155,151,213,171,87,87,142,223,124,243,205,59,222,116,244,142,2,199,230,205,155,211,219,219,155,36,89,180,104,81,86,172,88,113,71,195,0,0,0,0,15,134,21,43,86,100,209,162,69,73,146,222,222,222,108,222,188,249,142,174,119,219,129,227,253,247,223,207,161,67,135,146,36,77,77,77,249,244,167,63,125,71,131,0,0,0,0,15,150,79,127,250,211,105,106,106,74,146,28,58,116,40,239,191,255,254,109,95,235,182,2,199,153,51,103,178,101,203,150,202,241,211,79,63,93,217,32,4,0,0,0,96,52,38,78,156,152,167,159,126,186,114,188,101,203,150,156,57,115,230,182,174,117,91,129,99,104,220,88,185,114,101,218,219,219,111,235,230,0,0,0,192,131,173,189,189,61,43,87,174,172,28,15,109,14,183,226,150,3,199,7,31,124,144,227,199,143,39,73,102,205,154,149,199,31,127,252,182,110,12,0,0,0,144,36,143,63,254,120,102,205,154,149,36,57,126,252,120,62,248,224,131,91,190,198,45,5,142,158,158,158,97,175,132,29,186,227,41,0,0,0,192,237,26,218,24,182,110,221,154,158,158,158,91,250,254,45,5,142,109,219,182,229,202,149,43,73,146,229,203,151,167,181,181,245,150,110,6,0,0,0,48,146,214,214,214,44,95,190,60,73,114,229,202,149,108,219,182,237,150,190,63,234,192,113,236,216,177,236,221,187,55,73,50,117,234,84,143,166,0,0,0,0,119,213,227,143,63,158,169,83,167,38,73,246,238,221,155,99,199,142,141,250,187,163,14,28,239,189,247,94,229,239,85,171,86,101,194,132,9,183,48,34,0,0,0,192,141,77,152,48,33,171,86,173,170,28,15,109,17,55,51,170,192,177,111,223,190,116,116,116,36,73,230,204,153,147,197,139,23,223,226,136,0,0,0,0,55,183,120,241,226,204,153,51,39,73,210,209,209,145,125,251,246,141,234,123,163,10,28,219,183,111,175,252,61,244,213,45,0,0,0,0,119,219,208,246,48,180,73,220,200,77,3,199,238,221,187,211,213,213,149,36,153,63,127,126,218,218,218,110,115,60,0,0,0,128,155,107,107,107,203,252,249,243,147,36,93,93,93,217,189,123,247,77,191,115,211,192,49,244,221,179,43,86,172,184,131,241,0,0,0,0,70,103,104,131,24,218,38,174,231,134,129,99,239,222,189,149,95,111,44,88,176,32,179,102,205,186,195,241,0,0,0,0,110,110,214,172,89,89,176,96,65,146,143,126,197,113,245,205,174,215,115,195,192,241,225,135,31,86,254,126,228,145,71,238,194,120,0,0,0,0,163,51,180,69,12,109,20,35,185,110,224,56,118,236,88,78,157,58,149,36,105,111,111,79,107,107,235,93,26,15,0,0,0,224,230,90,91,91,211,222,222,158,36,57,117,234,84,142,29,59,118,221,115,175,27,56,134,110,224,241,137,79,124,226,46,142,7,0,0,0,48,58,67,155,196,141,54,27,29,49,112,116,119,119,231,224,193,131,73,146,105,211,166,85,118,46,5,0,0,0,24,79,243,231,207,207,180,105,211,146,36,7,15,30,76,119,119,247,136,231,141,24,56,246,237,219,87,249,123,201,146,37,99,48,30,0,0,0,192,232,12,109,19,67,155,197,80,35,6,142,253,251,247,87,254,126,248,225,135,239,242,88,0,0,0,0,163,55,180,77,12,109,22,67,93,19,56,78,156,56,145,115,231,206,37,249,232,213,176,147,39,79,30,163,241,0,0,0,0,110,110,242,228,201,149,87,198,158,59,119,46,39,78,156,184,230,156,107,2,199,213,189,55,146,100,225,194,133,99,56,30,0,0,0,192,232,12,109,20,67,219,197,85,215,4,142,67,135,14,37,73,38,78,156,88,169,35,0,0,0,0,213,180,96,193,130,76,156,56,49,201,47,219,197,80,195,2,199,241,227,199,211,215,215,151,36,222,156,2,0,0,0,220,83,174,182,138,190,190,190,28,63,126,124,216,103,195,2,199,209,163,71,43,127,207,155,55,111,28,70,3,0,0,0,24,157,161,173,98,104,195,72,174,19,56,106,106,106,50,119,238,220,113,24,13,0,0,0,96,116,230,206,157,155,154,154,154,36,55,8,28,231,207,159,79,87,87,87,146,164,189,189,61,19,38,76,24,199,17,1,0,0,0,110,108,194,132,9,105,111,111,79,146,116,117,117,229,252,249,243,149,207,42,129,99,232,43,86,174,158,12,0,0,0,112,47,25,218,44,134,182,140,17,3,199,156,57,115,198,105,44,0,0,0,128,209,27,218,44,70,12,28,39,79,158,76,146,52,52,52,100,250,244,233,227,56,26,0,0,0,192,232,76,159,62,61,13,13,13,73,126,217,50,146,255,31,56,122,122,122,210,211,211,147,36,153,61,123,118,21,198,3,0,0,0,24,157,171,237,98,104,207,168,77,146,211,167,79,87,78,154,53,107,86,21,70,3,0,0,0,24,157,161,237,226,106,211,168,77,146,206,206,206,202,7,51,102,204,24,231,177,0,0,0,0,70,111,104,187,184,218,52,106,147,228,204,153,51,149,15,236,191,1,0,0,0,220,203,134,182,139,171,77,163,54,249,232,221,177,73,50,101,202,148,76,154,52,169,10,163,1,0,0,0,140,206,164,73,147,50,101,202,148,36,191,108,26,181,151,46,93,170,108,200,209,220,220,92,181,225,0,0,0,0,70,235,106,195,232,233,233,201,165,75,151,82,123,254,252,249,202,135,211,166,77,171,214,92,0,0,0,0,163,54,180,97,156,63,127,62,181,221,221,221,149,133,198,198,198,106,204,4,0,0,0,112,75,134,54,140,238,238,238,212,94,125,60,229,227,31,2,0,0,0,220,171,134,54,140,158,158,158,212,246,246,246,86,22,174,110,208,1,0,0,0,112,47,27,218,48,122,123,123,83,219,215,215,87,89,152,60,121,114,53,102,2,0,0,0,184,37,67,27,70,95,95,95,106,47,92,184,80,89,240,138,88,0,0,0,160,4,67,27,198,133,11,23,82,219,223,223,159,36,169,175,175,79,77,77,77,181,230,2,0,0,0,24,181,154,154,154,212,215,215,39,73,250,251,251,135,7,14,0,0,0,128,82,12,11,28,151,47,95,78,146,76,156,56,177,154,51,1,0,0,0,220,146,171,45,227,242,229,203,169,189,114,229,74,146,100,194,132,9,213,156,9,0,0,0,224,150,92,109,25,87,174,92,73,237,192,192,64,146,164,182,182,182,154,51,1,0,0,0,220,146,171,45,99,96,96,32,181,131,131,131,73,98,131,81,0,0,0,160,40,87,91,198,224,224,96,252,108,3,0,0,0,40,94,237,208,218,1,0,0,0,80,138,161,79,165,212,94,125,94,229,234,102,163,0,0,0,0,37,184,218,50,106,107,107,83,91,87,87,55,108,17,0,0,0,160,4,87,91,70,93,93,221,47,3,199,165,75,151,170,57,19,0,0,0,192,45,185,218,50,234,234,234,82,91,95,95,159,36,233,239,239,175,230,76,0,0,0,0,183,228,106,203,168,175,175,79,109,67,67,67,146,143,170,135,199,84,0,0,0,128,18,92,185,114,165,242,11,142,134,134,134,212,78,154,52,169,242,225,133,11,23,170,53,23,0,0,0,192,168,13,109,24,147,38,77,74,237,228,201,147,43,11,189,189,189,213,152,9,0,0,0,224,150,12,109,24,147,39,79,78,237,148,41,83,70,252,16,0,0,0,224,94,53,180,97,76,153,50,37,181,141,141,141,149,133,238,238,238,106,204,4,0,0,0,112,75,134,54,140,198,198,198,225,129,227,252,249,243,213,152,9,0,0,0,224,150,12,109,24,141,141,141,169,109,106,106,170,44,156,59,119,174,26,51,1,0,0,0,220,146,161,13,163,169,169,41,181,181,181,181,105,110,110,78,146,116,117,117,85,107,46,0,0,0,128,81,187,218,48,154,155,155,83,91,91,155,218,36,105,105,105,73,146,244,247,247,219,135,3,0,0,0,184,167,117,119,119,167,191,191,63,201,47,155,198,176,192,145,36,157,157,157,85,24,13,0,0,0,96,116,134,182,139,97,129,99,198,140,25,35,158,4,0,0,0,112,175,25,218,46,174,54,141,218,36,153,57,115,102,229,131,83,167,78,141,243,88,0,0,0,0,163,55,180,93,92,109,26,181,73,210,208,208,80,249,73,199,201,147,39,51,56,56,88,133,241,0,0,0,0,110,108,112,112,48,39,79,158,76,242,209,227,41,13,13,13,73,254,127,224,72,146,214,214,214,36,201,192,192,64,58,58,58,170,48,34,0,0,0,192,141,117,116,116,100,96,96,32,201,47,91,70,50,66,224,72,146,19,39,78,140,227,104,0,0,0,0,163,51,180,89,140,24,56,218,218,218,42,139,199,142,29,27,167,177,0,0,0,0,70,111,104,179,24,218,50,42,129,163,161,161,33,179,103,207,78,242,209,102,29,125,125,125,227,56,30,0,0,0,192,141,245,245,245,85,54,24,157,61,123,118,101,255,141,100,72,224,72,146,185,115,231,86,254,62,114,228,200,56,141,7,0,0,0,112,115,67,91,197,208,134,145,124,44,112,60,244,208,67,149,191,15,31,62,60,198,99,1,0,0,0,140,222,208,86,49,180,97,36,31,11,28,211,167,79,175,188,46,246,200,145,35,185,120,241,226,56,140,7,0,0,0,112,99,23,47,94,172,252,130,163,165,165,37,211,167,79,31,246,121,237,199,191,48,127,254,252,202,223,7,14,28,24,227,241,0,0,0,0,110,110,104,163,24,218,46,174,186,38,112,44,88,176,96,196,47,3,0,0,0,84,203,208,70,49,180,93,92,117,77,224,104,105,105,169,188,71,182,163,163,35,103,206,156,25,195,241,0,0,0,0,110,236,204,153,51,233,232,232,72,146,180,182,182,86,182,215,24,234,154,192,145,36,139,22,45,170,252,189,119,239,222,49,26,15,0,0,0,224,230,134,182,137,161,205,98,168,17,3,199,226,197,139,83,87,87,87,185,200,192,192,192,24,140,7,0,0,0,112,99,3,3,3,149,192,81,87,87,151,197,139,23,143,120,222,136,129,99,194,132,9,89,178,100,73,146,164,191,191,63,187,119,239,30,163,49,1,0,0,0,174,111,247,238,221,233,239,239,79,146,44,89,178,36,19,38,76,24,241,188,17,3,71,146,44,93,186,180,242,247,135,31,126,120,151,199,3,0,0,0,184,185,161,77,98,104,171,248,184,235,6,142,150,150,150,202,107,87,206,158,61,235,141,42,0,0,0,192,184,58,112,224,64,206,158,61,155,228,163,87,195,142,180,185,232,85,215,13,28,73,178,108,217,178,202,223,31,124,240,193,93,26,15,0,0,0,224,230,134,182,136,161,141,98,36,55,12,28,109,109,109,105,111,111,79,146,156,58,117,42,7,15,30,188,11,227,1,0,0,0,220,216,193,131,7,115,234,212,169,36,73,123,123,123,218,218,218,110,120,254,13,3,71,146,60,250,232,163,149,191,119,236,216,113,135,227,1,0,0,0,220,220,208,6,49,180,77,92,207,77,3,199,220,185,115,51,119,238,220,36,201,233,211,167,179,103,207,158,59,24,15,0,0,0,224,198,246,236,217,147,211,167,79,39,25,222,37,110,228,166,129,35,73,86,172,88,81,249,251,189,247,222,187,205,241,0,0,0,0,110,110,104,123,24,218,36,110,100,84,129,99,206,156,57,121,248,225,135,147,36,221,221,221,217,182,109,219,109,140,7,0,0,0,112,99,219,182,109,75,119,119,119,146,228,225,135,31,206,156,57,115,70,245,189,81,5,142,36,89,185,114,101,229,239,119,223,125,55,231,206,157,187,197,17,1,0,0,0,174,239,220,185,115,121,247,221,119,43,199,67,91,196,205,140,58,112,76,155,54,45,143,61,246,88,229,120,235,214,173,163,190,9,0,0,0,192,205,12,109,13,143,61,246,88,166,77,155,54,234,239,142,58,112,36,201,170,85,171,210,220,220,156,36,57,116,232,80,246,238,221,123,43,95,7,0,0,0,24,209,222,189,123,115,232,208,161,36,73,115,115,115,86,173,90,117,75,223,191,165,192,145,36,79,60,241,68,229,239,45,91,182,164,175,175,239,86,47,1,0,0,0,80,209,215,215,151,45,91,182,84,142,135,182,135,209,186,229,192,49,111,222,188,44,93,186,52,73,114,241,226,197,188,245,214,91,183,124,83,0,0,0,128,171,222,122,235,173,92,188,120,49,73,178,116,233,210,204,155,55,239,150,175,113,203,129,35,73,158,122,234,169,52,54,54,38,73,14,28,56,144,93,187,118,221,206,101,0,0,0,128,7,220,174,93,187,114,224,192,129,36,73,99,99,99,158,122,234,169,219,186,206,109,5,142,186,186,186,97,55,220,188,121,115,58,59,59,111,107,0,0,0,0,224,193,212,217,217,153,205,155,55,87,142,159,122,234,169,212,213,213,221,214,181,110,43,112,36,31,61,170,178,98,197,138,202,241,166,77,155,50,56,56,120,187,151,3,0,0,0,30,32,131,131,131,217,180,105,83,229,120,197,138,21,183,245,104,202,85,183,29,56,146,100,245,234,213,153,51,103,78,146,143,170,203,208,193,0,0,0,0,174,103,211,166,77,149,167,65,230,204,153,147,213,171,87,223,209,245,238,40,112,36,201,154,53,107,82,95,95,159,36,217,179,103,79,182,111,223,126,167,151,4,0,0,0,238,99,219,183,111,207,158,61,123,146,36,245,245,245,89,179,102,205,29,95,243,142,3,71,83,83,83,214,174,93,91,57,222,186,117,107,101,115,16,0,0,0,128,161,14,28,56,144,173,91,183,86,142,215,174,93,155,166,166,166,59,190,238,29,7,142,36,153,63,127,254,176,159,146,108,220,184,49,29,29,29,119,227,210,0,0,0,192,125,162,163,163,35,27,55,110,172,28,175,94,189,58,243,231,207,191,43,215,190,43,129,35,249,104,51,144,101,203,150,37,249,104,163,144,13,27,54,164,171,171,235,110,93,30,0,0,0,40,88,87,87,87,54,108,216,80,121,65,201,178,101,203,134,189,188,228,78,221,181,192,145,36,79,63,253,116,165,188,244,245,245,229,245,215,95,79,111,111,239,221,188,5,0,0,0,80,152,222,222,222,188,254,250,235,233,235,235,75,242,209,147,32,79,63,253,244,93,189,199,93,13,28,73,178,110,221,186,180,182,182,38,249,168,206,188,246,218,107,185,112,225,194,221,190,13,0,0,0,80,128,11,23,46,228,181,215,94,171,60,229,209,218,218,154,117,235,214,221,245,251,220,245,192,81,91,91,155,231,159,127,62,51,102,204,72,242,209,235,99,127,250,211,159,138,28,0,0,0,240,128,185,112,225,66,126,250,211,159,86,94,7,59,99,198,140,60,255,252,243,169,173,189,235,57,226,238,7,142,36,105,104,104,200,243,207,63,159,230,230,230,36,201,233,211,167,243,234,171,175,122,92,5,0,0,0,30,16,189,189,189,121,245,213,87,115,250,244,233,36,73,115,115,115,158,127,254,249,52,52,52,140,201,253,198,36,112,36,201,212,169,83,243,226,139,47,86,34,71,103,103,103,126,242,147,159,216,120,20,0,0,0,238,115,94,111,251,111,0,0,32,0,73,68,65,84,93,93,93,249,201,79,126,82,249,229,70,115,115,115,94,124,241,197,76,157,58,117,204,238,89,211,217,217,57,56,102,87,79,210,211,211,147,245,235,215,87,254,81,147,39,79,30,182,79,7,0,0,0,112,255,232,232,232,200,134,13,27,42,27,138,94,125,44,101,44,227,70,50,14,129,35,73,46,94,188,152,245,235,215,167,163,163,227,163,155,214,212,228,185,231,158,203,194,133,11,199,250,214,0,0,0,192,56,57,112,224,64,54,110,220,88,121,21,108,107,107,235,152,62,150,50,212,184,4,142,36,25,24,24,200,134,13,27,114,232,208,161,202,218,19,79,60,145,79,126,242,147,227,113,123,0,0,0,96,12,109,223,190,61,91,183,110,173,28,207,159,63,63,235,214,173,27,147,13,69,71,50,110,129,227,170,205,155,55,103,215,174,93,149,227,37,75,150,100,205,154,53,169,169,169,25,207,49,0,0,0,128,187,96,112,112,48,155,54,109,202,158,61,123,42,107,203,150,45,203,211,79,63,61,174,115,140,123,224,72,146,29,59,118,228,237,183,223,174,28,207,152,49,35,107,214,172,169,188,90,22,0,0,0,184,247,117,118,118,102,211,166,77,149,125,55,147,100,245,234,213,89,177,98,197,184,207,82,149,192,145,36,135,14,29,202,27,111,188,145,254,254,254,202,218,211,79,63,157,101,203,150,85,99,28,0,0,0,224,22,236,218,181,43,155,55,111,174,28,215,215,215,103,237,218,181,153,63,127,126,85,230,169,90,224,72,146,243,231,207,103,211,166,77,57,113,226,68,101,109,225,194,133,121,234,169,167,50,121,242,228,106,141,5,0,0,0,92,71,95,95,95,222,122,235,173,28,56,112,160,178,54,103,206,156,172,89,179,38,77,77,77,85,155,171,170,129,227,170,183,223,126,59,59,118,236,168,28,55,52,52,228,201,39,159,204,226,197,139,171,56,21,0,0,0,48,212,222,189,123,179,101,203,150,92,188,120,177,178,182,98,197,138,172,94,189,186,138,83,125,228,158,8,28,73,114,248,240,225,188,245,214,91,233,238,238,174,172,205,159,63,63,79,60,241,68,166,77,155,86,197,201,0,0,0,224,193,118,238,220,185,108,221,186,117,216,155,81,27,27,27,243,212,83,79,101,222,188,121,85,156,236,151,238,153,192,145,36,151,47,95,206,91,111,189,149,221,187,119,15,91,127,236,177,199,178,106,213,170,42,77,5,0,0,0,15,174,109,219,182,229,221,119,223,29,182,182,116,233,210,60,245,212,83,169,171,171,171,210,84,215,186,167,2,199,85,135,15,31,206,214,173,91,211,213,213,85,89,107,108,108,204,202,149,43,179,100,201,146,42,78,6,0,0,0,15,134,61,123,246,228,189,247,222,27,246,164,69,115,115,115,158,120,226,137,123,230,87,27,67,221,147,129,227,170,145,42,209,204,153,51,179,98,197,138,44,88,176,160,74,83,1,0,0,192,253,235,224,193,131,217,177,99,71,78,159,62,61,108,253,94,127,186,226,158,14,28,201,71,207,249,188,247,222,123,217,183,111,223,176,245,89,179,102,229,209,71,31,205,194,133,11,171,52,25,0,0,0,220,63,14,28,56,144,15,62,248,32,167,78,157,26,182,254,240,195,15,103,229,202,149,247,252,254,152,247,124,224,184,234,196,137,19,217,177,99,71,142,30,61,58,108,189,165,165,37,159,248,196,39,178,116,233,210,212,214,214,86,105,58,0,0,0,40,207,192,192,64,118,239,222,157,15,63,252,48,103,207,158,29,246,217,220,185,115,179,98,197,138,204,153,51,167,74,211,221,154,98,2,199,85,71,143,30,205,7,31,124,144,99,199,142,13,91,175,175,175,207,226,197,139,179,120,241,226,76,159,62,189,74,211,1,0,0,192,189,239,204,153,51,217,187,119,111,246,238,221,155,254,254,254,97,159,181,183,183,231,209,71,31,205,220,185,115,171,52,221,237,41,46,112,92,117,252,248,241,236,218,181,107,216,43,106,174,106,109,109,205,194,133,11,179,112,225,194,52,52,52,84,97,58,0,0,0,184,183,92,188,120,49,7,14,28,200,129,3,7,210,209,209,113,205,231,243,231,207,207,178,101,203,210,214,214,86,133,233,238,92,177,129,227,170,179,103,207,102,247,238,221,217,179,103,79,46,95,190,124,205,231,15,61,244,80,230,205,155,151,135,30,122,40,147,39,79,174,194,132,0,0,0,80,29,125,125,125,57,114,228,72,14,31,62,156,35,71,142,92,243,121,93,93,93,150,44,89,146,165,75,151,166,165,165,165,10,19,222,61,197,7,142,171,174,92,185,146,189,123,247,102,255,254,253,35,150,168,228,163,141,73,219,219,219,51,103,206,156,180,182,182,166,166,166,102,156,167,4,0,0,128,177,51,56,56,152,142,142,142,156,56,113,34,199,142,29,187,102,195,208,171,90,91,91,179,104,209,162,44,94,188,56,19,38,76,24,231,41,199,198,125,19,56,134,58,123,246,108,14,30,60,152,67,135,14,93,179,73,202,85,181,181,181,153,61,123,118,102,205,154,149,25,51,102,100,198,140,25,105,108,108,28,231,73,1,0,0,224,246,117,119,119,167,179,179,51,157,157,157,57,117,234,84,78,158,60,153,129,129,129,17,207,109,105,105,201,252,249,243,179,96,193,130,226,127,173,49,146,251,50,112,12,117,230,204,153,28,57,114,36,71,143,30,205,201,147,39,111,120,110,125,125,125,154,155,155,51,109,218,180,52,53,53,165,177,177,49,83,166,76,201,148,41,83,50,105,210,164,251,166,106,1,0,0,80,134,43,87,174,228,194,133,11,233,237,237,77,111,111,111,186,187,187,115,254,252,249,156,59,119,46,93,93,93,215,108,16,250,113,179,103,207,206,220,185,115,243,208,67,15,221,247,47,228,184,239,3,199,80,23,47,94,204,241,227,199,211,209,209,145,142,142,142,235,254,186,227,122,38,78,156,152,250,250,250,76,156,56,49,19,38,76,200,132,9,19,60,230,2,0,0,192,93,49,56,56,152,43,87,174,228,202,149,43,185,116,233,82,250,251,251,115,233,210,165,91,186,70,75,75,75,90,91,91,211,218,218,154,182,182,182,7,234,197,27,15,84,224,248,184,139,23,47,230,244,233,211,233,236,236,204,217,179,103,115,246,236,217,116,117,117,85,123,44,0,0,0,184,169,230,230,230,180,180,180,164,165,165,37,51,102,204,200,204,153,51,31,168,160,241,113,15,116,224,24,201,192,192,64,206,159,63,159,238,238,238,116,119,119,167,183,183,55,125,125,125,185,112,225,66,46,94,188,152,254,254,254,92,190,124,57,151,47,95,206,192,192,64,6,7,7,51,56,232,63,33,0,0,0,183,175,166,166,38,53,53,53,169,173,173,77,93,93,93,234,234,234,82,95,95,159,134,134,134,76,154,52,41,147,39,79,206,148,41,83,210,216,216,152,198,198,198,52,53,53,165,182,182,182,218,99,223,83,4,14,0,0,0,160,120,114,15,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,0,0,0,80,60,129,3,0,0,0,40,158,192,1,0,0,0,20,79,224,0,0,0,0,138,39,112,0,0,0,0,197,19,56,0,0,0,128,226,9,28,0,0,0,64,241,4,14,0,0,0,160,120,2,7,252,191,246,237,216,4,128,24,136,129,32,7,223,127,191,23,249,139,112,96,22,102,42,80,188,32,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,79,224,0,0,0,0,242,4,14,0,0,0,32,111,118,247,188,30,1,0,0,0,112,227,155,153,215,27,0,0,0,0,174,184,168,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,75,221,190,53,0,0,3,74,73,68,65,84,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,39,112,0,0,0,0,121,2,7,0,0,0,144,247,3,119,27,243,68,230,92,101,24,0,0,0,0,73,69,78,68,174,66,96,130]},{"layer_unique_id":53438,"duration_micros":1862,"top":917.779296875,"left":-6.208984375,"width":370.90625,"height":58.39453125,"snapshot":[137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,4,56,0,0,8,106,8,6,0,0,0,106,246,175,7,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,32,0,73,68,65,84,120,156,236,221,59,168,101,213,25,192,241,255,12,226,168,131,226,21,71,25,95,51,248,140,241,85,104,192,66,84,196,136,70,145,1,141,32,136,133,166,9,18,193,214,86,44,108,180,10,196,202,82,197,144,34,69,10,21,139,164,74,138,196,248,78,196,7,137,10,26,21,108,198,104,194,76,138,181,135,57,94,231,142,119,204,245,156,57,227,239,7,135,179,215,62,103,175,245,237,189,118,179,62,214,94,187,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,229,179,105,209,1,0,27,110,75,117,217,76,121,119,245,202,130,98,57,84,103,86,219,103,202,239,86,31,45,40,22,0,0,96,137,28,181,232,0,128,13,119,108,117,239,76,249,141,150,39,193,241,131,234,246,153,242,227,73,112,0,0,0,235,112,56,38,56,46,174,126,177,129,245,61,82,189,189,129,245,193,162,92,88,237,170,182,86,191,175,158,171,246,206,177,253,109,213,29,213,89,213,75,213,111,170,207,231,216,62,0,0,192,154,54,47,58,0,96,93,182,84,247,84,59,27,137,134,219,170,115,230,28,195,174,234,210,234,196,234,234,234,170,57,183,15,0,0,176,166,195,113,6,199,145,98,165,49,27,101,159,143,170,191,45,40,22,150,223,113,213,9,171,246,173,204,57,134,237,171,202,39,207,185,125,0,0,128,53,45,67,130,227,157,234,133,255,227,248,79,54,42,144,67,180,82,221,53,83,126,62,9,14,190,189,207,26,247,207,5,83,249,223,205,255,209,171,63,87,167,207,148,95,155,115,251,0,0,0,107,90,134,4,199,167,213,159,22,29,4,44,216,158,234,87,213,229,213,209,141,69,67,231,157,188,251,93,245,65,99,230,198,187,213,223,231,220,62,0,0,192,154,150,33,193,1,12,187,171,63,44,176,253,61,141,89,28,0,0,0,135,29,139,140,2,0,0,0,75,79,130,3,0,0,0,88,122,223,215,71,84,30,173,182,78,219,47,85,191,156,182,55,87,231,53,94,133,185,163,58,165,49,45,255,95,141,245,6,254,82,189,183,70,157,63,174,110,63,72,155,215,79,159,89,63,159,234,63,152,205,213,185,213,37,211,247,169,213,23,141,245,23,62,168,94,175,222,168,62,255,134,122,234,171,231,253,94,245,208,180,125,118,117,69,227,181,163,167,53,214,120,120,184,250,199,58,234,92,143,141,60,135,159,85,63,154,41,223,87,253,183,113,47,95,56,125,118,52,214,137,216,83,125,216,88,168,246,197,198,249,236,93,85,223,166,246,247,249,57,83,108,123,26,107,191,188,51,197,245,242,212,198,161,58,163,250,97,227,250,158,210,88,120,246,203,169,238,125,107,88,188,58,237,91,143,7,167,115,219,231,129,198,99,43,243,178,171,186,105,166,252,88,227,250,172,199,89,213,101,237,239,255,170,143,171,183,26,215,224,205,190,222,55,0,0,0,235,246,125,77,112,204,58,102,250,222,94,253,180,186,232,0,255,89,169,206,175,110,169,158,173,126,91,253,103,14,177,237,104,36,77,206,95,181,127,107,117,82,99,96,126,77,227,21,180,191,174,254,122,8,117,111,105,36,30,110,169,110,62,192,239,27,53,216,252,46,207,161,198,61,188,179,209,119,59,15,240,251,73,141,164,199,79,170,63,86,79,181,63,41,176,82,221,217,24,120,175,118,252,20,251,181,213,63,171,39,170,247,215,25,211,182,41,158,3,213,123,92,117,98,35,233,113,93,35,217,241,76,35,121,118,36,14,240,183,86,183,54,174,227,106,43,141,254,191,177,209,239,79,207,49,46,0,0,224,8,35,193,49,6,250,59,171,251,219,63,187,225,96,110,152,142,121,178,239,118,64,122,101,117,119,253,143,189,123,255,181,236,44,11,56,254,45,189,218,2,58,109,177,180,181,210,54,128,34,197,122,99,106,42,210,154,152,24,141,196,138,6,84,130,168,63,64,148,24,18,47,63,248,31,152,52,26,162,137,215,120,11,104,12,70,83,68,131,65,41,173,225,210,32,72,138,237,88,16,139,85,219,98,3,189,115,177,206,116,252,225,157,147,217,103,205,57,115,246,185,238,115,246,124,62,73,211,188,107,214,218,251,121,247,218,231,135,245,236,231,125,159,206,158,227,220,175,173,126,174,122,71,245,193,57,95,255,130,70,213,201,90,201,141,157,178,219,115,168,186,161,122,253,156,239,113,67,227,30,255,118,245,194,234,231,27,201,134,141,92,85,253,98,245,171,141,68,204,233,188,180,49,143,175,154,227,117,107,36,96,222,82,221,86,253,93,203,149,228,184,168,241,89,188,120,142,115,175,111,220,147,207,238,106,68,0,0,192,210,146,224,24,75,25,222,218,201,228,198,221,141,22,156,79,85,231,54,30,110,95,213,248,229,125,197,77,141,110,18,179,229,249,119,84,31,154,25,95,93,189,109,242,239,239,158,188,247,122,203,83,190,163,250,233,201,177,251,170,143,53,202,250,159,211,120,48,254,214,86,87,156,188,177,241,0,62,79,251,206,231,85,175,157,28,123,170,122,162,186,100,142,235,55,178,23,115,168,250,137,19,255,63,86,125,184,81,109,241,100,35,9,117,85,117,99,171,239,221,117,141,106,142,195,157,76,110,252,123,227,126,62,122,98,124,233,137,184,174,157,185,238,162,70,34,229,55,79,19,203,215,53,190,75,23,204,28,123,224,68,92,15,86,95,105,124,167,94,120,34,174,151,204,156,119,203,137,216,239,57,205,235,31,36,207,169,126,170,83,147,27,15,52,190,3,143,118,242,59,112,184,186,178,177,116,229,178,0,0,0,182,64,130,227,100,98,227,241,234,15,58,245,193,250,163,213,237,213,155,91,253,192,123,99,171,19,28,255,215,234,101,43,95,153,188,206,209,230,219,47,225,178,234,77,51,227,99,141,170,134,187,58,245,215,253,15,54,74,255,127,108,230,216,143,84,183,54,255,158,17,79,85,127,211,88,34,241,228,204,123,156,53,231,245,107,217,235,57,220,87,253,73,39,19,20,43,238,106,44,41,250,201,70,98,99,197,108,213,202,159,53,90,175,78,147,77,127,95,125,87,35,225,178,226,186,70,210,228,191,214,136,225,172,70,2,100,54,185,241,222,198,103,59,157,199,253,39,98,251,161,198,242,140,21,175,105,236,71,177,12,85,28,135,27,251,154,204,122,103,227,126,79,231,247,190,70,117,205,27,26,9,32,0,0,128,77,211,69,101,120,188,122,123,235,87,13,60,214,216,187,97,214,43,218,157,207,239,135,27,155,124,174,120,71,245,145,214,126,232,61,94,125,160,213,75,58,174,110,108,108,57,143,71,27,243,190,163,81,185,49,251,30,219,121,200,222,203,57,60,216,88,114,50,77,110,172,120,162,145,252,88,107,3,211,119,87,119,182,118,37,205,241,19,49,221,57,57,126,205,58,239,115,69,171,247,25,185,175,177,87,203,122,73,154,103,171,247,180,122,95,143,171,27,251,119,28,116,231,52,246,221,152,245,23,141,68,210,90,223,129,103,27,223,143,223,223,229,184,0,0,128,37,118,16,42,56,190,189,250,221,45,92,119,107,245,153,57,207,125,87,245,240,6,231,60,208,232,248,113,197,137,241,133,141,242,250,207,111,33,182,245,124,125,99,105,196,138,35,141,95,250,55,242,15,141,101,52,43,14,55,186,195,108,228,175,90,191,43,204,86,237,245,28,110,235,212,106,153,169,39,27,149,56,55,205,28,123,162,122,255,28,175,127,247,228,186,43,215,57,111,37,97,177,226,179,109,220,33,231,104,163,114,102,246,53,95,208,198,251,124,236,119,223,216,234,101,78,15,53,146,104,27,185,187,250,199,234,213,187,17,20,0,0,176,220,14,66,130,99,47,252,243,156,231,253,103,39,19,28,53,255,70,146,243,154,118,221,184,179,249,42,41,30,110,180,217,92,217,211,225,250,70,169,255,70,157,94,62,190,169,232,230,179,215,115,248,194,156,113,61,52,25,127,172,209,170,118,35,211,4,214,115,215,57,239,225,198,114,148,205,122,106,50,190,112,205,179,14,150,151,77,198,183,55,255,114,163,131,158,220,1,0,0,22,196,18,149,97,222,229,24,211,101,14,231,173,121,214,214,189,98,50,158,183,2,165,70,114,96,197,121,141,174,36,27,217,168,194,96,43,246,122,14,243,154,222,187,121,31,164,167,73,144,157,78,64,76,239,193,60,221,96,246,187,151,76,198,159,90,72,20,0,0,192,25,229,32,84,112,220,223,216,240,113,179,118,227,151,224,105,34,100,59,27,113,78,157,95,189,104,102,252,68,163,155,199,165,115,94,63,125,48,126,126,171,247,119,216,11,251,121,14,211,123,183,213,228,206,102,146,130,95,211,120,216,191,162,209,57,229,162,70,130,100,246,53,230,105,77,124,144,156,215,234,239,192,23,219,217,101,92,0,0,0,107,58,8,9,142,199,154,127,9,201,65,246,188,201,248,171,171,95,217,198,235,237,244,242,153,121,44,195,28,118,194,149,213,247,87,175,92,116,32,11,112,193,100,252,96,187,83,41,4,0,0,176,202,65,72,112,156,41,118,122,185,203,78,191,222,34,222,115,17,115,216,174,155,171,31,95,116,16,11,116,254,100,60,79,107,100,0,0,128,109,147,224,216,63,150,97,63,148,101,152,195,118,188,170,83,147,27,31,106,116,74,121,184,177,161,232,51,173,94,46,243,234,234,13,123,18,221,222,152,46,219,218,78,187,97,0,0,128,185,73,112,236,31,211,110,33,159,168,126,103,17,129,108,195,50,204,97,171,14,85,63,58,51,254,114,245,91,213,167,23,19,206,194,76,91,246,46,67,87,24,0,0,224,0,56,211,127,113,223,79,166,93,62,118,178,131,200,94,89,134,57,108,213,55,183,122,207,144,219,58,243,146,27,117,106,130,227,242,118,118,51,94,0,0,128,53,73,112,236,31,79,55,186,142,172,184,178,209,133,227,32,89,134,57,108,213,180,53,234,145,133,68,177,120,207,84,255,49,51,126,126,117,201,130,98,1,0,0,206,32,18,28,251,199,179,213,39,39,199,174,91,68,32,219,176,12,115,216,170,67,147,241,180,154,101,61,203,88,221,48,173,92,249,134,133,68,1,0,0,156,81,36,56,246,151,123,38,227,239,109,115,173,82,47,109,241,251,170,44,195,28,182,98,186,153,230,60,149,43,231,86,223,185,11,177,44,218,180,122,229,166,234,236,57,174,59,171,186,106,231,195,1,0,0,206,4,18,28,187,103,186,225,230,60,15,249,247,84,15,206,140,47,175,110,105,190,251,116,73,245,182,234,103,27,203,2,22,101,25,230,176,21,15,79,198,175,220,224,252,115,171,215,85,215,78,142,47,195,223,228,167,91,253,121,188,168,250,238,57,174,59,92,221,176,43,17,1,0,0,75,111,25,30,166,246,171,167,39,227,151,181,113,71,137,163,213,95,78,142,221,92,189,190,186,104,157,107,206,170,94,94,253,82,99,83,207,235,170,183,54,223,47,230,187,97,25,230,176,21,211,170,133,239,171,110,108,237,37,40,151,85,111,110,180,136,157,58,136,213,43,83,199,170,191,158,28,123,93,163,141,238,90,159,199,57,213,247,84,63,179,203,113,1,0,0,75,236,32,60,76,29,170,190,109,27,215,63,84,125,110,135,98,217,140,199,171,71,58,217,73,228,226,234,151,171,187,26,201,143,139,171,247,85,255,59,185,238,222,234,61,213,107,102,142,221,92,93,95,125,164,177,129,227,151,26,21,33,135,26,149,2,179,27,92,30,107,36,24,142,237,220,84,54,109,25,230,176,89,255,82,221,223,234,138,140,55,53,146,24,71,170,47,86,23,84,87,55,58,174,172,231,160,85,174,172,231,19,213,63,117,178,146,229,236,234,141,141,239,193,199,171,199,26,9,214,75,27,149,27,47,88,64,140,0,0,192,18,57,8,9,142,107,171,183,108,227,250,119,182,152,4,199,241,234,142,198,47,215,43,174,168,94,59,51,190,189,83,19,28,85,127,219,120,184,191,101,230,216,161,234,7,54,120,207,39,171,63,108,127,180,39,93,134,57,108,198,209,234,143,171,95,104,245,254,27,215,156,248,111,45,255,93,125,184,213,223,145,203,119,37,186,189,119,188,250,211,234,185,141,234,165,21,87,181,254,62,27,95,104,36,192,126,112,119,67,3,0,0,150,145,37,42,187,235,206,234,163,167,249,247,245,62,255,227,213,123,171,223,104,117,203,205,211,57,82,221,90,253,235,220,209,237,174,101,152,195,102,253,79,245,107,213,191,205,113,238,7,170,183,119,106,215,153,111,170,206,223,225,184,22,229,203,213,239,85,239,159,227,220,79,54,62,143,79,237,106,68,0,0,192,210,58,8,21,28,7,217,209,234,143,26,229,250,135,27,213,40,231,84,143,54,150,51,60,179,193,245,247,54,30,248,94,220,104,181,121,77,99,105,203,161,198,50,151,207,53,146,7,71,170,207,116,106,39,143,253,96,25,230,176,25,143,84,191,222,168,90,120,121,99,222,23,55,238,245,35,141,202,148,187,59,185,17,235,211,213,159,183,250,111,241,194,214,174,236,57,136,190,84,189,171,81,153,241,45,213,75,27,203,182,142,87,159,111,252,29,220,219,248,92,142,183,60,201,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,101,88,235,115,0,0,14,104,73,68,65,84,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,224,255,219,131,67,2,0,0,0,0,65,255,95,123,195,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,94,100,126,31,153,1,40,229,129,0,0,0,0,73,69,78,68,174,66,96,130]},{"layer_unique_id":53441,"duration_micros":1469,"top":923.0,"left":33.0,"width":5.5,"height":52.25,"snapshot":[137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,4,56,0,0,8,106,8,6,0,0,0,106,246,175,7,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,32,0,73,68,65,84,120,156,236,193,1,1,0,0,0,128,144,254,175,238,8,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,217,131,3,1,0,0,0,0,32,255,215,70,80,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,38,236,249,77,0,0,3,107,73,68,65,84,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,105,15,14,9,0,0,0,0,4,253,127,237,9,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,252,2,13,124,0,1,145,195,48,193,0,0,0,0,73,69,78,68,174,66,96,130]},{"layer_unique_id":53445,"duration_micros":1842,"top":1082.5,"left":0.0,"width":1080.0,"height":200.75,"snapshot":[137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,4,56,0,0,8,106,8,6,0,0,0,106,246,175,7,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,32,0,73,68,65,84,120,156,236,193,1,1,0,0,0,128,144,254,175,238,8,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,217,187,239,104,219,211,187,190,239,239,185,115,167,247,222,53,93,26,149,25,141,144,80,1,201,234,8,131,76,81,140,77,32,54,54,37,94,177,189,112,33,137,131,193,133,24,39,36,38,49,113,22,105,14,118,72,2,24,43,89,216,65,52,33,4,42,168,160,174,209,72,154,209,140,166,104,122,239,51,119,106,254,120,246,230,236,187,239,62,247,158,126,110,121,189,214,218,107,126,251,217,191,242,156,115,230,159,253,185,207,243,253,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,112,104,56,108,187,39,0,19,111,174,254,213,130,241,43,171,39,182,120,46,0,0,0,28,96,118,206,28,255,104,245,147,43,188,238,241,234,158,234,107,213,231,171,143,87,215,84,47,108,232,236,0,0,0,0,86,96,231,190,79,89,232,184,234,226,201,235,219,38,99,31,171,254,89,245,197,13,152,23,0,0,0,192,138,237,216,192,123,125,75,245,27,213,127,184,129,247,4,0,0,0,216,167,141,12,56,166,126,182,250,158,77,184,47,0,0,0,192,66,43,217,162,242,143,170,167,230,198,142,169,206,175,222,83,157,186,224,154,127,92,125,186,186,109,93,179,3,0,0,0,88,129,149,4,28,255,190,122,116,153,207,254,167,234,159,84,223,57,55,126,66,245,23,171,255,110,237,83,3,0,0,0,88,153,245,110,81,121,184,250,233,234,214,5,159,253,249,234,136,117,222,31,0,0,0,96,159,214,218,69,101,214,35,213,123,171,159,152,27,63,179,186,160,250,250,50,215,93,88,189,185,122,85,245,146,234,236,201,189,110,171,190,84,125,164,250,84,245,244,10,231,113,108,245,150,234,181,213,213,213,57,213,243,213,237,213,45,213,71,171,79,84,119,174,240,126,103,86,111,175,190,185,186,98,102,126,183,55,218,227,126,180,250,100,139,87,183,252,181,234,63,159,27,251,133,234,127,92,112,238,75,171,247,205,141,93,214,226,150,187,127,212,248,157,206,122,79,245,133,101,126,134,83,170,111,173,254,76,117,73,227,119,254,248,228,103,184,102,230,103,120,102,153,235,171,206,106,116,200,153,245,120,117,85,117,120,245,29,147,57,188,162,177,93,233,71,38,243,156,247,170,234,93,213,107,38,243,184,175,186,182,250,205,198,223,122,53,174,168,254,102,245,77,213,205,213,47,85,127,176,202,123,0,0,0,112,16,217,136,128,163,234,43,203,140,159,214,158,1,199,89,213,143,87,223,191,224,252,147,26,95,224,223,80,253,88,163,142,199,63,109,223,173,103,191,189,250,7,141,16,98,222,153,141,47,215,223,83,237,170,126,177,250,229,234,177,101,238,117,84,245,87,170,191,53,57,94,52,191,215,87,127,169,186,163,209,26,247,125,141,48,101,106,81,224,240,138,101,158,247,170,5,99,23,183,231,239,109,26,24,205,122,178,186,110,193,245,135,87,127,161,250,219,213,233,115,159,157,218,210,207,240,99,213,231,27,63,195,39,150,153,223,34,199,85,199,55,234,179,188,103,238,179,231,231,222,31,219,8,123,254,210,130,121,188,184,250,222,234,223,85,31,94,225,179,79,169,254,101,117,238,228,253,89,213,235,170,239,171,62,187,194,123,0,0,0,112,144,217,168,46,42,187,150,25,63,124,238,253,37,213,175,180,56,220,88,228,53,213,175,54,254,165,126,57,63,220,8,45,22,133,27,243,142,170,254,110,245,47,26,95,210,231,29,89,253,92,227,11,249,124,184,177,200,185,213,63,111,4,9,135,205,140,47,10,124,190,185,61,127,31,53,218,235,206,187,122,193,216,197,11,198,62,220,158,5,96,143,110,212,69,249,217,246,12,55,22,185,186,213,253,77,166,126,162,61,195,141,170,103,103,142,167,191,207,249,112,99,222,247,84,255,253,10,159,123,101,75,225,198,172,55,173,240,122,0,0,0,14,66,27,21,112,156,179,204,248,236,246,141,99,26,69,71,23,125,81,159,63,119,214,49,141,0,99,209,151,245,87,87,63,181,96,252,217,198,138,132,143,45,115,223,55,87,127,127,193,248,127,84,125,215,130,241,7,26,97,194,231,150,153,227,223,104,247,214,184,15,87,31,159,59,103,186,250,99,214,177,213,219,22,220,111,81,232,113,217,130,177,79,46,24,251,219,141,2,175,171,245,79,171,119,172,226,252,191,188,204,248,115,51,199,63,208,158,5,104,215,235,201,101,198,31,223,224,231,0,0,0,112,0,217,136,128,227,240,234,207,45,243,217,55,102,142,223,222,168,219,48,239,231,26,43,52,174,110,108,215,248,185,5,231,156,89,125,247,130,241,69,43,3,126,191,241,175,249,63,56,249,252,77,213,175,45,56,239,251,219,61,108,57,186,81,59,99,222,47,54,106,88,252,213,70,225,212,183,52,182,206,204,251,235,237,190,66,99,62,224,168,186,116,238,253,149,45,94,41,242,142,201,124,102,189,116,193,121,243,91,119,94,215,216,118,50,239,142,234,191,108,252,78,126,184,177,197,99,145,127,210,216,86,180,30,211,128,227,180,70,216,178,200,255,93,253,104,245,67,213,127,85,221,179,138,251,127,190,61,107,118,220,221,158,117,76,0,0,0,56,132,172,183,6,199,225,141,213,11,139,182,7,252,118,163,40,231,212,55,47,56,231,253,237,254,101,251,145,201,251,87,84,239,158,59,247,45,141,98,146,83,59,90,188,226,224,231,219,253,11,243,163,213,127,211,88,153,49,191,45,229,170,234,166,201,241,37,237,185,74,228,142,198,118,150,217,109,23,223,104,212,172,248,245,185,115,167,69,60,167,181,51,22,213,225,184,188,221,139,97,190,102,193,57,53,218,236,190,180,221,87,140,204,111,211,217,213,158,245,55,126,120,193,189,110,109,4,27,119,204,140,125,168,177,194,229,151,230,206,61,179,241,123,250,215,203,204,107,222,53,141,122,38,215,53,86,86,28,51,243,156,183,54,126,142,121,63,85,253,155,153,247,31,173,126,167,149,23,26,125,166,250,79,26,255,127,92,218,248,91,255,86,35,228,0,0,0,224,16,181,146,128,227,123,171,135,230,198,142,106,20,119,252,246,22,175,44,168,241,175,244,179,126,185,209,109,101,214,252,125,167,62,218,158,1,199,43,231,222,239,108,124,161,94,137,71,27,5,49,231,191,112,223,50,115,188,104,37,197,142,22,119,51,249,106,245,51,11,198,103,183,79,92,187,224,243,151,207,189,127,243,130,115,166,94,211,82,192,113,114,163,211,204,172,143,84,79,204,188,191,176,197,129,207,207,181,123,184,49,245,71,213,255,217,158,91,77,126,176,250,63,90,252,115,207,251,129,185,57,204,122,203,130,177,63,105,207,96,168,201,252,222,215,158,127,243,229,60,217,158,255,47,1,0,0,112,8,91,73,192,241,143,214,112,223,127,221,158,245,33,150,107,23,187,200,162,186,25,199,53,230,59,93,77,241,116,163,157,236,124,119,146,159,174,254,97,99,229,194,172,223,216,199,51,23,133,0,103,87,127,175,177,77,229,225,153,241,199,26,225,192,222,60,216,216,202,50,187,74,227,181,141,208,228,249,70,64,244,234,153,207,238,107,247,21,36,111,110,105,117,203,162,186,37,159,154,123,127,229,130,115,30,109,172,214,88,206,111,181,103,192,113,113,245,162,118,15,127,22,249,199,45,31,110,28,222,216,46,51,239,55,91,62,56,249,157,86,30,112,0,0,0,192,110,54,170,77,236,172,95,171,254,219,125,156,115,116,227,139,255,107,26,43,64,94,212,104,27,186,175,174,31,135,205,189,255,181,70,113,204,89,111,170,254,176,81,139,227,227,141,149,20,95,110,249,47,227,83,119,55,66,144,239,157,27,255,145,70,237,141,223,105,172,168,184,182,250,90,187,111,91,89,206,199,218,61,224,56,189,209,1,228,182,246,92,145,242,139,213,159,109,132,32,53,90,229,158,86,221,223,158,181,59,106,207,45,48,151,47,56,231,115,237,217,101,101,214,141,203,140,95,212,190,3,142,47,237,229,179,83,26,127,207,121,55,45,24,155,90,174,120,40,0,0,0,236,211,70,6,28,55,85,191,208,88,21,176,220,191,210,31,86,125,71,245,159,181,103,71,145,181,120,111,35,16,88,84,128,244,157,147,87,141,122,21,191,219,168,11,242,225,198,234,143,69,254,89,99,43,200,203,230,198,79,106,20,37,157,182,82,189,175,250,119,213,239,53,66,132,229,126,222,207,47,24,187,164,17,112,204,175,112,248,116,99,155,204,107,103,198,174,110,212,236,184,98,238,220,103,27,219,100,102,157,188,224,89,119,45,51,175,169,71,26,191,155,249,237,57,39,238,227,186,26,181,48,150,115,236,50,227,15,47,51,14,0,0,0,235,178,214,46,42,143,55,182,128,252,81,99,229,193,15,53,130,139,247,181,247,112,227,239,52,138,118,110,68,184,81,163,99,199,127,209,40,34,186,107,47,231,29,213,8,65,254,215,70,40,178,104,251,68,141,85,28,127,181,250,183,251,120,238,233,141,46,32,239,109,252,252,203,253,60,139,234,112,188,184,241,123,127,251,204,216,93,141,66,157,243,219,78,166,133,89,175,158,27,95,212,254,118,81,65,207,125,5,10,207,181,56,4,153,47,198,186,90,139,234,153,212,242,173,128,1,0,0,96,93,86,178,130,227,234,54,230,139,233,219,27,29,87,230,125,160,250,149,198,118,137,233,54,146,63,215,202,107,127,60,93,253,111,213,191,111,108,241,120,103,245,250,189,156,255,138,70,253,140,191,49,121,246,188,251,170,159,156,156,243,237,213,183,53,66,137,229,188,171,177,226,227,71,218,115,203,199,125,141,85,28,179,1,197,75,27,171,56,102,67,145,223,107,132,13,95,174,30,104,105,123,199,59,26,1,202,171,230,238,187,168,5,237,99,11,198,246,181,18,99,71,163,115,202,188,125,109,231,217,151,229,86,200,172,180,40,44,0,0,0,172,202,90,87,112,172,197,143,46,24,251,205,234,175,55,182,141,220,222,40,204,249,96,187,183,121,93,169,187,27,221,63,126,176,250,150,70,43,209,255,185,209,214,117,222,206,70,157,144,189,213,252,248,74,245,207,27,43,83,190,173,250,79,27,237,77,23,133,61,23,52,186,170,204,215,8,169,250,227,185,247,211,218,35,179,166,129,197,211,141,176,99,234,226,22,119,70,89,212,130,118,81,71,154,179,23,140,205,58,177,197,161,195,122,183,146,60,190,151,231,1,0,0,192,134,219,170,128,227,140,150,182,91,204,250,245,198,202,133,121,235,173,13,114,119,245,254,234,231,27,225,196,79,45,56,231,164,70,33,207,125,121,161,177,50,227,55,38,247,121,75,139,59,168,188,161,81,156,115,222,124,24,113,126,99,75,207,172,207,205,28,207,175,206,248,241,5,247,156,175,191,81,117,253,130,177,43,171,35,23,140,79,45,154,111,213,205,123,185,102,37,30,108,172,68,153,119,217,94,174,57,122,157,207,4,0,0,224,16,182,25,93,84,22,57,101,153,241,187,151,25,127,235,10,238,249,67,141,176,97,214,175,180,231,182,147,167,27,43,47,94,211,158,29,82,206,153,57,254,249,70,215,146,89,63,211,158,95,246,31,170,254,235,198,246,149,249,237,29,103,182,103,167,144,69,221,70,102,183,188,124,172,177,149,101,234,51,115,231,190,104,238,253,199,91,188,194,98,209,115,78,109,4,47,203,181,138,125,215,130,177,91,219,179,197,238,106,61,87,125,162,177,250,101,214,119,55,254,22,139,124,251,58,159,9,0,0,192,33,108,171,2,142,229,90,128,94,94,125,125,110,236,164,234,123,86,112,207,93,213,159,153,27,123,176,197,117,53,106,241,246,145,217,22,170,59,22,220,239,245,45,191,154,97,209,239,110,81,75,214,187,27,181,53,230,59,179,76,253,225,220,251,187,26,29,85,230,183,177,76,45,170,191,81,99,158,31,172,222,54,55,254,247,26,197,78,239,155,27,127,109,245,195,11,238,243,43,45,95,40,118,53,62,216,158,1,199,107,171,239,108,116,218,153,117,94,245,93,171,184,247,49,213,187,27,181,76,238,157,220,111,185,176,12,0,0,128,67,192,86,5,28,119,55,190,96,207,215,188,248,233,198,191,246,127,161,177,149,226,202,234,111,238,229,62,179,33,197,135,218,179,197,233,119,87,183,52,106,113,76,87,57,28,222,248,82,189,40,52,249,202,204,241,111,183,103,187,217,191,223,40,222,249,254,150,10,103,30,223,168,27,114,234,220,185,143,182,231,234,141,169,143,180,124,192,241,233,5,99,127,208,242,1,199,162,250,27,83,255,170,61,3,142,151,52,86,77,252,82,99,171,205,17,147,123,255,181,246,252,251,79,219,223,110,132,63,106,252,13,78,154,27,255,23,141,66,175,159,104,4,41,47,169,254,202,42,238,123,68,163,182,202,155,102,198,126,180,122,79,251,110,139,11,0,0,192,65,106,171,2,142,167,171,95,174,126,98,110,252,220,70,235,214,149,218,217,82,208,112,103,163,195,200,223,157,59,231,199,27,1,196,23,26,43,71,94,220,226,78,33,31,171,62,59,243,254,15,27,197,78,103,87,113,28,87,253,15,141,47,234,95,110,172,242,184,170,197,133,57,127,169,122,100,153,121,127,110,153,241,123,218,61,100,153,154,111,23,59,107,81,235,217,169,143,87,255,178,250,177,185,241,139,171,159,221,203,117,83,255,176,61,87,122,172,213,131,213,47,180,184,27,206,127,60,121,173,197,213,237,30,110,84,157,213,88,209,241,191,175,241,158,0,0,0,28,224,182,178,139,202,255,213,222,191,184,175,196,201,115,239,255,151,70,161,210,121,59,171,87,87,111,108,113,184,113,67,99,117,198,108,129,211,231,26,1,204,53,11,206,159,22,36,125,93,139,195,141,247,183,247,47,215,203,133,18,191,95,61,179,204,249,139,186,162,124,170,17,28,236,205,47,84,255,118,31,231,44,242,51,237,222,193,101,35,252,155,234,125,43,60,119,81,145,212,69,150,107,53,123,236,10,175,7,0,0,224,32,180,149,1,199,163,141,213,21,191,189,143,243,62,88,189,115,153,207,230,11,110,62,87,253,131,70,157,137,149,182,54,253,245,234,47,183,184,125,236,3,141,54,179,43,93,85,242,100,163,221,236,223,105,249,58,35,85,119,180,248,11,252,199,150,57,255,233,234,119,87,113,254,172,167,26,91,127,254,65,43,91,141,241,229,198,22,145,69,157,97,214,235,233,234,39,87,112,239,223,172,126,160,177,229,104,95,174,105,241,86,148,143,172,110,106,0,0,0,28,76,182,106,139,202,212,61,213,223,106,252,203,254,59,26,219,61,46,110,132,19,159,111,172,32,248,253,70,112,241,129,201,57,179,222,216,168,221,48,235,185,234,255,105,212,173,120,91,163,48,232,75,27,237,88,159,111,212,255,184,190,177,77,228,195,237,89,212,116,222,227,141,208,226,189,141,110,46,175,169,174,104,172,4,121,188,177,53,230,218,70,237,140,15,181,184,29,234,34,31,110,247,238,41,181,252,214,149,26,97,198,247,207,141,237,173,254,198,172,231,170,95,173,126,167,241,59,123,83,117,105,35,32,122,186,17,238,124,169,250,104,99,91,203,74,130,133,181,122,162,177,58,228,255,107,116,74,121,117,227,111,126,79,227,247,248,91,141,223,227,243,141,26,33,203,213,42,153,122,176,250,145,70,173,150,87,55,234,158,252,82,123,255,93,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,177,195,182,123,2,251,161,29,213,137,213,9,213,241,213,113,213,177,213,49,213,81,213,145,213,17,213,206,201,185,59,182,103,154,0,0,0,28,100,158,159,188,158,173,158,169,158,174,118,85,79,86,79,84,143,87,143,85,143,86,143,76,206,101,226,80,15,56,142,170,78,159,188,78,173,78,169,78,218,214,25,1,0,0,192,202,60,92,61,88,61,80,221,55,121,237,218,214,25,109,163,67,45,224,56,186,58,167,58,187,58,171,17,104,172,198,52,65,123,166,145,168,38,69,177,214,0,0,32,0,73,68,65,84,61,87,189,176,145,19,4,0,0,224,144,117,88,117,120,99,199,192,17,45,237,32,88,141,7,171,187,171,187,170,59,171,167,54,114,130,251,179,67,33,224,56,181,186,160,58,191,58,115,31,231,62,93,61,212,72,193,30,105,44,251,121,188,177,20,232,201,70,160,1,0,0,0,91,229,240,70,201,132,99,27,37,20,78,104,148,85,56,169,58,185,17,130,236,205,61,213,109,213,55,26,43,61,14,90,7,107,192,113,74,117,81,117,97,203,175,210,120,190,241,135,190,183,177,140,231,254,70,160,1,0,0,0,7,138,19,170,211,26,165,23,206,104,252,195,254,114,181,34,31,172,110,169,110,158,28,31,84,14,166,128,227,240,234,178,234,210,198,246,147,69,238,173,238,104,44,211,185,43,219,75,0,0,0,56,184,28,214,40,203,112,78,117,110,35,244,88,228,238,234,198,234,134,14,146,221,10,7,67,192,113,74,245,146,234,242,198,62,165,121,183,85,183,54,150,227,60,177,133,243,2,0,0,128,237,118,108,163,108,195,139,26,165,27,230,61,91,125,173,186,174,3,124,85,199,129,28,112,156,91,93,209,216,134,50,239,238,234,235,141,101,55,135,76,65,21,0,0,0,216,139,163,27,229,28,46,105,241,206,135,91,170,175,54,118,62,28,112,14,196,128,227,252,234,229,141,128,99,214,211,141,212,233,134,14,242,194,41,0,0,0,176,78,167,54,202,60,92,222,158,133,74,239,168,174,109,236,136,56,96,28,72,1,199,217,213,85,213,121,115,227,15,53,18,166,235,26,133,67,1,0,0,128,149,217,209,40,251,112,69,163,43,203,172,219,171,47,54,106,88,238,247,14,132,128,227,196,234,234,70,241,208,89,247,86,95,110,108,69,1,0,0,0,214,231,146,234,101,237,89,152,244,198,234,243,213,35,91,62,163,85,216,223,3,142,87,53,194,141,89,247,85,215,52,234,107,0,0,0,0,27,235,162,234,202,70,235,217,89,159,175,62,183,245,211,89,153,253,53,224,120,81,245,234,118,95,30,243,88,245,133,234,250,109,153,17,0,0,0,28,90,94,92,189,178,58,126,102,236,161,234,51,141,110,165,251,149,253,45,224,56,162,122,109,227,151,56,107,191,78,137,0,0,0,224,32,182,104,119,197,245,213,159,84,207,108,253,116,22,219,159,2,142,23,85,175,107,247,100,232,150,70,50,244,240,182,204,8,0,0,0,168,58,169,177,211,226,194,153,177,199,170,79,182,159,172,230,56,124,187,39,48,241,154,234,245,45,181,166,217,85,125,162,17,110,236,218,174,73,1,0,0,0,213,248,110,126,83,245,120,117,86,181,179,241,29,254,146,201,241,29,219,55,181,97,187,87,112,156,88,125,107,163,5,236,212,77,141,4,232,201,109,153,17,0,0,0,176,55,199,52,118,96,92,60,51,118,87,245,199,109,99,167,149,237,92,193,113,97,245,206,198,50,151,169,79,84,159,174,158,221,150,25,1,0,0,0,251,242,108,163,179,233,174,234,252,201,216,241,213,101,141,128,99,91,202,76,108,87,192,113,101,99,229,198,244,249,247,87,31,104,63,217,183,3,0,0,0,236,211,125,213,55,26,237,100,143,109,124,199,191,184,122,174,186,103,171,39,179,29,1,199,27,170,171,102,222,127,173,17,110,60,177,13,115,1,0,0,0,214,238,201,70,71,149,227,170,211,38,99,231,54,182,177,220,182,149,19,217,202,128,99,71,245,182,234,210,153,177,207,84,159,218,194,57,0,0,0,0,27,239,214,234,249,70,184,81,99,85,199,105,141,238,168,47,108,197,4,182,42,224,56,186,81,111,227,188,201,251,23,170,15,85,215,109,209,243,1,0,0,128,205,117,119,163,254,198,133,141,166,38,39,85,231,52,182,177,108,122,173,205,173,8,56,142,111,132,27,103,76,222,63,89,253,126,91,188,84,5,0,0,0,216,116,15,85,119,54,138,143,30,209,200,4,206,171,110,175,158,222,204,7,111,118,192,113,66,35,220,56,101,242,254,225,70,184,113,255,38,63,23,0,0,0,216,30,143,55,22,53,156,219,216,209,113,76,91,16,114,108,102,192,49,93,185,113,242,228,253,253,141,112,227,209,77,124,38,0,0,0,176,253,158,106,212,229,56,187,209,97,229,232,70,224,113,91,155,20,114,108,86,192,49,173,185,49,93,185,113,95,35,220,120,114,147,158,7,0,0,0,236,95,158,105,20,25,61,167,165,144,227,156,201,216,134,215,228,216,140,128,99,71,187,215,220,152,174,220,120,106,19,158,5,0,0,0,236,191,158,109,172,228,56,183,17,114,28,83,157,89,221,216,6,119,87,217,140,128,227,109,45,117,75,153,214,220,176,114,3,0,0,0,14,77,207,54,182,166,156,223,88,197,113,124,117,106,117,211,70,62,100,163,3,142,55,84,151,78,142,167,221,82,212,220,0,0,0,128,67,219,51,141,238,42,23,53,186,171,156,212,88,205,177,97,29,86,55,50,224,184,178,186,106,114,252,66,186,165,0,0,0,0,75,158,170,238,173,46,171,14,171,78,175,158,171,238,217,136,155,111,84,192,113,97,245,173,51,239,63,212,6,166,48,0,0,0,192,65,225,241,70,57,139,139,38,239,207,173,30,156,140,173,203,70,4,28,39,54,138,138,78,239,245,153,234,186,13,184,47,0,0,0,112,240,121,168,122,190,17,110,212,168,227,121,75,181,107,61,55,221,136,128,227,109,141,189,51,85,95,171,62,181,1,247,4,0,0,0,14,94,119,55,138,141,158,214,200,38,78,173,110,88,207,13,215,27,112,188,166,165,162,162,247,87,31,88,231,253,0,0,0,128,67,195,55,170,11,26,237,99,143,175,118,86,119,172,245,102,59,214,49,145,23,53,10,139,78,253,113,27,220,195,22,0,0,0,56,104,189,208,200,18,166,174,108,100,13,107,178,214,128,227,136,234,117,51,239,63,145,142,41,0,0,0,192,234,220,223,200,20,166,94,215,200,28,86,109,173,91,84,222,80,157,51,57,190,169,250,244,26,239,3,0,0,0,28,218,238,171,78,174,78,169,142,172,142,110,108,95,89,149,181,172,224,120,81,245,226,201,241,174,234,147,107,184,7,0,0,0,192,212,39,91,234,162,242,226,214,176,85,101,45,1,199,171,103,142,63,85,61,185,134,123,0,0,0,0,76,61,217,238,93,89,95,189,220,137,203,89,237,22,149,87,85,23,77,142,111,169,62,179,218,7,2,0,0,0,44,240,64,163,93,236,201,141,109,42,135,85,119,173,244,226,213,172,224,56,177,186,122,230,189,112,3,0,0,0,216,72,179,89,195,213,141,44,98,69,86,19,112,204,134,27,159,175,30,94,197,181,0,0,0,0,251,242,112,35,115,152,186,122,185,19,231,173,52,224,56,187,186,116,114,252,88,245,185,149,62,0,0,0,0,96,21,62,215,200,30,106,100,17,103,175,228,162,149,6,28,87,205,28,127,97,21,147,2,0,0,0,88,173,217,236,225,170,101,207,154,177,146,128,227,252,234,188,201,241,125,213,245,171,156,20,0,0,0,192,106,92,223,200,32,106,100,18,231,239,235,130,149,4,28,47,159,57,190,102,13,147,2,0,0,0,88,173,217,12,226,229,203,158,53,177,175,128,227,220,201,171,234,222,234,230,53,78,10,0,0,0,96,53,110,110,100,17,181,123,62,177,208,190,2,142,43,102,142,191,188,142,73,1,0,0,0,172,214,108,22,113,197,178,103,181,247,128,227,148,234,194,201,241,67,213,215,215,57,41,0,0,0,128,213,248,122,35,147,168,145,81,156,178,220,137,123,11,56,94,50,115,252,213,13,152,20,0,0,0,192,106,205,102,18,47,89,238,164,229,2,142,195,171,203,39,199,79,87,215,109,208,164,0,0,0,0,86,227,186,70,54,81,35,171,56,124,209,73,203,5,28,151,85,59,39,199,95,171,158,223,208,169,1,0,0,0,172,204,243,141,108,162,70,86,113,217,162,147,150,11,56,46,157,57,190,97,3,39,5,0,0,0,176,90,179,217,196,165,139,78,88,20,112,156,82,157,53,57,190,187,122,96,131,39,5,0,0,0,176,26,15,52,50,138,26,153,197,30,197,70,23,5,28,23,205,28,235,156,2,0,0,0,236,15,102,51,138,139,230,63,92,20,112,92,56,115,124,243,134,79,7,0,0,0,96,245,102,51,138,11,231,63,156,15,56,78,109,105,153,199,109,213,83,155,52,41,0,0,0,128,213,120,170,145,85,212,200,46,78,157,253,112,62,224,184,96,230,248,214,77,156,20,0,0,0,192,106,205,102,21,179,25,198,30,1,199,249,51,199,223,216,180,233,0,0,0,0,172,222,108,86,49,155,97,236,22,112,28,93,157,57,57,190,183,122,98,147,39,5,0,0,0,176,26,79,52,50,139,26,25,198,209,211,15,118,206,156,116,206,204,241,29,91,48,41,0,0,0,96,229,142,171,142,111,124,169,63,106,242,223,233,23,252,167,38,175,93,147,255,62,218,193,187,112,225,142,234,140,201,241,57,213,77,181,123,192,113,246,204,241,157,91,52,41,0,0,0,96,177,147,27,95,228,207,105,116,13,57,115,239,167,239,225,238,234,150,234,174,198,170,135,135,54,116,118,219,231,206,234,149,147,227,179,91,16,112,156,53,249,239,243,141,31,30,0,0,0,216,90,71,85,23,87,87,53,87,68,115,13,206,106,233,187,126,141,2,157,215,84,95,175,158,94,231,189,183,211,93,141,236,98,71,51,63,223,52,224,56,170,165,246,176,247,84,47,108,233,212,0,0,0,224,208,118,106,245,178,70,176,113,204,38,61,227,69,147,215,147,213,23,171,47,87,15,108,210,179,54,211,11,141,236,226,236,70,150,113,84,181,235,240,201,135,103,87,151,78,142,111,74,13,14,0,0,0,216,10,71,87,175,175,190,163,177,98,227,136,45,120,230,17,141,14,36,175,172,14,111,108,95,121,118,11,158,187,145,78,110,105,245,198,157,213,163,211,21,28,167,207,156,116,223,150,78,9,0,0,0,14,61,59,170,151,84,111,172,78,220,198,57,188,190,177,114,228,35,213,245,141,173,31,7,130,217,236,226,244,234,246,105,192,113,234,204,7,247,111,221,124,0,0,0,224,144,115,124,245,174,234,162,237,158,200,196,137,213,119,86,47,173,222,95,61,190,189,211,89,145,217,236,226,212,90,170,193,49,173,191,241,116,163,149,12,0,0,0,176,241,206,110,132,9,39,175,241,250,93,213,117,141,210,18,143,55,234,105,212,168,219,113,92,117,94,245,226,70,93,138,213,186,164,250,11,213,111,55,58,176,236,207,30,109,100,24,71,54,201,52,118,54,150,164,156,52,57,225,96,105,25,3,0,0,0,251,155,151,86,239,108,109,117,54,238,170,62,209,232,132,242,204,94,206,187,182,250,195,70,49,209,55,180,123,23,149,149,56,181,17,114,188,191,17,164,236,207,30,106,180,206,61,169,218,177,179,221,247,250,60,188,45,83,2,0,0,128,131,219,107,170,55,175,225,186,93,213,7,27,97,195,115,43,188,230,153,234,198,234,230,70,168,242,214,198,74,135,149,58,178,122,119,99,69,200,103,87,113,221,86,123,184,17,112,84,157,184,179,58,97,230,195,71,182,126,62,0,0,0,112,80,187,178,181,133,27,15,84,239,107,116,57,89,139,231,170,47,53,90,170,190,187,165,242,20,43,245,214,234,169,70,59,217,253,209,108,134,113,194,142,70,113,147,41,245,55,0,0,0,96,227,92,94,125,219,26,174,123,160,122,111,107,15,55,102,221,51,185,215,131,107,184,246,207,86,151,110,192,28,54,195,108,134,113,252,142,198,146,147,169,3,161,82,42,0,0,0,28,8,46,168,190,99,13,215,237,106,172,220,120,108,31,231,29,213,40,86,122,74,251,46,42,250,232,228,158,79,175,97,62,239,110,20,47,221,223,204,102,24,199,237,172,142,157,25,120,98,139,39,3,0,0,0,7,163,99,171,111,111,169,123,233,106,124,176,229,87,110,236,104,172,168,120,121,123,174,172,184,177,81,100,244,134,234,133,5,215,222,211,40,64,250,174,85,206,103,103,227,103,249,213,150,186,182,236,15,102,51,140,99,119,52,90,201,76,237,79,19,5,0,0,128,3,213,155,218,189,169,199,74,221,89,125,117,153,207,142,175,190,183,250,174,22,111,27,185,116,242,217,123,218,189,28,197,172,175,180,182,22,176,39,87,111,92,195,117,155,105,54,195,56,102,71,75,203,88,158,105,229,21,89,1,0,0,128,197,46,175,94,177,198,107,63,94,61,191,96,252,248,234,251,170,139,86,112,143,139,38,231,46,10,57,158,155,60,99,45,174,106,255,170,199,241,92,75,45,115,143,218,209,82,171,152,181,236,195,1,0,0,0,150,28,87,189,125,141,215,62,89,125,99,193,248,142,198,182,146,83,87,113,175,83,39,215,28,182,224,179,91,27,117,62,214,226,237,237,190,19,100,187,77,179,140,35,119,84,71,76,222,60,179,204,201,0,0,0,192,202,92,213,238,205,60,86,227,186,234,217,5,227,151,182,178,149,27,243,46,170,46,91,48,254,76,117,253,26,238,87,117,66,163,237,237,254,98,154,101,28,177,163,165,130,39,139,126,137,0,0,0,192,202,28,83,189,122,29,215,223,177,204,248,90,183,187,212,40,70,186,200,237,235,184,231,107,218,127,86,113,76,179,140,157,59,26,75,93,74,253,13,0,0,0,88,143,87,180,239,118,173,123,179,168,179,233,81,213,37,235,184,231,165,45,158,211,227,11,198,86,234,152,234,101,235,184,126,35,77,179,140,29,179,1,199,162,22,50,0,0,0,192,190,29,221,88,217,176,30,139,58,155,30,187,206,123,46,119,143,245,118,81,253,230,214,23,230,108,148,105,150,177,99,199,94,79,3,0,0,0,86,106,81,65,207,213,216,172,133,7,135,196,130,134,29,45,253,160,235,253,67,0,0,0,192,161,234,169,234,83,235,188,199,162,149,22,139,182,173,172,214,162,213,26,235,173,161,241,169,214,222,137,101,35,77,179,140,23,118,180,212,95,215,106,14,0,0,0,88,187,107,91,223,151,254,69,1,199,174,234,166,117,220,243,198,22,207,105,173,157,94,106,4,38,95,94,199,245,27,105,154,101,60,191,163,153,138,163,219,52,25,0,0,0,56,24,60,81,125,102,29,215,159,187,204,248,151,214,113,207,107,87,249,172,149,248,76,235,175,225,177,81,254,180,51,236,142,102,122,198,110,211,100,0,0,0,224,96,241,197,214,222,161,228,37,45,94,124,112,67,117,235,26,238,119,115,99,5,199,188,35,38,207,90,139,199,170,107,214,120,237,102,152,102,25,207,204,6,28,71,110,211,100,0,0,0,224,96,241,120,245,193,53,94,123,76,117,193,130,241,231,171,223,173,30,92,197,189,30,168,126,175,165,178,20,179,94,212,218,59,160,252,65,27,83,23,100,163,76,179,140,103,118,180,180,23,231,200,20,26,5,0,0,128,245,186,190,229,183,134,236,203,235,90,92,35,243,209,234,189,173,108,37,199,205,147,115,31,91,240,217,225,213,235,215,56,183,47,54,86,147,236,47,14,107,41,224,216,181,179,221,247,205,28,211,254,149,196,0,0,0,192,129,232,195,141,213,24,39,174,242,186,243,170,23,87,95,93,240,217,163,213,255,91,93,86,189,162,186,120,238,243,175,55,234,117,220,216,226,149,27,53,182,166,156,189,202,57,85,61,84,125,116,13,215,109,166,217,78,48,79,10,56,0,0,0,96,227,61,209,216,34,242,31,180,250,174,165,111,175,238,155,188,230,61,223,88,33,114,125,99,155,201,180,243,202,19,237,187,131,203,25,213,219,86,57,151,26,205,73,126,175,253,167,176,232,212,110,1,199,142,118,47,126,178,158,54,49,0,0,0,192,146,91,171,223,90,195,117,71,87,223,217,190,191,163,239,106,212,229,120,176,125,135,27,199,87,239,110,109,181,55,126,171,186,109,13,215,109,182,217,223,207,227,243,1,199,9,91,60,25,0,0,0,56,152,93,95,253,254,26,174,59,189,250,243,147,255,174,215,25,213,247,85,167,174,225,218,223,109,255,170,187,49,107,54,195,120,124,71,99,15,207,162,15,1,0,0,128,245,251,98,163,38,199,106,157,94,253,197,234,138,86,191,205,165,201,53,47,155,220,99,45,225,198,31,181,246,98,169,91,97,54,195,120,116,103,245,240,204,192,73,91,60,25,0,0,0,56,20,124,170,177,131,226,157,213,206,85,92,55,221,174,114,117,245,201,234,27,141,154,24,123,179,179,81,224,244,13,213,57,171,158,105,61,83,189,191,197,133,78,247,39,179,25,198,195,59,27,19,127,188,177,119,229,228,109,153,18,0,0,0,28,252,190,220,168,151,241,29,173,254,251,247,121,213,123,26,133,62,175,171,238,104,20,22,125,162,209,46,245,152,70,193,209,115,27,157,82,142,89,124,155,125,122,168,122,95,117,247,26,175,223,74,211,223,225,227,213,51,211,212,232,193,70,192,113,108,35,29,122,106,27,38,6,0,0,0,7,187,59,171,95,175,222,85,93,180,134,235,143,105,172,230,184,122,35,39,53,113,83,99,229,198,99,155,112,239,141,118,116,75,29,100,30,172,58,124,242,230,148,234,172,201,241,157,237,94,151,3,0,0,0,216,56,79,55,86,97,60,84,157,221,218,58,155,108,164,71,170,63,168,254,184,125,119,99,217,95,156,85,93,58,57,190,185,186,115,186,130,227,254,153,147,78,175,110,223,202,89,1,0,0,192,33,230,249,198,150,149,155,170,87,87,175,219,166,121,124,178,250,116,7,222,78,142,217,238,50,247,215,82,97,147,251,150,57,9,0,0,0,216,60,79,86,31,173,190,82,189,188,186,178,177,253,98,51,61,213,232,236,114,109,245,192,38,63,107,179,204,102,23,247,213,82,192,241,216,228,117,124,117,230,22,79,10,0,0,0,14,117,247,55,90,201,126,178,186,164,186,170,58,127,131,159,241,141,234,154,234,235,29,56,91,81,150,51,205,46,166,121,198,110,173,105,238,105,4,28,71,87,167,181,251,182,21,0,0,0,96,243,237,106,172,230,248,74,163,94,230,153,141,58,29,23,86,103,172,242,94,247,84,183,54,106,109,222,219,164,24,231,65,224,180,150,86,185,220,51,29,156,13,56,238,106,164,68,53,126,121,2,14,0,0,0,216,62,15,78,94,215,77,222,31,63,121,29,213,248,130,63,253,111,141,109,39,187,102,254,251,104,163,125,234,193,232,236,153,227,187,166,7,179,1,199,157,51,199,231,54,246,226,0,0,0,0,251,135,63,221,142,113,136,59,119,230,248,79,179,140,29,51,131,143,52,90,212,84,157,215,82,11,89,0,0,0,128,253,193,225,141,204,162,70,134,241,200,244,131,29,115,39,78,219,195,30,86,93,176,249,243,2,0,0,0,88,177,11,26,153,69,45,101,24,213,158,1,199,109,115,23,1,0,0,0,236,47,102,179,138,217,12,99,143,128,227,142,70,15,222,26,21,90,1,0,0,0,246,23,211,172,226,201,70,134,241,167,230,3,142,170,91,38,255,61,162,186,104,19,39,5,0,0,0,176,82,23,53,178,138,90,202,46,254,212,162,128,227,230,153,227,139,55,99,70,0,0,0,0,171,52,155,81,220,60,255,225,162,128,227,206,150,170,144,94,84,29,179,9,147,2,0,0,0,88,169,99,90,218,101,242,72,51,237,97,167,22,5,28,85,55,206,28,95,182,193,147,2,0,0,0,88,141,217,108,226,198,69,39,44,23,112,220,48,115,124,249,134,77,7,0,0,0,96,245,102,179,137,27,22,157,176,92,192,241,88,75,251,89,78,74,71,21,0,0,0,96,123,92,216,200,38,106,100,21,143,45,58,105,185,128,163,234,250,153,227,43,54,104,82,0,0,0,0,171,49,155,73,92,191,220,73,123,11,56,110,175,238,157,28,159,91,157,181,1,147,2,0,0,0,88,169,179,26,153,68,141,140,226,246,229,78,220,91,192,81,245,213,153,227,151,173,115,82,0,0,0,0,171,49,155,69,124,117,217,179,218,119,192,113,67,245,240,228,248,162,234,140,117,76,10,0,0,0,96,165,206,104,169,53,236,195,45,83,92,116,106,95,1,71,213,181,51,199,87,174,113,82,0,0,0,0,171,49,155,65,92,187,236,89,19,43,9,56,174,171,30,154,28,95,216,210,222,23,0,0,0,128,205,112,110,75,29,93,31,106,100,19,123,181,146,128,163,234,154,153,227,87,174,114,82,0,0,0,0,171,49,155,61,92,179,236,89,51,86,26,112,220,80,221,61,57,62,187,186,124,21,147,2,0,0,0,88,169,203,27,217,67,141,44,98,175,181,55,166,86,26,112,84,125,97,230,248,85,213,225,171,184,22,0,0,0,96,95,14,111,100,14,83,95,88,238,196,69,23,174,212,163,213,137,213,169,213,145,213,206,246,210,127,22,0,0,0,96,149,190,185,58,111,114,124,99,245,165,149,94,184,154,21,28,85,159,173,158,155,28,191,188,58,107,149,215,3,0,0,0,44,114,86,35,107,168,145,61,124,118,53,23,175,54,224,120,172,250,204,204,251,215,174,242,122,0,0,0,128,69,102,51,134,207,52,50,136,21,91,75,29,141,123,27,197,62,78,168,142,109,132,36,119,174,225,62,0,0,0,0,85,223,84,93,50,57,190,179,250,248,106,111,176,218,21,28,83,127,50,115,252,202,70,127,90,0,0,0,128,213,58,183,221,219,194,254,201,114,39,238,205,90,59,161,60,89,61,219,82,225,143,51,27,109,91,158,95,227,253,0,0,0,128,67,207,17,213,59,170,163,38,239,63,85,221,178,150,27,173,167,213,235,61,213,105,213,73,147,137,28,191,214,73,0,0,0,0,135,164,55,53,202,96,84,221,90,125,114,173,55,90,79,192,81,117,87,99,143,204,17,213,41,141,42,167,247,172,243,158,0,0,0,192,193,239,202,150,186,166,60,81,125,160,177,91,100,77,214,27,112,60,91,61,210,82,33,144,115,171,7,170,135,215,121,95,0,0,0,224,224,245,162,234,141,51,239,63,84,221,191,158,27,174,55,224,168,17,112,60,223,82,161,209,11,170,219,26,117,58,0,0,0,0,102,157,218,168,187,49,205,36,62,83,125,109,189,55,221,136,128,163,234,238,70,13,142,211,38,247,60,187,186,169,177,101,5,0,0,0,160,70,13,207,119,86,199,77,222,127,173,81,88,116,221,54,42,224,168,81,12,228,156,70,208,113,116,117,122,163,179,10,0,0,0,64,141,112,227,140,201,241,93,213,7,55,234,198,27,25,112,84,221,209,216,71,115,84,117,66,163,240,232,205,27,252,12,0,0,0,224,192,243,214,70,89,139,26,229,46,62,80,61,179,81,55,223,232,128,227,153,198,118,149,139,171,157,213,201,141,160,227,214,13,126,14,0,0,0,112,224,120,83,75,13,74,118,53,194,141,71,54,242,1,27,29,112,212,40,46,122,111,117,105,117,88,163,120,200,241,9,57,0,0,0,224,80,244,198,234,242,201,241,243,141,112,227,222,141,126,200,102,4,28,85,143,53,218,187,92,58,121,127,90,66,14,0,0,0,56,212,204,134,27,53,194,141,59,54,227,65,155,21,112,212,88,106,242,64,75,75,80,78,107,108,89,81,147,3,0,0,0,14,126,111,105,105,225,67,213,31,84,223,216,172,135,109,102,192,81,245,112,99,37,199,197,141,237,42,167,84,103,54,86,114,60,191,201,207,6,0,0,0,182,222,17,213,59,26,77,72,170,94,104,147,195,141,218,252,128,163,198,74,142,123,170,11,39,207,59,177,58,175,209,14,102,215,22,60,31,0,0,0,216,26,39,53,194,141,179,38,239,159,105,108,75,185,125,179,31,188,21,1,71,213,163,141,61,54,231,85,71,86,199,54,86,117,60,56,249,12,0,0,0,56,176,157,215,8,55,78,156,188,127,172,17,110,220,189,21,15,223,170,128,163,234,137,198,214,148,51,170,227,26,109,100,47,109,172,226,184,111,11,231,1,0,0,0,108,172,151,86,111,110,124,215,175,177,147,227,3,213,67,91,53,129,173,12,56,170,158,174,110,108,44,89,57,101,50,118,126,99,69,199,166,238,197,1,0,0,0,54,197,183,84,87,207,188,191,169,81,115,99,75,203,82,108,117,192,81,163,184,200,205,213,142,234,236,201,216,233,141,226,35,15,52,86,122,0,0,0,0,251,183,51,26,91,82,46,152,25,251,66,245,241,198,119,255,45,181,29,1,199,212,157,141,46,43,231,77,230,113,108,245,226,234,217,198,82,22,0,0,0,96,255,244,138,234,173,141,239,242,53,138,137,126,164,250,202,118,77,232,176,237,122,240,140,19,27,203,89,206,153,25,187,189,250,147,182,112,175,14,0,0,0,176,79,39,87,175,109,44,86,152,186,179,250,88,163,139,234,182,217,31,2,142,169,111,170,94,57,55,246,153,234,139,219,48,23,0,0,0,96,119,87,85,175,158,27,251,66,245,217,109,152,203,30,246,167,128,163,198,42,142,215,86,167,206,140,221,223,248,101,221,182,45,51,2,0,0,128,67,219,249,141,69,9,167,205,140,61,208,216,121,113,231,182,204,104,129,253,45,224,152,90,180,154,227,166,234,243,217,182,2,0,0,0,91,225,228,70,119,148,139,231,198,247,155,85,27,179,246,215,128,163,70,103,149,111,106,247,125,61,53,10,150,92,83,61,190,229,51,2,0,0,128,131,223,113,213,149,213,75,231,198,111,111,4,27,247,109,249,140,86,96,127,14,56,166,46,173,94,85,157,48,55,126,109,245,229,234,177,45,159,17,0,0,0,28,124,142,175,94,86,189,124,110,252,209,234,115,213,141,91,62,163,85,56,16,2,142,169,171,26,9,210,145,115,227,215,77,94,247,111,249,140,0,0,0,224,192,119,90,245,146,201,107,214,211,141,29,20,7,68,243,143,3,41,224,168,58,162,17,114,188,188,218,57,247,217,109,213,215,170,155,183,122,82,0,0,0,112,0,186,168,186,188,81,68,116,214,179,141,93,19,215,84,207,108,245,164,214,234,64,11,56,166,142,108,44,155,185,162,58,102,238,179,199,27,203,102,110,106,84,117,5,0,0,0,134,83,27,69,67,47,109,212,218,152,245,100,245,213,70,57,136,167,183,120,94,235,118,160,6,28,179,174,168,94,220,238,237,106,166,238,171,110,169,110,77,247,21,0,0,0,14,77,39,87,47,170,46,108,52,244,152,119,127,117,125,35,220,56,96,29,12,1,199,212,185,213,101,141,20,106,145,7,27,219,88,238,104,244,233,125,97,139,230,5,0,0,0,91,233,176,234,156,198,247,228,243,171,83,150,57,239,198,234,134,198,247,228,3,222,193,20,112,76,29,89,93,210,216,75,116,206,50,231,60,95,221,61,121,221,219,88,233,241,212,150,204,14,0,0,0,54,214,209,141,149,25,103,84,103,77,94,59,150,57,247,206,70,237,202,175,119,0,110,67,217,155,131,49,224,152,117,92,99,25,206,5,213,121,251,56,247,209,198,42,143,135,170,135,171,71,38,99,79,110,230,4,1,0,0,96,133,142,169,78,168,78,172,78,106,108,61,57,101,50,182,55,183,87,223,104,148,111,120,124,51,39,184,157,14,246,128,99,214,17,141,229,57,231,76,94,39,175,240,186,231,170,39,26,43,60,158,106,36,92,207,52,170,202,62,215,216,234,98,187,11,0,0,0,235,113,216,228,117,120,163,107,232,17,141,29,10,71,79,94,199,78,62,91,137,135,26,43,53,238,108,108,63,57,96,58,161,172,199,161,20,112,204,59,166,58,179,177,140,231,180,201,235,232,109,157,17,0,0,0,172,206,83,141,34,161,247,55,202,47,220,211,33,186,19,225,80,14,56,22,57,182,177,178,227,196,198,18,159,19,38,99,199,54,2,145,229,246,48,1,0,0,192,102,120,190,17,88,60,49,121,61,58,121,61,210,88,169,241,196,246,77,109,255,34,224,88,157,35,170,163,26,203,133,118,54,150,7,249,29,2,0,0,176,17,94,104,148,66,120,118,242,218,213,33,178,189,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,224,255,111,15,14,4,0,0,0,0,4,249,91,47,48,66,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,203,20,64,95,0,0,7,56,73,68,65,84,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,156,0,245,133,85,105,52,208,248,16,0,0,0,0,73,69,78,68,174,66,96,130]},{"layer_unique_id":53447,"duration_micros":1710,"top":1168.029296875,"left":-6.208984375,"width":408.76171875,"height":58.39453125,"snapshot":[137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,4,56,0,0,8,106,8,6,0,0,0,106,246,175,7,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,32,0,73,68,65,84,120,156,236,193,1,1,0,0,0,128,144,254,175,238,8,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,217,187,251,96,59,238,179,62,224,95,89,88,145,226,56,150,20,69,66,138,223,29,91,14,150,45,67,66,94,13,113,154,151,54,111,37,16,72,40,67,11,12,164,12,5,6,104,97,104,97,202,180,195,208,150,102,154,210,66,58,41,41,208,105,232,36,48,129,22,66,147,38,152,224,4,231,221,137,109,69,118,34,39,177,157,216,216,137,252,34,217,138,133,29,91,86,255,120,206,246,238,238,217,115,207,94,233,202,186,215,124,62,51,26,157,221,179,187,103,207,238,222,63,126,207,121,158,231,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,39,197,154,147,125,2,0,171,192,37,73,78,107,45,239,73,242,208,73,58,23,0,0,96,192,55,157,236,19,0,88,5,174,76,114,89,107,249,151,34,192,1,0,0,43,202,74,12,112,236,74,242,211,203,120,188,95,79,114,203,50,30,15,0,0,0,88,97,78,57,217,39,0,0,0,0,112,188,86,98,6,199,19,197,166,84,54,74,99,127,146,125,39,233,92,0,0,0,224,9,109,53,4,56,110,77,242,193,227,216,255,222,229,58,145,37,218,148,228,7,91,203,87,69,128,3,0,0,0,78,136,213,16,224,184,47,201,39,79,246,73,0,0,0,0,43,151,30,28,0,0,0,192,170,39,192,1,0,0,0,172,122,2,28,0,0,0,192,170,183,26,122,112,156,8,111,73,114,218,228,245,158,36,111,157,188,62,37,201,133,73,46,75,114,78,146,173,73,30,75,114,119,146,155,147,92,151,228,142,25,199,124,121,146,239,93,228,51,95,54,249,215,246,19,147,227,47,230,148,36,207,76,114,233,228,255,109,73,30,78,53,79,189,51,201,231,146,124,62,201,223,204,57,78,210,253,222,119,36,249,213,201,235,243,147,60,39,201,5,73,118,36,89,151,228,215,146,124,101,196,49,251,158,145,228,87,90,203,111,79,114,237,228,245,246,212,204,50,23,39,121,122,146,167,164,174,237,93,169,251,112,83,146,135,142,225,51,79,73,114,81,146,157,73,206,75,178,57,201,25,73,14,165,174,211,45,147,99,127,41,243,175,247,144,167,36,217,157,186,62,103,39,217,152,228,104,146,3,169,235,248,165,201,249,31,58,134,99,111,75,61,111,23,36,249,230,201,177,15,39,57,152,106,176,251,197,36,123,147,60,50,99,255,53,73,254,245,228,56,73,93,191,159,95,100,251,198,217,73,126,185,181,252,171,153,253,108,55,214,37,249,15,147,255,147,228,203,73,254,205,156,125,146,228,172,212,61,191,40,117,111,54,167,190,223,125,169,239,183,47,245,93,143,142,56,86,178,124,207,241,218,212,51,211,252,189,63,61,117,237,239,153,156,211,158,212,179,9,0,0,172,2,127,91,3,28,109,235,39,255,111,79,242,125,73,46,25,216,102,83,106,112,246,154,36,31,72,242,167,153,63,128,92,14,231,164,130,38,23,245,214,159,150,26,36,94,152,228,197,169,41,104,223,157,228,134,37,28,251,73,169,192,192,107,146,188,122,224,253,177,131,205,121,54,164,174,241,171,146,252,221,129,247,79,75,114,110,146,23,164,6,147,239,74,5,108,198,186,40,201,27,147,156,57,240,222,250,212,160,245,226,201,231,127,33,201,31,36,185,125,228,177,215,166,174,239,119,101,225,57,105,123,106,234,30,189,40,21,88,120,79,146,191,76,114,100,196,177,79,75,242,247,147,92,57,240,222,134,36,79,75,13,212,95,150,26,112,191,43,201,103,7,182,61,154,186,239,175,152,44,175,79,93,139,91,231,124,254,206,222,242,133,153,31,224,56,51,11,193,141,100,254,243,182,53,201,107,147,60,119,224,189,39,167,130,16,205,84,202,123,146,252,201,136,115,232,59,214,231,120,123,234,185,121,86,111,253,233,169,96,209,37,73,190,39,245,247,254,103,75,60,39,0,0,224,36,80,162,82,3,164,115,147,252,66,134,131,27,125,175,72,5,66,214,156,200,147,74,242,252,36,191,152,233,224,198,144,173,73,254,73,146,43,150,112,252,245,169,172,147,161,65,225,114,218,154,228,77,25,14,110,244,109,79,242,115,169,95,212,199,120,105,146,127,150,225,224,198,144,11,83,215,180,63,168,29,242,77,73,254,81,106,16,60,20,220,232,91,159,122,46,126,40,243,3,135,27,83,223,115,40,184,49,100,75,146,159,74,242,146,25,239,247,167,31,62,119,196,49,47,159,179,60,228,156,222,242,23,22,217,246,130,36,255,60,195,193,141,33,151,165,238,205,174,121,27,246,28,203,115,124,86,146,127,154,113,207,193,43,146,252,104,22,50,70,0,0,128,21,74,6,71,13,30,127,50,11,3,152,27,82,37,1,135,146,156,154,26,12,93,145,250,197,185,241,226,36,159,73,55,211,224,234,36,31,105,45,159,155,228,103,122,239,255,73,239,179,103,149,75,60,39,201,143,244,214,125,62,85,234,113,79,42,48,181,57,201,183,166,27,148,249,135,169,108,142,155,103,28,183,237,244,212,47,212,109,135,146,220,159,202,30,88,46,175,104,189,190,55,201,199,82,101,41,223,72,149,145,236,206,244,64,243,77,169,210,135,197,202,3,158,159,228,13,189,117,55,36,249,244,228,248,143,164,50,33,206,78,221,175,173,147,109,78,77,242,227,169,178,142,3,139,28,255,149,147,207,104,251,171,84,48,225,80,42,192,181,37,117,175,46,110,109,243,188,201,231,191,103,198,113,215,166,238,237,89,173,117,135,38,199,190,45,85,106,180,46,149,221,112,69,22,74,79,146,228,251,83,247,247,198,222,49,251,217,26,59,83,153,36,179,60,45,85,238,212,118,113,42,240,114,112,145,253,46,108,189,126,40,85,162,50,228,156,36,63,157,186,254,141,251,147,124,52,85,46,114,120,242,222,89,169,204,157,205,147,109,214,165,2,117,191,153,42,189,26,99,169,207,241,25,169,191,247,167,246,214,223,144,42,99,122,32,21,52,217,150,228,133,147,237,118,143,60,23,0,0,224,36,18,224,88,8,108,28,76,242,59,153,14,14,124,50,201,7,147,252,227,84,141,127,227,133,233,6,56,30,73,183,108,165,223,75,226,209,212,192,110,158,109,169,44,128,198,145,36,239,72,242,241,76,167,219,95,147,202,2,248,254,214,186,215,39,121,243,228,243,198,56,148,74,193,191,46,53,184,107,62,99,185,51,84,254,119,146,171,50,93,218,243,151,169,95,239,127,56,11,247,98,93,146,215,37,121,91,134,75,12,158,154,238,119,62,146,186,119,159,30,216,246,230,84,80,229,71,179,16,12,218,144,228,59,51,29,112,106,108,73,149,60,52,30,73,242,91,25,46,157,185,38,85,70,210,238,191,242,202,36,159,72,5,35,250,118,167,27,16,185,43,53,160,191,183,183,221,222,36,31,78,242,3,169,160,73,227,123,83,131,255,118,112,236,193,201,246,77,246,195,174,84,102,210,195,3,159,159,116,3,21,253,245,159,154,241,222,169,73,190,165,181,188,103,198,241,215,167,2,109,237,224,198,167,82,165,65,253,30,37,215,165,158,137,215,103,33,251,104,109,42,115,230,223,166,158,199,177,198,62,199,175,77,149,156,53,238,75,242,123,25,14,10,190,119,178,253,203,151,112,30,0,0,192,73,162,68,165,28,76,242,27,153,157,249,112,32,213,3,161,237,210,156,152,235,247,221,233,246,57,120,71,106,128,62,52,208,63,154,10,16,92,211,90,119,110,186,3,209,197,220,151,250,222,87,167,126,241,110,127,198,114,245,224,72,234,218,189,47,179,251,150,236,73,13,50,219,46,207,116,73,68,99,87,186,3,232,247,102,56,184,209,120,48,211,247,239,57,153,29,196,185,184,183,252,254,204,238,11,114,52,201,159,167,50,48,26,107,51,187,220,169,159,13,240,238,76,7,55,26,15,37,249,159,169,102,178,141,29,25,46,65,217,219,122,125,106,22,47,219,185,180,245,186,125,79,22,43,209,218,145,238,53,159,149,97,241,226,116,179,83,62,151,228,127,100,118,3,214,195,73,222,153,202,136,106,108,206,184,146,166,198,216,231,120,71,146,239,232,237,251,223,50,251,239,254,225,36,127,148,122,118,1,0,128,21,110,53,100,112,60,59,201,127,61,134,253,222,156,154,161,97,140,63,204,252,217,18,190,156,26,104,238,152,44,63,57,53,16,187,231,24,206,109,150,179,83,101,39,141,155,82,153,27,243,92,149,110,255,141,231,166,130,6,243,252,113,150,222,212,113,169,246,37,249,208,136,237,62,155,250,165,255,219,91,235,46,79,149,109,244,61,144,110,9,200,181,3,219,244,237,79,205,166,210,100,225,108,77,205,142,50,52,240,222,212,91,190,101,196,241,63,154,238,224,121,199,140,237,182,246,150,103,149,121,52,30,78,5,176,218,229,56,91,7,206,169,255,172,159,151,154,221,165,239,201,233,6,89,254,44,21,84,75,234,217,123,103,134,51,51,250,193,166,161,99,63,41,201,223,233,173,123,119,170,28,105,49,143,166,2,9,151,166,130,51,73,5,74,174,202,226,101,68,141,177,207,241,115,122,203,87,103,248,123,180,29,77,5,208,118,103,246,61,5,0,0,86,128,213,16,224,120,60,124,102,254,38,73,170,127,64,123,144,179,97,214,134,199,168,255,235,254,135,50,46,147,226,174,84,195,199,166,244,96,119,106,160,56,111,166,151,197,178,30,150,203,129,140,159,154,245,195,233,6,56,190,45,85,218,210,183,55,221,140,133,177,238,75,183,204,104,67,134,3,28,253,1,249,230,129,109,250,110,79,119,202,212,89,211,221,246,167,243,221,56,227,28,218,62,153,110,0,227,254,129,109,254,58,245,253,154,115,221,153,10,16,244,157,159,133,32,194,95,167,158,177,87,167,178,134,214,167,2,35,67,217,42,237,178,150,59,51,92,126,179,51,245,125,218,231,61,54,128,118,79,234,254,191,116,178,124,106,42,83,231,175,102,238,177,96,236,115,220,15,112,92,51,184,213,180,111,164,206,79,128,3,0,0,86,48,37,42,101,108,57,70,127,112,186,110,112,171,99,119,105,111,121,108,6,74,210,157,209,98,93,166,51,5,134,140,13,60,60,94,110,73,119,176,191,45,211,205,32,143,71,255,62,175,157,177,93,127,80,254,170,204,191,158,143,164,178,49,154,127,95,155,177,93,63,243,226,117,153,63,75,203,161,222,177,135,26,129,62,150,238,180,173,151,204,56,110,187,124,233,51,169,103,186,29,224,235,151,231,36,21,8,109,151,175,92,159,225,191,153,243,122,203,99,3,135,237,227,182,205,234,21,210,55,230,57,222,152,110,195,214,253,57,241,217,75,0,0,192,227,104,53,100,112,220,146,234,113,176,84,67,191,48,31,175,254,160,110,57,27,113,62,41,221,50,128,251,83,205,46,183,140,220,191,63,88,127,106,234,23,250,213,228,209,84,80,167,93,166,179,57,243,155,77,174,73,77,49,123,126,234,87,246,45,169,82,140,13,233,222,163,49,153,24,73,149,213,124,41,53,213,105,179,223,47,167,74,26,246,164,130,12,99,155,184,246,125,60,213,148,180,201,254,217,213,58,246,77,73,190,154,99,239,127,178,47,11,83,201,174,77,245,194,104,7,190,214,166,74,190,26,77,166,198,103,179,48,99,204,179,147,252,105,186,65,131,237,233,78,147,58,171,103,197,249,189,229,219,71,157,245,130,126,192,97,40,216,114,172,250,51,170,124,49,203,219,103,6,0,0,56,201,86,67,128,227,64,150,254,75,240,106,116,122,111,249,140,36,255,226,56,142,183,220,229,51,143,151,126,96,106,177,236,134,53,169,204,130,87,103,122,112,125,60,30,77,242,223,83,51,231,52,13,51,215,39,249,123,147,127,135,83,83,181,222,156,154,162,245,142,140,31,44,223,147,228,237,73,126,44,11,83,15,111,205,66,143,141,123,82,229,55,95,156,28,123,41,61,94,250,253,36,206,79,55,192,113,118,22,74,72,14,101,161,191,73,59,96,177,53,21,36,106,7,27,218,129,183,35,25,238,139,146,76,247,46,89,108,202,217,33,135,83,13,87,155,96,196,25,25,87,106,53,70,255,239,225,238,101,56,38,0,0,176,130,172,134,0,199,223,22,203,93,238,178,220,199,123,188,244,203,128,158,52,99,187,83,147,188,49,211,179,98,44,151,253,73,222,146,106,154,249,242,116,3,45,79,78,245,10,105,250,133,220,153,228,35,169,158,19,99,166,54,189,49,53,13,234,171,146,188,160,247,222,150,212,212,191,87,78,150,63,159,234,21,113,125,230,15,244,31,72,101,113,236,156,44,95,156,154,1,38,173,229,198,167,179,144,133,242,64,186,211,204,238,76,55,192,241,204,214,235,61,153,190,71,73,5,155,218,25,50,15,230,216,178,92,238,79,55,219,98,67,150,39,192,209,15,148,205,154,66,23,0,0,88,165,4,56,86,14,253,80,198,91,147,228,7,146,188,176,181,238,111,146,124,48,53,45,233,221,89,24,96,183,51,43,126,44,221,38,166,243,28,78,205,50,114,117,106,70,151,111,203,240,84,170,59,146,124,95,146,215,36,249,95,169,198,152,243,250,66,236,79,101,137,188,111,114,236,111,79,119,122,213,198,197,147,127,119,37,249,131,204,158,158,181,177,55,11,1,142,111,73,5,99,14,79,150,251,51,244,180,93,159,133,0,199,238,36,127,49,121,125,74,186,223,185,191,223,137,182,92,101,36,253,114,50,229,41,0,0,240,4,35,192,177,114,244,127,165,190,46,201,219,78,198,137,156,100,99,126,105,223,149,110,112,227,182,36,191,157,42,111,56,17,190,158,202,162,184,38,53,181,236,153,169,178,141,139,211,109,218,185,33,21,120,217,158,10,70,140,25,68,127,45,149,101,241,129,84,6,196,153,169,102,157,187,210,13,120,108,79,242,179,73,126,55,201,39,22,57,222,23,122,203,103,167,178,64,182,102,161,212,228,72,166,27,216,182,203,84,118,166,202,77,14,36,249,230,116,27,189,206,106,124,123,52,53,139,75,211,200,243,180,84,207,143,35,139,156,235,144,51,122,203,179,102,163,89,170,126,214,201,188,198,174,0,0,192,42,35,107,96,229,232,15,192,198,204,130,242,68,244,244,222,242,208,0,247,121,189,229,119,230,196,5,55,250,190,158,10,24,188,63,201,127,74,242,75,157,197,35,22,0,0,22,104,73,68,65,84,233,150,129,36,213,232,243,242,37,30,247,104,234,59,220,144,154,26,247,215,82,211,206,246,103,22,249,193,44,222,120,246,246,116,103,162,105,102,54,185,168,181,110,79,42,195,165,237,107,233,246,214,104,202,82,218,253,55,238,78,101,146,204,114,160,183,188,113,112,171,217,54,164,91,158,242,64,150,167,60,37,153,254,251,234,55,29,5,0,0,86,57,1,142,149,227,235,169,254,3,141,103,100,233,3,196,213,110,109,186,253,30,146,233,38,155,167,164,74,69,218,239,127,249,68,158,212,28,247,38,249,227,84,41,75,91,191,183,198,82,29,77,125,175,183,103,97,182,147,164,122,171,44,22,60,121,52,221,160,200,179,38,255,95,214,90,247,217,25,251,182,155,249,54,229,42,23,180,214,205,154,30,182,113,107,111,249,204,69,182,29,178,163,183,60,175,28,103,41,250,207,209,5,89,222,89,144,0,0,128,147,76,128,99,229,120,44,245,203,122,219,174,161,13,159,192,206,77,183,68,225,206,84,224,167,173,41,125,104,28,204,242,246,83,56,43,213,75,163,249,247,172,197,55,255,255,174,238,45,95,152,233,1,244,229,189,99,143,201,210,121,52,85,190,210,214,15,4,244,237,107,189,222,153,42,51,105,63,75,253,50,150,70,59,144,114,121,42,163,162,189,223,172,233,97,27,183,244,150,151,154,197,178,187,183,60,171,28,230,88,220,159,238,180,201,219,83,65,68,0,0,224,9,66,128,99,101,217,219,91,126,89,150,54,221,235,150,172,188,190,42,79,201,248,95,202,175,232,45,95,59,176,77,63,152,177,45,227,190,243,214,36,151,142,216,110,67,146,215,182,254,61,123,196,62,73,149,133,28,110,45,159,154,233,239,189,173,119,236,177,83,219,222,215,91,158,247,125,251,211,197,190,58,11,65,161,219,50,61,21,111,227,246,44,76,159,186,62,53,67,77,123,234,215,126,0,163,111,95,186,83,195,190,48,21,72,24,99,83,146,23,183,150,143,100,118,166,201,177,234,63,79,99,179,108,54,100,161,183,8,0,0,176,66,9,112,156,56,253,222,1,99,2,21,123,51,253,43,243,235,50,238,62,61,45,201,207,36,249,137,116,155,66,158,108,187,50,110,230,146,139,210,109,28,154,76,247,159,72,170,119,68,187,215,195,233,153,159,233,178,49,201,15,101,186,177,228,80,224,229,246,116,251,126,60,47,221,233,79,103,217,150,154,177,164,113,71,166,103,82,233,7,30,174,200,184,224,76,127,118,149,121,253,70,238,75,55,24,241,220,214,235,207,100,182,199,210,13,2,188,178,245,250,198,76,103,211,244,61,156,154,201,166,237,123,82,193,158,197,156,146,228,187,211,189,63,31,206,116,79,143,227,213,15,112,188,36,149,53,180,152,53,73,190,43,2,28,0,0,176,226,9,112,156,56,253,193,224,179,210,29,0,15,121,52,201,31,245,214,93,153,228,141,169,210,140,33,107,82,211,120,254,124,42,75,97,87,146,159,76,183,140,227,100,251,225,84,54,192,172,76,142,11,146,252,72,111,221,71,211,13,246,52,142,38,249,84,111,221,63,200,112,54,196,154,84,137,198,207,102,186,183,71,50,60,240,110,166,155,109,172,75,77,47,187,88,63,137,141,169,217,83,218,134,2,9,183,164,91,230,113,225,100,191,197,2,82,231,38,121,125,111,221,152,169,90,103,101,63,236,155,177,190,209,238,123,209,126,94,251,217,69,179,124,40,21,36,106,92,150,106,140,250,148,25,219,111,72,242,134,116,27,199,30,72,242,127,71,126,222,82,236,79,114,85,107,121,109,146,55,165,238,195,144,211,82,231,254,146,19,112,46,0,0,192,50,91,105,229,12,67,54,165,219,84,114,169,238,76,242,213,101,58,151,165,56,152,26,80,53,125,22,54,39,249,133,36,31,79,5,63,54,167,122,43,244,167,65,189,49,201,123,82,37,12,141,43,83,253,9,62,150,42,49,56,156,26,24,110,74,101,71,180,7,104,71,82,65,146,165,78,207,121,34,173,77,13,20,191,35,245,253,239,73,242,141,212,192,254,146,36,207,239,109,255,96,166,155,118,182,93,157,186,38,235,38,203,27,147,252,98,106,6,146,91,39,199,62,61,53,133,235,57,67,7,152,152,53,232,254,243,84,57,75,147,57,113,65,146,127,153,186,55,215,167,6,224,15,79,246,63,55,149,137,209,14,64,221,157,228,35,3,199,125,44,201,31,166,130,81,77,182,194,139,82,25,22,159,72,245,156,104,122,138,108,76,5,103,250,89,45,215,102,92,111,138,161,62,27,7,210,13,62,12,185,37,245,124,245,131,113,99,251,97,60,148,228,29,73,126,46,11,89,75,207,79,77,169,251,177,36,95,73,221,223,245,169,160,209,11,50,61,115,206,239,167,91,234,178,156,222,155,10,186,52,127,151,91,82,247,99,111,234,254,30,154,156,247,246,212,181,55,157,44,0,0,172,18,171,33,192,113,126,146,31,63,142,253,127,63,39,39,192,113,52,53,16,127,67,107,221,142,84,202,126,227,131,153,14,112,36,201,255,73,5,40,94,215,90,183,41,201,171,230,124,230,3,73,126,55,243,155,65,62,158,246,101,97,118,148,115,178,120,192,33,169,210,158,183,101,241,50,140,123,147,252,78,170,28,167,109,119,166,27,85,54,174,77,53,154,124,105,107,93,127,96,221,56,156,228,183,147,252,84,186,165,9,151,76,254,45,230,224,100,223,254,52,172,141,219,83,51,163,188,41,11,131,231,83,83,65,146,126,15,146,190,155,147,188,43,227,154,170,222,150,202,70,105,151,70,125,58,243,3,95,143,164,174,213,119,182,214,29,76,149,220,140,245,229,36,191,153,202,36,106,2,63,27,211,45,121,153,245,217,111,207,248,108,145,99,241,96,146,255,146,42,231,106,247,23,217,149,217,165,78,55,166,174,193,139,78,224,121,1,0,0,199,73,137,202,137,245,161,36,159,92,228,253,89,215,255,104,146,247,37,249,207,169,129,234,24,55,37,121,115,150,119,106,205,229,112,32,201,91,51,61,203,200,144,59,146,252,199,140,11,208,92,159,228,55,50,221,128,179,239,161,84,214,196,239,101,186,73,230,69,139,236,183,63,201,191,79,114,205,136,115,105,92,59,217,231,43,115,182,219,155,186,87,243,202,69,26,71,82,65,175,183,166,50,12,198,120,36,211,179,242,140,125,54,250,1,134,235,51,221,79,100,158,47,37,249,119,89,252,249,239,127,230,175,167,178,112,78,180,187,146,188,37,21,184,152,231,47,82,65,151,175,157,208,51,2,0,0,142,219,106,200,224,88,205,30,77,13,172,175,75,149,33,156,159,186,230,77,19,200,111,204,217,255,198,212,32,248,153,169,114,133,243,82,165,45,155,82,101,46,95,77,5,64,110,74,149,16,44,231,116,169,203,233,112,146,119,166,2,62,187,82,229,10,91,82,101,36,119,167,6,156,55,164,190,239,80,70,203,44,159,75,242,175,146,124,107,170,199,201,217,169,107,211,148,7,237,77,13,242,155,114,135,125,73,222,221,218,255,104,170,79,199,172,235,246,245,84,185,197,251,83,153,27,23,164,166,92,61,35,117,31,15,78,206,253,182,201,103,221,185,132,115,111,130,57,231,165,238,237,249,169,140,146,141,169,224,68,83,78,114,107,170,159,198,253,75,56,118,227,166,44,244,182,120,36,211,77,78,103,249,98,42,168,210,244,113,25,27,136,233,219,159,202,180,249,64,234,254,92,152,106,134,187,57,117,237,238,155,124,214,231,83,223,243,241,124,126,247,39,249,173,212,181,191,60,245,236,108,75,221,243,123,82,223,185,221,244,247,240,192,49,0,0,128,21,100,236,244,157,48,214,51,146,252,74,107,249,227,169,32,15,0,0,0,156,48,74,84,0,0,0,128,85,79,128,3,0,0,0,88,245,4,56,0,0,0,128,85,79,128,3,0,0,0,88,245,4,56,0,0,0,128,85,79,128,3,0,0,0,88,245,4,56,0,0,0,128,85,79,128,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,248,127,237,193,33,1,0,0,0,128,160,255,175,157,97,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,1,132,98,160,20,143,42,176,72,0,0,0,0,73,69,78,68,174,66,96,130]},{"layer_unique_id":53450,"duration_micros":1101,"top":1173.0,"left":33.0,"width":5.5,"height":52.25,"snapshot":[137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,4,56,0,0,8,106,8,6,0,0,0,106,246,175,7,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,32,0,73,68,65,84,120,156,236,193,1,1,0,0,0,128,144,254,175,238,8,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,217,131,3,1,0,0,0,0,32,255,215,70,80,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,38,236,249,77,0,0,3,107,73,68,65,84,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,105,15,14,9,0,0,0,0,4,253,127,237,9,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,252,2,13,124,0,1,145,195,48,193,0,0,0,0,73,69,78,68,174,66,96,130]},{"layer_unique_id":53454,"duration_micros":2101,"top":1288.75,"left":276.067138671875,"width":802.3994140625,"height":304.683349609375,"snapshot":[137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,4,56,0,0,8,106,8,6,0,0,0,106,246,175,7,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,32,0,73,68,65,84,120,156,236,193,1,1,0,0,0,128,144,254,175,238,8,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,217,187,243,48,201,170,250,126,192,159,217,216,151,97,17,33,195,42,110,160,8,200,14,194,24,92,64,73,84,208,24,4,212,68,4,13,196,40,146,184,36,168,184,37,46,137,137,73,192,5,183,136,138,104,196,32,226,2,138,236,32,160,184,32,138,178,14,155,131,195,54,56,3,204,250,251,227,84,253,186,234,214,173,238,234,233,238,169,233,174,247,125,158,122,166,239,169,91,183,78,85,221,158,153,251,169,115,190,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,116,211,250,221,1,0,0,0,96,202,153,155,228,115,53,237,187,36,89,60,17,79,56,115,34,14,10,0,0,172,177,214,75,242,203,113,56,206,133,73,222,56,14,199,97,226,188,62,201,59,123,220,119,81,146,251,146,252,46,201,207,146,92,149,114,158,172,156,152,174,65,173,29,146,28,144,100,223,36,219,52,110,247,39,185,39,201,141,73,46,75,114,93,146,37,117,15,22,112,0,0,0,176,126,202,197,229,14,73,94,216,104,187,50,201,71,147,252,162,95,157,98,96,108,146,228,13,73,142,171,185,111,227,36,79,74,242,156,36,199,39,185,62,201,7,27,127,182,153,62,129,29,4,0,0,96,100,251,39,185,165,230,182,97,63,59,149,210,175,111,38,121,85,159,251,193,212,182,113,146,79,165,62,220,168,179,123,146,175,38,217,167,122,135,128,3,0,0,128,225,124,32,201,203,250,221,9,166,164,105,41,163,49,246,24,229,227,102,38,249,143,148,145,31,109,141,0,0,0,73,242,246,81,236,123,255,132,245,130,137,246,158,36,143,85,218,214,77,178,117,146,35,146,108,90,243,152,83,83,106,31,220,53,177,93,99,192,60,59,201,139,106,218,31,72,242,233,36,191,77,9,49,142,76,178,87,101,159,45,146,28,146,50,154,35,137,128,3,0,0,40,62,156,228,127,251,221,9,86,139,115,147,60,210,229,190,211,147,188,63,201,97,149,246,13,147,252,101,146,127,155,192,126,49,120,14,170,105,123,52,201,49,73,110,106,105,187,32,201,217,73,118,174,236,251,188,180,4,28,166,168,0,0,0,208,244,112,146,83,146,204,171,185,239,21,73,102,173,222,238,48,197,237,84,211,118,110,218,195,141,164,44,43,251,127,53,251,238,216,186,97,4,7,0,0,48,222,214,74,178,95,202,170,7,207,72,50,39,201,58,73,238,76,25,114,126,121,146,43,82,46,166,135,115,110,146,103,86,218,94,212,56,198,158,41,197,47,247,72,89,74,242,180,36,31,171,57,198,198,73,158,159,242,77,239,142,73,54,79,114,91,202,82,168,231,167,172,196,176,119,146,179,42,143,59,61,35,143,86,216,46,201,129,41,197,56,183,73,121,157,127,72,114,119,146,31,167,188,198,27,186,60,118,215,36,231,140,112,252,159,181,252,252,47,73,62,51,194,254,227,101,97,146,175,39,57,185,210,190,69,202,235,188,181,203,227,102,39,121,110,202,180,131,103,37,121,98,202,151,234,119,164,20,77,189,52,101,101,150,145,62,247,166,245,26,199,219,59,201,110,73,182,74,178,34,229,253,189,35,229,60,186,58,201,189,61,30,111,139,148,243,96,175,36,79,79,178,101,202,107,189,59,101,121,220,203,83,62,183,186,209,45,111,72,242,182,74,219,127,36,249,175,154,125,119,74,242,237,74,219,147,83,191,228,238,197,41,239,105,171,35,146,252,188,203,107,216,36,101,25,213,131,82,86,22,217,46,101,137,223,187,83,150,245,109,190,134,165,93,30,159,148,207,229,202,74,219,162,148,207,108,70,146,23,55,250,240,204,148,233,74,199,54,250,89,181,123,202,20,145,61,27,253,88,144,228,87,73,206,75,89,206,181,23,87,37,249,117,165,237,39,93,246,157,95,211,54,39,165,142,199,202,68,192,1,0,0,140,175,231,164,212,242,168,14,37,79,74,184,176,123,202,84,135,249,73,62,158,50,45,102,249,40,142,191,126,202,240,245,247,86,218,151,213,236,123,96,146,247,37,217,182,210,190,123,227,246,215,41,243,252,111,28,197,243,39,229,66,254,13,41,75,86,86,109,156,114,49,59,183,177,125,126,74,240,114,251,40,159,163,223,170,23,157,77,155,165,51,224,88,39,201,171,147,188,57,165,150,71,213,230,41,65,212,43,147,220,147,228,67,73,190,147,250,11,254,166,67,147,188,43,37,132,168,218,34,229,243,123,89,146,199,83,194,173,255,73,242,199,46,199,90,59,201,95,53,250,183,118,229,190,141,83,2,134,125,27,175,225,158,148,165,113,191,157,18,166,52,213,5,14,213,240,173,105,247,154,182,29,210,249,190,53,3,163,86,143,166,115,244,66,82,130,135,87,38,121,75,202,251,217,106,211,12,189,134,227,82,130,177,143,166,132,63,189,90,63,201,6,41,245,89,142,168,220,183,162,178,189,94,74,216,243,234,154,126,60,53,201,225,41,163,45,46,237,225,121,63,63,138,62,110,86,211,118,75,90,206,35,1,7,0,0,48,94,234,130,135,110,158,152,228,159,83,46,18,63,144,114,161,218,139,63,79,242,218,154,246,106,192,113,112,146,79,100,228,107,158,186,144,98,56,91,165,124,107,95,119,17,91,231,176,148,17,3,39,164,140,22,153,44,186,125,30,51,42,219,27,164,140,116,121,126,143,199,253,147,36,255,153,114,177,250,197,46,251,188,46,201,63,245,120,188,181,147,188,53,37,64,121,83,202,72,132,86,107,165,4,42,47,25,69,255,254,61,37,164,250,247,12,93,60,215,5,62,123,165,188,31,213,128,110,255,154,125,119,75,103,192,177,67,205,126,151,166,179,0,236,58,73,222,157,18,12,246,98,183,36,95,78,121,15,191,58,194,190,173,78,78,103,184,145,180,255,110,53,223,207,106,141,150,170,151,101,124,87,222,89,171,203,241,218,70,150,168,193,1,0,0,140,135,67,210,123,184,209,234,168,36,127,55,138,253,235,194,141,164,253,34,108,78,202,168,137,241,254,66,119,157,148,105,9,189,134,27,77,91,164,76,47,105,253,182,126,73,74,224,49,92,232,49,191,101,159,133,163,124,206,177,218,170,75,123,117,250,198,201,233,30,110,116,43,100,154,148,145,2,251,212,180,239,145,250,112,99,89,202,136,132,43,187,28,119,110,146,127,172,105,63,38,245,225,198,3,41,97,66,183,247,255,196,180,95,80,63,156,50,157,162,85,115,244,71,171,245,82,194,181,170,186,208,227,201,53,109,63,174,105,123,75,122,15,55,90,125,48,189,7,79,73,242,154,46,237,173,1,206,81,25,57,220,152,8,199,167,76,161,169,58,183,117,195,8,14,0,0,96,172,54,79,153,10,82,181,44,201,25,73,174,105,252,188,115,202,124,254,45,42,251,189,49,229,98,179,238,226,174,87,173,23,97,39,166,172,250,81,117,115,202,144,248,121,41,23,162,7,164,251,69,93,157,215,166,212,27,168,250,73,74,13,143,123,82,166,175,252,121,58,151,190,156,157,18,0,29,155,50,42,224,215,41,69,59,147,114,241,123,102,205,113,15,201,240,33,193,68,153,145,242,26,234,220,217,242,243,246,169,127,255,206,73,153,126,116,87,202,55,239,7,165,172,210,51,187,178,223,177,233,252,204,171,211,30,146,228,194,148,17,12,247,53,182,55,76,153,6,245,170,202,126,71,166,4,73,183,53,182,215,73,153,74,84,117,90,202,232,158,71,27,219,219,36,249,215,116,126,182,39,36,249,86,134,206,173,171,82,106,203,180,218,49,237,211,143,118,73,231,52,152,164,4,13,235,164,125,116,70,93,129,205,95,84,182,247,73,153,118,82,117,79,202,107,189,169,241,124,251,117,217,239,253,41,33,206,88,150,117,110,190,254,205,82,194,150,58,95,74,25,77,177,52,201,211,146,188,62,157,191,231,171,98,90,227,88,39,213,220,247,177,84,166,243,8,56,0,0,128,164,92,48,190,125,20,251,182,46,41,251,210,116,214,5,72,202,84,131,43,90,182,175,76,89,238,241,203,41,83,1,170,251,246,26,112,220,151,18,156,252,52,101,100,195,172,12,77,77,120,98,146,151,215,60,230,250,148,11,165,135,90,218,126,144,228,162,36,95,232,225,57,55,74,253,116,150,239,167,140,98,120,180,165,237,130,148,81,41,213,145,41,115,83,70,127,252,180,135,231,235,151,25,41,1,209,129,53,247,125,39,237,35,73,234,190,81,127,56,101,116,198,226,198,246,146,148,247,249,223,211,57,194,231,121,41,163,32,154,69,71,167,167,126,196,193,191,102,40,220,72,74,232,243,225,148,145,25,235,87,246,125,86,134,2,142,39,165,243,188,188,39,101,138,76,235,136,159,59,83,106,86,156,93,217,183,89,196,179,57,181,164,174,14,199,83,146,252,176,101,187,46,0,75,74,40,179,83,218,71,140,60,187,178,207,227,233,172,191,241,186,154,99,205,75,114,116,202,107,105,186,36,101,132,203,103,43,251,110,145,242,62,245,90,235,226,151,41,245,76,110,74,57,167,215,109,121,158,63,77,125,112,88,157,10,115,121,146,239,166,247,66,163,195,249,155,116,22,187,77,74,240,244,169,106,163,128,3,0,0,24,139,105,41,23,91,85,103,164,61,220,104,154,151,114,113,250,241,74,251,243,83,46,38,239,232,225,57,143,28,102,191,253,83,127,157,243,190,180,135,27,77,189,94,132,29,152,206,17,8,203,82,234,136,60,90,105,95,153,50,66,224,208,148,162,139,173,254,44,253,15,56,14,79,231,123,177,118,74,56,116,104,234,71,22,36,229,91,250,86,63,78,9,183,90,45,205,80,184,209,234,186,46,199,124,98,134,2,142,153,169,47,82,90,231,145,148,32,165,122,193,221,122,94,212,141,164,152,158,250,226,166,191,73,253,20,171,214,207,246,87,53,247,63,163,178,61,183,102,159,166,61,51,20,112,204,78,25,233,208,234,178,180,191,119,219,165,62,240,249,80,218,195,141,166,139,83,234,154,84,71,213,28,157,18,226,13,87,212,181,233,168,212,127,126,73,89,209,166,234,154,116,6,67,105,244,239,219,41,231,251,170,58,50,221,195,141,119,166,166,176,176,128,3,0,0,24,139,109,83,46,196,170,190,51,204,99,46,206,208,183,195,173,158,153,222,2,142,225,246,169,94,112,38,101,10,73,117,232,255,104,213,125,51,255,253,148,105,24,117,150,36,249,70,202,133,88,171,231,166,76,27,232,229,98,115,162,188,103,21,30,243,249,116,142,176,153,159,250,165,59,235,116,91,225,100,157,150,159,151,164,44,171,91,93,157,228,148,148,41,42,243,42,237,223,28,225,57,235,66,128,45,83,70,32,157,150,246,229,106,255,152,238,69,79,155,30,76,9,106,90,207,133,189,83,66,147,21,41,97,205,30,45,247,45,72,251,8,146,185,41,193,95,82,95,96,244,218,202,246,46,53,251,60,146,50,90,163,155,243,211,25,112,236,144,242,123,58,210,239,214,169,233,30,110,204,72,125,205,148,243,210,253,92,254,110,86,61,224,216,33,229,51,175,250,191,148,17,35,213,66,172,73,20,25,5,0,0,198,102,251,46,237,183,117,105,79,202,197,228,47,107,218,171,163,29,234,12,23,156,36,245,133,27,71,26,49,209,45,164,104,85,119,177,121,195,8,143,249,77,77,219,118,169,95,238,114,77,118,86,146,143,140,176,207,244,148,96,226,184,148,218,8,231,165,140,224,185,41,101,41,207,110,23,229,211,106,158,171,234,192,36,63,74,242,201,12,213,65,89,175,135,126,207,79,125,8,114,108,227,120,31,76,169,131,178,83,122,255,242,255,202,202,246,230,25,154,110,181,107,229,190,211,82,70,56,52,237,151,161,207,126,199,154,99,87,167,192,60,165,102,159,235,211,229,226,190,225,150,46,237,221,126,79,91,13,119,62,111,146,178,12,108,213,112,191,231,213,145,77,163,241,138,116,142,192,185,48,195,132,27,137,17,28,0,0,192,144,186,66,126,117,110,108,249,121,227,154,251,31,73,247,111,236,155,238,173,105,171,59,86,85,93,104,208,170,46,60,184,175,166,173,213,77,73,182,30,97,159,106,205,144,100,228,194,141,15,116,105,223,48,229,219,253,53,221,109,41,171,198,156,159,225,71,156,236,154,50,42,162,238,27,254,209,250,122,202,168,136,156,213,232,91,0,0,32,0,73,68,65,84,234,212,151,36,121,65,227,150,148,122,21,223,75,9,188,46,77,25,253,81,231,163,41,83,65,118,174,180,111,156,50,5,226,200,198,246,130,148,209,1,223,79,9,17,186,189,222,159,213,180,61,41,37,36,171,190,254,235,82,46,210,247,110,105,219,45,165,102,199,211,43,251,46,75,231,185,93,157,18,149,36,191,239,210,175,166,133,41,239,77,53,28,216,104,132,199,37,101,122,81,55,221,2,165,135,187,180,143,213,33,149,237,101,41,129,212,112,225,142,128,3,0,0,72,82,234,98,124,107,21,30,87,119,225,115,111,70,158,130,81,119,241,223,203,69,216,131,35,220,95,119,81,88,87,123,163,213,138,17,238,159,150,50,253,160,106,164,21,78,186,221,223,107,157,137,213,105,81,74,96,115,107,74,173,137,107,26,183,110,193,65,211,243,83,70,42,140,215,181,229,242,36,239,72,185,216,127,75,234,235,104,164,209,254,210,198,237,134,148,90,40,117,69,106,231,39,249,235,148,90,14,175,28,230,121,55,79,41,66,251,250,148,144,227,95,210,190,98,76,83,93,29,142,167,166,20,214,124,94,75,219,239,83,130,179,181,42,251,238,149,18,112,236,86,105,175,91,254,182,174,160,231,72,129,194,242,198,115,87,167,141,85,139,177,142,86,183,207,97,34,86,249,217,40,157,83,120,46,79,253,231,209,70,192,1,0,0,140,69,221,48,244,186,48,160,170,46,136,24,143,139,165,135,211,57,218,162,238,66,113,52,86,166,140,2,169,46,123,185,193,8,143,235,246,188,195,126,11,189,26,236,150,241,121,175,183,78,89,225,164,122,93,121,83,74,145,213,27,82,70,20,172,72,169,1,113,78,143,199,93,146,228,211,73,206,77,89,110,247,5,73,246,29,102,255,103,166,212,207,56,49,101,197,150,170,5,41,181,80,190,152,82,68,245,133,25,126,58,212,33,25,90,210,184,58,229,99,65,202,40,142,214,128,98,167,148,81,28,219,180,180,125,63,37,108,184,49,37,204,107,78,239,104,6,66,187,87,142,123,85,77,63,234,70,65,141,20,2,78,79,253,242,172,221,106,107,244,170,91,208,53,17,97,93,221,239,205,72,35,183,146,8,56,0,0,128,177,169,251,70,121,227,148,111,140,23,213,220,215,84,55,229,99,164,145,22,189,168,155,54,242,132,17,30,179,101,15,199,189,39,157,23,142,35,213,210,168,171,89,144,180,47,181,58,153,29,145,206,139,209,219,146,28,147,206,17,58,171,50,130,96,126,202,234,31,95,72,9,205,118,77,89,6,246,207,210,30,38,36,229,218,246,35,41,225,69,183,233,63,191,110,220,254,35,37,144,120,86,74,61,143,195,106,94,199,54,41,171,170,188,58,157,163,145,174,72,123,192,177,103,58,139,208,54,3,139,37,41,97,199,171,26,219,59,164,126,101,148,186,37,104,235,126,31,70,58,87,55,74,125,232,48,214,169,36,221,126,151,123,25,117,53,90,15,166,188,239,173,70,154,154,147,68,145,81,0,0,96,108,110,239,210,94,183,178,74,211,186,233,172,137,144,36,191,27,123,119,242,219,154,182,106,241,199,170,186,2,162,85,117,171,176,84,151,249,172,122,82,77,219,188,140,92,187,99,178,168,91,18,245,27,233,94,123,100,44,230,39,185,32,101,196,200,11,83,138,77,86,109,156,82,200,115,36,43,83,70,102,124,179,113,156,231,166,126,5,149,253,82,95,156,179,26,70,108,157,82,252,180,213,245,45,63,87,71,103,252,93,205,49,235,70,40,212,157,203,187,164,115,218,75,171,110,197,68,187,253,158,246,234,193,212,127,174,117,69,125,155,214,25,230,190,225,44,78,153,178,211,122,187,181,151,7,10,56,0,0,128,177,184,35,157,203,119,38,157,69,2,91,61,39,245,195,208,71,90,149,164,23,117,199,216,63,157,69,29,71,235,39,53,109,135,166,251,116,156,25,73,14,175,105,191,56,189,47,17,91,93,97,100,77,83,183,202,199,221,93,246,173,155,146,84,245,218,148,229,104,91,111,117,163,29,150,36,249,106,234,87,72,217,170,229,231,127,173,57,94,93,0,240,80,74,205,141,186,98,180,117,211,61,234,206,177,214,41,47,87,166,125,20,73,245,220,217,182,178,125,85,234,71,88,212,61,207,166,25,62,196,169,251,189,155,151,250,223,209,209,88,158,228,234,154,246,186,98,176,77,135,142,241,57,71,77,192,1,0,0,140,197,202,36,95,169,105,63,46,157,117,6,146,18,8,188,173,166,253,162,140,253,91,230,164,92,92,46,171,105,63,37,245,161,202,65,61,30,247,178,116,78,25,88,55,201,63,164,254,27,245,191,78,153,2,81,117,126,77,91,183,229,52,183,234,210,190,166,168,11,4,234,70,230,204,72,242,174,30,142,247,120,202,231,209,122,123,241,48,251,215,5,64,173,245,77,166,215,28,111,184,90,30,117,37,28,234,234,165,204,79,251,74,66,85,63,170,108,255,62,101,69,149,110,234,234,111,36,229,247,225,162,154,246,183,167,20,69,173,218,59,201,235,106,218,191,156,222,67,181,225,212,245,101,239,148,41,62,85,115,146,188,100,12,207,53,39,37,240,122,75,202,136,157,25,189,60,72,13,14,0,0,96,172,190,153,228,248,180,215,156,88,59,201,153,73,62,153,228,167,41,161,195,83,82,86,169,168,126,131,157,36,159,27,167,190,252,33,201,89,233,156,195,191,95,74,16,115,102,202,106,12,27,165,140,236,56,50,189,121,56,201,103,146,252,125,165,253,240,148,26,31,95,79,185,144,221,40,165,48,230,17,53,199,184,52,245,35,65,186,213,71,120,111,146,179,83,106,118,44,75,114,73,143,125,93,93,126,150,206,213,46,142,75,169,87,242,195,148,62,111,159,18,246,84,107,84,52,181,134,20,151,164,115,137,211,151,166,140,18,250,66,134,222,167,25,41,23,213,47,171,57,222,175,91,126,254,78,58,71,24,252,99,74,241,206,11,50,84,56,115,131,36,39,164,179,102,202,35,41,53,69,234,92,150,250,48,39,169,15,51,126,152,238,239,65,93,253,141,166,207,37,57,184,210,246,180,148,17,44,159,77,153,106,51,171,113,236,55,164,243,26,191,185,252,237,120,184,56,229,51,168,46,231,252,159,41,133,94,175,78,9,82,158,150,228,175,198,240,60,79,74,242,191,149,231,249,82,146,247,140,244,64,1,7,0,0,48,86,11,82,190,161,63,173,210,190,110,146,147,122,120,252,25,233,254,45,246,170,248,68,202,5,112,245,130,117,231,148,169,8,171,234,243,41,245,26,170,23,170,207,105,220,134,243,112,146,83,83,255,77,250,188,148,208,165,90,56,115,175,198,45,73,46,204,154,23,112,156,147,250,105,56,239,73,15,23,163,13,179,90,126,190,55,229,28,122,107,101,159,191,75,9,32,126,158,50,218,229,169,169,159,58,114,101,74,152,214,244,163,148,80,169,117,148,206,250,73,62,158,242,121,220,152,50,202,227,89,169,47,204,249,217,116,47,8,123,125,151,246,251,210,30,178,52,93,219,101,255,164,126,233,217,166,171,82,126,63,142,171,180,239,144,228,3,195,60,174,233,221,233,94,116,117,180,30,76,41,208,90,247,217,30,223,184,141,135,35,210,25,162,28,147,18,48,14,187,84,172,41,42,0,0,192,120,248,94,202,5,252,104,157,157,114,209,52,158,230,167,12,109,127,124,156,143,251,88,227,184,221,46,110,187,121,32,229,226,239,142,46,247,47,75,249,134,122,56,107,98,61,142,171,82,70,86,244,162,219,40,149,77,42,219,159,76,57,39,170,102,38,217,35,37,72,170,11,55,110,78,25,157,177,188,165,109,121,146,147,147,252,178,102,255,102,65,210,125,82,31,110,92,144,114,65,221,77,183,80,226,194,36,75,187,236,95,183,42,202,181,41,193,193,112,254,35,201,215,70,216,167,206,123,83,86,112,25,79,95,77,242,237,30,247,173,43,146,218,139,110,203,47,143,184,18,143,128,3,0,0,24,47,103,166,12,77,31,174,62,65,211,3,41,223,4,191,43,245,117,14,198,234,138,70,95,134,91,125,225,241,198,243,95,56,138,227,222,155,50,205,230,140,30,247,191,48,101,26,204,112,53,24,146,178,138,199,121,163,232,199,154,96,101,146,15,167,115,228,78,213,173,41,223,192,95,94,115,95,117,165,153,229,41,159,201,219,211,251,210,166,103,39,121,77,234,191,221,127,32,201,209,73,62,213,227,177,30,77,89,110,246,164,116,175,141,146,148,105,56,117,23,240,87,118,217,127,73,74,8,216,235,254,173,30,75,169,33,243,174,244,54,26,227,198,148,115,191,110,101,152,177,90,146,228,157,61,28,251,188,36,71,101,213,66,198,203,106,218,126,145,30,86,82,49,69,5,0,0,24,79,151,37,249,113,202,183,227,7,164,44,107,185,117,202,146,145,119,165,124,211,126,121,202,212,129,145,190,185,30,171,107,82,134,187,63,63,201,243,82,106,3,204,78,169,171,112,117,146,111,53,250,243,130,154,199,214,21,42,109,122,40,201,135,82,106,125,28,152,82,203,99,219,148,215,185,32,229,117,94,151,18,178,252,44,189,21,120,92,146,50,53,227,219,41,69,21,119,73,41,50,186,32,165,206,194,104,66,152,213,105,73,146,143,165,212,187,56,36,101,68,196,14,41,175,249,166,148,218,19,231,166,212,179,184,36,157,83,121,14,73,9,31,90,223,163,229,41,53,24,126,152,82,127,98,223,36,59,165,188,191,43,82,70,232,252,54,101,36,205,165,25,249,194,119,81,74,104,241,245,36,127,154,50,197,232,233,41,35,65,22,165,132,86,191,74,249,204,46,73,239,203,220,94,154,246,213,83,146,225,71,247,92,153,206,154,47,195,213,223,104,181,60,165,134,204,119,83,222,195,3,147,236,152,114,222,45,73,9,119,110,72,249,221,186,42,227,63,122,169,213,226,148,209,33,223,74,89,41,101,143,148,207,252,190,148,247,241,252,148,247,113,69,202,185,219,173,86,73,55,23,165,212,186,57,58,229,119,224,202,148,105,69,75,134,123,16,0,0,192,160,155,150,82,171,225,150,202,237,181,253,236,20,48,122,166,168,0,0,0,83,213,238,41,35,71,134,243,140,212,175,234,50,30,75,214,2,171,145,128,3,0,0,152,138,182,76,114,122,202,170,41,213,66,150,77,27,38,121,71,77,251,227,41,83,75,128,73,100,70,191,59,0,0,0,48,206,102,164,4,27,187,165,212,221,56,180,209,190,52,165,14,225,19,83,106,24,252,115,146,103,215,60,254,140,148,105,43,192,36,178,38,46,53,4,0,0,48,22,47,77,41,124,185,42,126,146,228,216,148,162,152,192,36,98,4,7,0,0,48,213,252,33,101,100,198,159,140,242,113,55,39,57,49,189,45,197,9,172,97,4,28,0,0,192,84,243,104,202,178,165,143,39,121,86,146,181,122,120,204,233,73,222,30,225,6,76,90,166,168,0,0,0,83,217,102,73,14,74,178,119,146,103,38,217,38,201,138,36,247,36,249,77,202,148,148,203,146,220,213,175,14,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,171,205,180,126,119,0,0,214,48,211,50,244,239,163,127,39,89,19,173,108,249,115,229,112,59,2,192,32,241,31,55,0,40,154,193,198,140,36,211,147,76,207,231,190,181,83,54,216,104,179,76,155,230,223,75,250,111,229,202,149,249,227,194,251,243,186,151,252,58,201,138,198,109,121,4,29,0,144,68,192,1,0,201,80,168,49,35,231,92,118,84,214,219,240,149,153,57,227,224,100,218,172,126,119,12,58,173,92,154,101,203,47,202,226,71,190,150,35,14,252,74,74,200,209,12,59,0,96,96,9,56,0,24,100,211,83,254,45,156,149,175,93,244,188,204,222,236,3,153,62,99,183,126,119,10,122,182,98,249,207,242,208,253,167,228,149,7,255,48,201,210,148,145,28,43,250,220,43,0,232,11,1,7,0,131,170,57,29,101,102,206,251,241,155,178,238,250,31,233,119,135,96,149,61,186,232,109,249,243,125,254,43,201,178,12,77,91,1,128,129,50,189,223,29,0,128,62,104,134,27,179,242,205,171,79,20,110,48,233,173,187,254,71,242,205,171,79,76,50,43,229,220,246,37,22,0,3,199,63,126,0,12,154,105,41,1,255,204,156,121,254,65,217,106,187,11,250,221,33,24,55,247,222,241,194,188,250,176,75,83,70,114,172,136,145,28,0,12,16,35,56,0,24,36,205,149,82,166,39,153,149,45,230,188,167,207,253,129,241,85,206,233,89,25,170,47,227,203,44,0,6,134,128,3,128,65,209,26,110,204,204,151,190,127,104,102,204,60,160,207,125,130,241,53,99,230,1,249,210,247,15,77,50,51,66,14,0,6,140,128,3,128,65,83,234,111,204,222,244,229,253,238,8,76,136,114,110,171,195,1,192,192,17,112,0,48,8,90,71,111,204,72,50,35,107,173,117,96,127,187,4,19,164,156,219,51,26,55,163,56,0,24,24,2,14,0,6,197,80,200,113,212,177,179,51,125,198,156,126,119,8,38,196,244,25,115,114,212,177,179,35,220,0,96,192,8,56,0,152,234,166,117,220,182,125,242,166,253,237,18,76,176,114,142,119,158,251,0,48,133,9,56,0,24,36,101,4,199,210,165,254,253,99,106,43,231,120,115,4,7,0,12,4,255,193,3,96,16,180,126,131,61,61,203,4,28,76,113,203,218,2,14,163,55,0,24,8,254,131,7,192,84,55,173,229,207,114,91,177,194,197,30,83,91,57,199,171,225,134,243,30,128,41,77,192,1,192,84,86,127,97,39,224,96,170,235,60,199,133,28,0,76,121,2,14,0,6,137,161,250,12,18,231,59,0,3,69,192,1,0,0,0,76,122,2,14,0,0,0,96,210,19,112,0,0,0,0,147,158,128,3,0,0,0,152,244,4,28,0,0,0,192,164,39,224,0,0,0,0,38,61,1,7,0,0,0,48,233,9,56,0,0,0,128,73,79,192,1,0,0,0,76,122,2,14,0,0,0,96,210,19,112,0,0,0,0,147,158,128,3,0,0,0,152,244,4,28,0,0,0,192,164,39,224,0,0,0,0,38,61,1,7,0,0,0,48,233,9,56,0,0,0,128,73,79,192,1,0,0,0,76,122,2,14,0,0,0,96,210,19,112,0,0,0,0,147,222,204,126,119,0,0,24,133,59,110,73,142,125,105,123,219,91,79,77,94,252,138,254,244,167,31,46,187,48,57,235,51,201,194,135,146,63,125,113,114,204,27,147,181,215,238,119,175,0,128,62,19,112,0,0,147,199,93,183,39,239,61,105,104,251,172,51,146,205,158,144,188,236,168,254,245,9,0,88,35,152,162,2,0,76,30,247,220,217,217,118,251,205,171,191,31,0,192,26,71,192,1,0,76,30,59,60,37,89,111,253,246,182,103,236,214,159,190,0,0,107,20,83,84,0,128,201,227,9,91,38,31,254,116,114,254,255,38,139,23,37,123,30,144,60,239,207,250,221,43,0,96,13,32,224,0,0,38,151,157,118,45,55,0,128,22,166,168,0,0,0,0,147,158,17,28,0,64,187,7,22,36,215,93,81,110,119,221,158,220,123,87,178,201,230,201,150,115,146,93,247,74,246,122,78,242,164,167,142,238,152,15,63,152,92,241,195,228,234,75,146,121,183,37,139,30,73,230,108,155,60,115,143,100,238,11,147,167,236,92,10,136,190,230,69,67,143,217,104,118,114,206,229,237,199,121,240,254,228,47,230,182,183,157,242,175,201,115,15,109,111,187,232,252,228,159,223,62,180,189,251,190,201,71,63,83,126,190,243,182,228,178,31,36,63,185,50,185,251,142,210,182,205,147,146,61,247,47,211,93,54,223,98,116,175,13,0,88,35,8,56,0,128,98,217,210,228,188,175,37,95,60,45,121,100,97,251,125,143,44,76,230,221,154,92,115,89,114,198,199,146,23,191,60,121,205,137,189,133,1,87,254,40,249,175,15,36,127,152,223,222,254,224,253,201,13,215,39,95,253,76,114,244,241,201,190,115,235,31,63,30,22,62,148,44,91,150,124,229,211,229,182,108,89,251,253,11,238,75,174,191,58,57,251,115,201,187,254,45,217,125,159,137,235,11,0,48,33,76,81,1,0,146,199,31,75,254,237,221,201,105,255,210,25,110,212,249,206,55,146,183,189,62,185,243,246,225,247,187,228,251,201,187,223,212,25,110,84,125,249,211,201,155,142,238,189,191,163,117,239,157,201,199,223,151,124,241,244,206,112,163,213,194,135,146,247,157,148,220,61,111,226,250,2,0,76,8,1,7,0,144,124,238,227,201,133,231,117,182,239,59,55,57,226,152,228,249,127,86,166,140,180,154,119,107,114,234,155,187,7,34,119,207,75,62,242,79,157,237,107,175,147,236,127,112,242,162,35,146,221,246,30,123,223,123,177,120,81,242,221,115,202,207,27,205,78,230,30,90,158,127,231,154,98,165,143,44,76,190,117,214,234,233,23,0,48,110,76,81,1,128,65,119,253,213,201,55,206,108,111,219,117,175,228,164,247,36,91,111,63,212,182,232,143,201,151,62,153,124,253,11,67,109,119,220,146,124,233,19,201,223,188,61,29,190,252,169,50,50,164,213,139,142,72,94,127,82,178,241,38,67,109,119,207,75,62,241,225,82,159,99,162,189,254,164,228,165,175,74,214,93,111,168,237,87,215,39,167,156,216,30,212,124,247,156,178,239,172,181,38,190,79,0,192,184,48,130,3,0,6,93,53,220,152,179,109,169,67,209,26,110,36,201,250,27,36,199,159,92,234,111,180,58,247,172,228,190,123,219,219,22,220,151,92,112,110,123,219,190,115,147,55,191,171,61,220,104,62,223,63,126,100,213,251,223,171,163,223,144,28,121,108,123,184,145,36,207,216,61,57,230,111,218,219,22,47,42,69,79,1,128,73,67,192,1,0,131,236,174,219,59,71,78,28,253,134,100,246,166,245,251,79,155,150,28,243,198,246,182,101,203,146,43,46,106,111,187,254,199,157,143,61,250,248,100,230,172,250,227,174,183,126,111,253,29,139,35,142,233,126,223,179,246,232,108,91,248,208,196,245,5,0,24,119,2,14,0,24,100,191,253,85,103,219,94,207,25,254,49,91,108,149,28,240,188,246,182,159,95,211,190,125,243,141,237,219,115,182,77,158,190,203,240,199,61,234,184,225,239,31,171,110,225,74,146,108,184,113,103,219,163,139,39,174,47,0,192,184,19,112,0,192,32,187,253,230,246,237,29,158,146,108,178,217,200,143,171,22,231,252,233,213,201,202,149,221,143,251,172,61,147,105,35,252,183,163,46,100,88,93,102,204,232,108,91,190,124,245,247,3,0,88,101,2,14,0,24,100,15,61,216,190,61,103,219,222,30,247,132,39,182,111,47,94,148,60,246,104,203,113,31,104,191,127,243,202,254,0,0,227,76,192,1,0,131,108,241,31,219,183,171,5,56,187,89,107,157,206,182,214,21,83,170,75,199,174,93,179,63,0,192,56,18,112,0,192,32,91,111,131,246,237,71,31,173,223,175,106,201,227,157,109,173,33,198,134,27,141,188,63,0,192,56,18,112,0,192,32,171,46,217,250,251,187,123,123,220,253,247,181,111,175,183,126,178,206,186,67,219,213,58,30,15,44,24,125,223,0,0,70,65,192,1,0,131,108,187,29,219,183,111,254,117,242,240,131,245,251,182,250,205,13,237,219,187,237,83,150,144,253,255,199,125,114,251,253,55,92,223,94,132,180,206,226,69,35,63,47,0,64,23,2,14,0,24,100,79,123,102,103,219,79,174,26,254,49,247,223,151,92,241,131,246,182,93,247,106,223,126,234,206,237,219,183,255,46,185,229,55,195,31,247,255,190,60,252,253,0,0,195,16,112,0,192,32,219,102,251,100,239,3,219,219,190,114,70,242,200,195,245,251,175,92,153,156,245,217,100,217,178,246,246,3,14,110,223,222,125,159,100,230,204,206,227,118,91,122,117,209,31,59,11,147,2,0,140,130,128,3,0,6,221,43,94,211,190,125,251,239,146,15,254,67,114,247,188,246,246,71,23,39,95,248,175,206,145,22,135,31,157,108,57,167,189,109,211,39,36,135,30,209,222,118,233,5,201,233,31,234,12,50,238,188,61,121,223,73,171,222,127,0,128,36,51,71,222,5,0,88,163,125,236,212,228,199,151,245,190,255,134,27,37,127,255,254,161,237,103,239,151,188,252,213,201,55,206,28,106,187,238,202,228,181,47,78,246,157,155,252,201,54,37,148,184,230,178,206,250,28,219,108,159,188,230,132,250,231,57,250,248,228,146,239,181,7,26,231,158,149,252,224,188,100,143,253,75,97,210,123,238,76,126,113,93,239,125,7,0,232,66,192,1,0,83,193,21,63,236,125,223,109,182,239,108,123,221,155,147,133,15,39,23,126,171,189,253,234,75,186,31,103,235,237,147,83,63,158,108,184,113,253,253,79,216,50,121,199,135,146,247,252,93,251,148,150,69,127,44,163,57,0,0,198,145,41,42,0,64,178,246,58,201,201,239,75,78,120,71,178,254,6,35,239,255,130,151,36,31,253,76,231,42,44,85,251,28,148,124,240,19,157,83,88,90,205,156,153,28,247,214,228,248,147,71,215,103,0,128,22,70,112,0,0,197,204,153,201,17,199,36,207,61,36,185,230,242,228,167,87,37,243,110,75,230,223,157,108,188,105,9,41,118,221,51,217,227,128,206,85,82,134,179,199,126,201,233,103,39,151,255,48,185,250,226,228,246,155,75,61,143,57,219,149,98,164,115,15,73,182,127,114,114,246,231,218,31,183,246,218,227,251,250,0,128,41,77,192,1,0,147,201,118,59,38,63,184,97,98,159,99,211,39,36,135,30,94,110,227,101,163,217,201,139,95,94,110,221,60,176,160,179,31,85,155,108,214,219,235,63,248,176,114,235,213,19,182,156,248,247,21,0,152,80,166,168,0,0,19,235,177,71,71,222,103,249,242,228,186,43,218,219,118,124,250,196,244,7,0,152,146,4,28,0,192,196,249,237,141,201,91,95,155,220,127,223,240,251,93,118,97,114,199,45,237,109,187,237,61,113,253,2,0,166,28,1,7,0,48,49,30,89,152,124,228,159,74,200,113,210,107,203,138,44,203,151,183,239,179,124,121,114,241,247,146,127,63,181,189,125,243,45,74,129,82,0,128,30,169,193,1,0,76,140,115,191,146,220,254,187,242,243,61,119,38,167,156,152,204,217,54,217,99,255,100,246,166,201,194,135,146,159,94,157,204,187,181,243,177,39,157,218,219,106,46,0,0,13,2,14,0,96,98,188,228,200,228,250,31,39,63,191,118,168,237,238,121,229,54,156,19,223,105,244,6,0,48,106,166,168,0,0,19,99,163,217,201,63,127,50,121,221,155,123,27,141,177,221,142,201,199,190,144,28,126,244,196,247,13,0,152,114,140,224,0,0,38,206,218,107,39,71,29,151,28,246,138,228,39,87,38,63,187,54,185,233,134,228,247,119,37,51,103,37,219,108,159,60,237,153,201,110,251,36,123,236,151,172,181,118,191,123,12,0,76,82,2,14,0,96,226,109,188,73,114,240,97,229,6,0,48,1,76,81,1,0,0,0,38,61,1,7,0,0,0,48,233,9,56,0,0,0,128,73,79,192,1,0,0,0,76,122,2,14,0,0,0,96,210,19,112,0,0,0,0,147,158,128,3,0,0,0,152,244,4,28,0,0,0,192,164,39,224,0,0,0,0,38,61,1,7,0,0,0,48,233,9,56,0,0,0,128,73,79,192,1,0,0,0,76,122,2,14,0,0,0,96,210,19,112,0,0,0,0,147,158,128,3,0,0,0,152,244,4,28,0,0,0,192,164,39,224,0,96,240,44,94,184,180,223,93,128,9,229,28,7,96,0,77,235,119,7,0,96,2,77,107,220,166,55,110,51,147,172,149,100,189,252,224,151,183,39,211,102,245,179,115,48,49,86,46,205,243,119,217,62,201,226,36,75,146,44,75,178,162,113,91,217,184,1,192,148,99,4,7,0,131,104,101,30,95,242,243,126,119,2,38,68,57,183,133,24,0,12,28,1,7,0,131,166,124,131,253,224,31,46,234,119,71,96,66,148,115,219,72,13,0,6,142,128,3,128,65,179,50,201,138,156,115,230,255,102,101,86,244,187,51,48,174,86,54,206,237,161,233,40,0,48,48,4,28,0,12,166,115,190,252,135,220,123,231,39,250,221,13,24,87,247,222,249,137,156,243,229,63,244,187,27,0,208,15,138,140,2,48,149,213,21,25,157,153,100,86,146,117,147,172,159,115,175,58,51,235,111,184,87,255,186,8,227,100,209,35,215,230,165,251,189,58,201,162,36,143,38,89,154,82,96,84,145,81,0,6,194,140,126,119,0,0,38,80,51,224,72,74,192,209,26,118,76,79,50,35,11,230,95,147,61,246,223,55,179,102,109,222,167,62,194,216,61,186,248,55,249,207,15,188,37,183,254,246,161,12,173,156,178,60,67,161,134,233,88,0,76,121,2,14,0,6,193,180,116,142,230,40,129,199,173,191,125,60,55,92,247,163,236,125,208,246,89,119,189,29,250,217,73,88,37,15,44,248,81,222,243,183,127,159,171,47,157,159,228,241,12,133,27,205,128,163,117,228,134,209,27,0,76,89,2,14,0,166,186,105,233,12,56,90,131,142,105,185,239,247,75,243,245,47,92,156,157,118,157,159,77,54,157,147,89,107,109,218,191,238,66,143,22,255,241,230,252,236,218,211,242,198,87,252,119,238,251,253,194,148,112,99,184,105,41,194,13,0,166,52,53,56,0,152,234,170,35,55,102,100,168,14,199,90,141,219,218,141,63,215,73,178,86,78,120,219,238,217,249,217,123,102,179,205,118,200,172,117,102,103,154,127,47,89,3,172,204,202,44,125,236,161,220,127,255,109,185,241,167,215,229,244,143,92,159,50,29,229,177,198,159,143,55,254,92,146,161,160,163,110,20,7,0,76,73,254,195,6,192,84,87,29,189,49,35,157,33,71,107,216,49,171,113,107,238,215,60,6,244,91,51,156,104,78,63,89,218,184,181,134,26,213,112,163,181,14,135,128,3,128,41,109,102,191,59,0,0,19,108,101,229,231,21,41,129,197,138,148,139,191,101,149,251,155,109,51,98,57,117,214,76,173,231,238,178,12,5,29,213,17,27,213,96,67,184,1,192,148,38,224,0,96,144,52,47,242,154,23,136,213,145,25,173,247,13,213,232,128,53,71,243,28,173,134,28,205,160,163,110,212,6,0,12,4,1,7,0,131,160,219,40,142,229,53,237,203,51,52,122,195,8,14,214,68,173,1,71,243,54,210,202,41,130,14,0,166,60,1,7,0,131,162,121,129,183,34,37,184,88,209,210,94,29,217,209,58,122,195,8,14,214,36,173,231,106,93,208,209,26,110,24,197,1,192,64,17,112,0,48,104,154,23,126,173,219,173,23,141,194,13,214,116,221,66,142,21,149,118,193,6,0,3,69,192,1,192,32,89,153,18,90,180,134,28,211,90,238,107,6,27,2,14,214,100,173,1,199,112,127,38,66,14,0,6,136,255,184,1,48,136,166,181,252,89,93,70,182,122,31,172,105,90,167,157,84,167,162,84,239,3,128,129,225,63,110,0,12,178,214,16,163,26,118,180,238,3,107,138,106,193,220,186,80,67,176,1,192,64,242,159,54,0,6,221,180,17,254,132,53,81,117,148,134,81,27,0,12,60,255,121,3,128,194,168,13,38,155,234,104,14,0,24,104,51,250,221,1,0,0,86,137,80,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,56,211,250,221,1,128,9,182,79,146,175,180,108,159,150,228,99,171,112,156,175,38,217,171,241,243,215,147,188,99,140,253,154,236,78,74,242,183,141,159,31,74,178,199,40,31,255,130,36,159,172,108,223,58,14,253,154,76,118,78,242,194,148,243,106,251,36,235,36,185,39,201,47,146,92,158,228,162,36,143,79,208,115,111,145,242,187,113,64,227,185,183,73,50,51,201,189,73,110,73,114,109,163,15,119,77,208,243,179,122,189,55,201,49,141,159,47,79,242,218,62,246,5,0,38,204,204,126,119,0,96,53,59,49,201,133,73,126,217,239,142,48,176,54,77,9,200,94,94,115,223,236,148,224,227,200,36,191,78,242,15,141,63,199,203,6,73,142,78,242,166,36,235,214,220,191,121,146,93,146,188,44,201,178,36,95,72,242,223,73,30,25,199,62,176,122,109,156,228,240,150,237,231,36,121,114,146,155,251,211,29,0,152,56,211,251,221,1,128,62,56,37,201,90,253,238,4,3,105,179,36,103,164,62,220,168,218,41,201,23,147,236,56,78,207,253,196,148,192,226,109,169,15,55,170,102,38,121,125,146,207,55,30,59,136,54,73,25,209,210,188,205,237,111,119,86,201,65,73,214,175,180,189,160,31,29,97,181,248,106,134,206,215,147,250,220,23,128,213,78,192,1,12,162,61,147,188,170,223,157,96,32,189,53,201,110,45,219,151,37,57,46,201,193,41,83,70,14,79,185,64,105,218,52,37,144,27,235,148,210,205,147,124,54,201,238,45,109,87,39,121,115,202,69,251,46,73,158,145,100,255,36,199,38,249,65,203,126,187,39,249,183,36,235,141,177,15,244,199,225,53,109,127,17,163,120,1,152,130,252,227,6,12,170,127,72,114,73,146,219,251,221,17,6,198,54,41,83,79,154,62,147,228,195,73,86,180,180,45,72,153,62,245,72,74,240,145,148,111,224,119,74,114,227,42,62,239,180,148,41,49,59,181,180,125,52,37,240,88,90,217,247,177,36,243,83,126,55,78,72,9,100,146,100,191,148,26,14,159,94,197,62,208,31,219,167,125,212,201,130,148,176,107,187,148,160,247,234,126,116,10,0,38,138,17,28,192,160,90,55,201,59,147,204,232,119,71,24,24,187,86,182,63,149,246,112,163,105,101,74,248,209,234,89,99,120,222,131,211,254,45,254,233,41,5,94,171,225,70,181,15,159,76,114,65,75,219,9,41,23,199,76,30,173,83,81,190,155,228,236,150,237,195,86,115,95,0,96,194,9,56,128,65,211,90,92,244,249,73,254,188,95,29,97,32,93,212,184,125,51,201,3,195,236,183,32,201,13,45,219,99,169,129,241,234,150,159,111,75,251,234,53,195,89,158,18,194,52,109,152,228,192,49,244,131,213,107,70,146,87,180,108,127,55,229,220,107,58,60,165,168,45,0,76,25,166,168,0,131,230,63,147,188,61,101,21,129,164,140,226,184,42,101,88,254,120,91,47,201,243,146,252,105,74,29,131,77,82,150,221,188,61,101,169,198,31,13,243,188,159,74,9,96,146,50,45,224,195,35,60,215,215,50,180,84,235,33,25,126,133,132,61,211,254,77,238,254,195,244,99,77,177,81,202,123,121,64,74,173,136,173,82,166,113,220,157,228,39,73,46,78,114,93,202,200,131,94,61,49,229,189,58,176,113,204,89,41,159,207,175,147,92,145,242,249,44,30,230,241,251,39,57,179,101,123,231,148,17,25,135,37,121,113,202,148,144,63,73,153,14,117,78,146,111,55,110,189,106,93,34,118,85,71,26,61,61,237,161,196,103,147,44,26,197,227,127,145,228,183,73,158,218,216,62,40,37,156,105,117,66,146,147,27,63,95,144,228,111,82,206,245,151,167,156,195,79,77,89,201,227,208,36,191,235,242,60,99,253,44,170,158,156,114,190,236,145,228,73,41,203,226,222,159,242,123,113,109,163,159,221,166,167,125,62,229,117,214,249,92,101,123,110,134,95,74,119,188,95,215,104,236,158,161,191,231,30,111,60,223,35,41,239,193,147,83,70,177,205,77,114,238,24,142,255,156,148,191,79,230,164,212,139,185,39,37,68,190,34,165,142,203,99,163,56,222,118,141,254,236,159,100,235,198,237,15,141,254,94,149,228,59,41,193,95,175,54,78,249,28,15,74,242,148,36,219,166,132,138,119,166,76,205,185,44,189,77,251,250,199,148,186,52,73,89,129,235,141,35,236,191,85,202,223,239,77,175,78,114,101,101,159,214,191,59,230,55,182,147,114,190,188,32,229,125,216,49,37,84,188,35,229,245,127,59,201,77,53,207,119,124,202,191,105,117,254,54,67,203,121,39,101,21,177,239,141,208,127,128,73,77,192,1,12,154,133,73,222,159,228,127,26,219,155,167,84,154,127,199,56,63,207,65,73,78,77,249,79,123,171,157,26,183,23,37,121,56,201,191,36,249,122,205,227,47,205,80,192,241,220,12,31,112,108,157,161,112,35,73,246,205,240,1,71,235,116,135,107,178,230,135,27,7,167,124,102,91,86,218,55,76,9,16,246,74,185,232,248,65,146,119,103,228,215,51,35,165,158,196,201,233,92,93,98,211,148,247,231,47,83,46,236,79,73,9,80,122,177,105,146,15,164,124,94,173,70,19,186,180,246,241,255,181,119,239,209,187,213,117,157,192,223,7,78,194,129,8,48,5,37,136,40,4,113,4,111,20,166,34,138,247,91,138,165,150,69,97,218,56,74,222,90,212,96,183,201,52,151,90,147,233,200,56,19,185,198,188,86,163,130,41,137,65,41,137,145,148,202,168,160,232,4,2,142,92,134,133,24,14,23,61,114,230,143,207,179,215,243,221,251,247,92,127,151,115,14,158,215,107,173,223,58,123,63,207,254,237,223,115,217,207,62,207,231,179,63,223,207,247,190,205,250,50,129,93,107,56,180,229,130,37,127,255,206,84,176,218,37,56,30,60,103,251,61,83,193,243,91,83,137,133,214,164,215,97,189,223,139,125,83,159,231,147,39,220,183,119,42,200,61,49,21,16,158,145,26,174,179,76,16,190,168,141,58,198,150,241,164,102,249,156,36,55,143,150,207,78,114,218,104,249,25,89,62,193,113,96,234,124,249,83,19,238,219,55,117,126,123,118,42,48,255,143,169,132,210,44,123,166,130,244,83,179,242,123,233,62,169,227,232,241,163,199,252,218,84,114,118,222,103,234,201,163,191,125,240,132,199,119,88,234,252,252,27,73,222,155,228,143,51,187,154,106,163,117,85,52,79,75,157,191,238,62,184,255,238,169,100,210,139,147,188,46,53,124,109,53,231,20,128,93,210,73,11,247,0,0,29,137,73,68,65,84,130,4,7,176,43,186,48,245,197,182,155,73,229,89,169,242,237,101,131,191,105,158,155,10,200,91,183,164,130,212,131,146,236,49,186,109,223,212,23,214,61,146,188,107,176,125,27,240,28,145,250,162,62,237,74,241,143,15,214,31,51,97,127,173,227,154,229,143,205,216,110,103,240,148,84,213,77,235,182,36,215,165,130,159,182,39,196,99,83,87,146,159,151,186,242,59,201,221,146,188,42,21,128,181,110,28,237,247,144,230,182,35,82,21,15,207,75,242,217,5,30,235,31,100,253,166,17,253,201,244,3,227,255,181,202,253,180,9,142,43,83,87,216,151,245,166,212,212,182,157,77,153,30,96,221,43,245,126,13,147,27,147,172,247,123,177,127,42,177,50,252,60,92,151,250,236,220,43,253,128,247,212,212,231,241,55,210,239,133,242,79,73,174,30,45,239,145,58,63,116,254,62,253,215,240,182,9,143,99,35,143,177,69,237,147,254,84,196,31,109,150,63,150,113,130,227,145,169,247,234,138,5,247,123,96,42,192,190,223,224,246,155,82,231,184,31,202,248,187,229,161,169,25,129,94,144,233,231,153,187,165,146,130,195,153,94,186,243,229,1,25,127,14,246,78,125,198,14,74,37,37,38,217,52,250,123,147,18,214,87,167,166,105,110,63,87,63,151,170,172,121,81,234,56,217,17,246,72,242,75,169,228,70,235,142,140,255,175,232,156,158,122,93,218,42,170,43,211,63,223,63,62,245,186,37,85,77,211,158,59,118,246,100,54,192,154,73,112,0,187,170,63,73,93,201,237,122,27,252,78,42,192,248,183,53,238,183,171,54,232,156,147,26,110,242,165,84,79,131,221,83,95,168,95,150,241,149,254,223,73,242,169,244,203,247,191,146,42,165,238,130,161,163,51,61,193,241,232,193,250,35,147,220,51,147,131,252,45,169,97,30,157,121,87,87,119,164,123,167,2,154,206,101,169,215,246,146,36,223,30,221,246,195,169,224,240,23,71,235,71,165,174,220,158,150,201,126,53,253,192,243,140,84,5,205,53,163,245,189,82,9,160,211,83,149,8,251,140,30,195,207,100,254,80,130,46,185,241,233,84,57,253,245,169,0,238,203,115,126,111,232,7,50,30,242,145,212,123,244,185,37,247,209,249,177,102,249,146,85,238,227,150,209,207,34,142,104,150,207,73,149,214,127,35,21,84,126,99,176,237,122,190,23,155,82,1,98,151,220,216,154,10,130,207,74,114,67,179,205,143,37,121,121,198,213,13,39,165,134,171,180,205,84,219,190,35,251,167,159,224,120,87,230,39,66,55,242,24,91,212,241,163,253,38,245,222,93,212,220,119,121,42,240,61,122,180,254,216,44,54,59,206,238,169,100,68,155,220,232,94,227,46,233,179,87,106,184,197,111,102,92,189,246,166,84,117,194,85,19,246,121,74,250,201,141,179,82,9,148,175,100,124,190,60,38,201,75,51,30,54,116,106,234,92,48,105,168,197,19,211,79,110,92,146,228,141,169,225,107,183,167,142,129,31,73,189,214,221,80,147,99,82,179,10,61,63,227,243,202,246,214,37,55,222,147,74,190,95,153,122,188,7,166,94,187,211,50,254,206,254,178,84,66,190,171,60,58,111,244,211,57,50,227,4,199,5,169,231,15,176,203,208,100,20,216,85,221,152,42,119,238,28,150,249,99,171,231,217,47,117,229,182,243,103,169,114,249,75,83,95,214,51,250,247,115,73,94,146,113,192,185,57,201,11,7,251,250,110,250,95,90,31,146,201,126,32,227,161,44,173,99,167,108,127,223,84,146,35,169,146,245,75,167,108,183,51,120,124,198,65,218,29,169,192,244,226,244,131,144,171,147,252,126,170,111,66,231,164,172,28,26,148,84,153,247,169,205,250,75,83,1,218,53,205,109,183,166,174,54,191,40,227,30,24,71,102,114,57,254,36,191,149,26,122,240,246,84,16,242,193,84,191,133,69,237,145,58,46,187,202,139,173,163,245,213,150,164,183,21,46,219,171,12,255,134,84,128,255,210,84,176,118,110,146,247,167,122,96,116,214,251,189,56,106,112,251,43,82,137,138,27,154,219,182,165,134,110,157,150,126,181,196,176,122,96,45,182,199,49,182,136,167,55,203,103,165,223,119,101,91,250,21,0,207,206,98,61,94,158,144,74,224,118,186,97,62,109,69,203,173,169,161,98,39,103,252,156,247,78,13,65,25,58,52,245,153,238,252,69,170,154,166,75,6,103,244,239,103,83,175,213,249,205,182,167,165,146,135,173,123,164,134,5,118,46,74,37,62,47,204,56,25,176,45,149,60,248,195,244,251,86,60,44,201,207,79,120,140,219,211,175,167,146,221,151,165,42,125,182,165,170,74,206,76,63,209,123,72,42,73,14,192,4,18,28,192,174,236,111,210,47,221,126,97,42,64,89,173,103,166,202,167,147,186,74,250,198,140,191,168,15,221,154,42,167,239,156,148,149,51,101,124,170,89,126,84,234,234,227,208,131,51,46,99,62,187,185,125,218,108,23,71,55,203,127,155,29,119,197,114,17,109,53,192,69,73,254,117,202,118,219,210,31,66,145,84,192,59,212,38,176,222,157,170,48,152,230,138,244,147,38,207,201,228,215,191,245,150,84,144,182,218,100,196,230,84,130,172,237,157,240,187,89,125,245,70,82,85,48,157,101,154,139,174,197,233,153,223,83,98,189,223,139,123,102,60,67,205,249,233,127,174,135,110,79,191,239,205,137,89,191,233,162,55,250,24,91,196,33,233,39,61,207,159,176,77,91,133,114,88,166,39,68,59,155,82,195,40,58,31,74,242,190,25,219,255,159,84,18,161,243,244,84,50,182,245,204,140,207,93,215,165,18,121,147,166,77,78,234,61,107,131,252,195,146,60,112,176,205,51,50,78,232,109,77,245,54,153,117,204,191,47,253,68,207,191,79,242,253,51,182,223,72,111,73,53,34,158,230,175,7,235,247,217,192,199,2,112,151,38,193,1,236,202,238,76,245,192,104,191,4,255,118,170,233,221,178,54,165,2,148,206,59,51,191,121,225,5,233,151,254,31,61,184,191,13,18,15,75,13,199,24,122,68,179,124,70,198,87,77,159,152,201,207,163,237,79,48,236,236,191,179,217,218,44,239,59,103,219,235,83,1,216,41,163,159,97,101,202,48,232,251,203,204,215,6,167,199,100,101,147,211,161,69,246,57,205,166,84,98,160,29,14,113,102,106,118,156,181,216,210,44,79,11,30,215,211,229,169,6,185,179,108,196,123,113,65,146,95,25,253,188,48,211,19,139,157,182,223,194,230,140,43,133,214,98,123,28,99,139,104,31,195,13,169,225,25,67,95,77,245,26,233,60,105,194,54,173,251,164,159,4,121,239,2,143,163,77,162,108,73,13,13,233,236,158,254,48,158,63,207,252,4,220,213,233,31,91,109,2,116,183,84,83,215,206,187,51,125,150,156,214,219,154,229,3,210,63,159,110,79,239,153,115,255,205,233,207,160,50,108,68,10,192,136,4,7,176,171,187,58,253,43,141,15,204,228,25,24,230,57,52,227,41,25,147,228,51,11,252,206,119,210,15,50,142,28,220,255,141,212,84,134,157,225,140,24,155,51,14,76,46,73,93,17,238,2,166,125,147,60,96,176,253,30,233,87,118,172,103,83,195,141,240,133,102,249,65,73,126,54,179,175,112,95,152,122,189,62,145,254,144,128,164,255,90,220,148,42,131,159,231,202,244,147,44,243,26,103,174,165,26,230,228,84,47,145,206,159,167,142,203,187,218,108,9,183,102,254,99,222,30,239,197,60,195,100,207,122,244,36,219,25,158,215,110,233,39,201,206,74,127,186,225,214,135,154,229,103,102,118,18,177,29,18,113,71,22,107,122,251,173,84,210,161,75,58,94,219,220,119,88,198,125,34,146,197,123,1,253,97,179,191,246,220,121,104,250,205,91,219,158,42,179,124,41,213,143,164,51,109,40,224,70,155,151,144,75,250,61,108,134,51,243,0,48,162,201,40,64,13,43,120,114,146,159,24,173,191,34,53,70,126,214,84,171,67,195,234,138,215,167,31,184,76,211,246,138,152,116,85,238,130,140,147,18,199,166,31,148,220,63,227,43,190,93,73,254,39,50,46,147,127,120,250,195,92,142,200,248,74,245,231,51,189,105,233,206,226,220,36,191,156,241,149,218,63,72,149,161,159,157,170,110,185,34,139,5,6,73,191,217,230,30,89,188,218,162,253,127,114,191,169,91,173,205,253,82,189,59,58,255,51,245,92,23,125,110,179,108,205,248,57,236,44,23,53,54,250,189,216,148,170,56,120,68,42,48,63,50,53,132,229,30,51,126,103,61,236,12,199,216,3,210,79,148,254,221,140,109,219,10,139,189,83,77,60,63,52,101,219,195,154,229,207,100,241,169,117,47,154,114,251,240,124,185,232,44,46,151,77,185,253,71,6,235,139,54,246,221,150,58,71,118,213,115,247,95,240,247,118,132,54,113,184,179,124,150,1,118,58,18,28,0,85,73,241,234,140,191,220,239,145,10,56,95,144,197,131,204,253,7,235,195,225,38,139,152,84,38,223,150,151,159,152,106,168,217,61,166,135,54,247,117,87,51,47,73,149,51,239,151,106,10,248,198,140,191,24,183,143,105,210,184,252,157,205,45,169,33,7,111,200,120,106,219,31,207,120,152,205,13,169,158,11,159,72,5,82,223,156,177,175,31,108,150,247,206,234,122,173,236,181,138,223,89,196,11,50,254,255,248,235,89,191,228,70,82,189,16,186,36,218,70,61,254,101,109,228,123,113,120,106,6,154,199,175,98,159,107,181,51,28,99,79,108,150,175,206,236,153,115,174,77,157,7,186,33,45,39,101,122,130,163,61,191,77,155,130,121,25,195,126,28,223,90,227,254,218,234,147,173,89,57,99,207,44,237,112,165,131,166,110,5,192,93,130,12,48,64,185,44,201,155,155,245,71,102,185,217,21,246,152,191,201,92,147,206,201,95,204,120,38,136,131,210,191,146,250,132,209,191,215,101,220,115,226,246,84,243,212,164,130,189,182,25,93,59,134,126,103,158,30,182,245,181,212,240,141,83,179,178,103,200,1,169,97,43,103,164,174,70,255,90,166,143,77,223,50,229,246,101,172,87,35,202,214,150,244,131,210,119,103,241,41,89,23,209,6,111,27,93,193,176,168,141,122,47,126,34,85,53,209,38,55,62,157,234,179,240,186,84,3,215,238,231,157,235,240,24,134,118,244,49,182,87,106,250,211,206,7,50,63,81,246,55,205,242,9,89,89,9,209,105,159,219,122,76,101,219,158,47,111,206,218,19,122,109,191,161,155,178,220,208,174,219,154,229,131,215,248,56,0,216,193,84,112,0,140,157,153,74,26,116,37,222,175,76,242,201,244,199,142,79,51,28,142,114,191,76,31,251,190,140,173,169,233,98,187,41,12,143,78,13,157,57,52,227,158,28,231,164,31,32,92,144,228,185,163,229,135,166,202,181,191,47,21,192,36,213,204,175,29,119,190,26,235,221,27,98,86,3,204,239,166,134,171,156,155,26,103,255,144,84,41,254,9,25,87,39,236,147,74,130,252,116,106,74,201,225,204,35,223,105,150,63,154,228,197,107,127,200,235,226,192,244,131,189,69,122,27,44,227,170,140,171,95,86,59,67,208,247,141,126,58,107,13,112,55,226,189,184,71,170,90,169,27,226,241,143,73,94,147,126,99,198,214,241,89,93,175,157,89,118,244,49,118,124,250,67,92,94,158,254,52,172,139,120,92,86,206,72,148,244,147,0,235,145,200,105,207,141,223,159,74,238,174,165,9,110,59,100,230,238,169,97,74,139,158,163,218,228,200,176,119,15,0,119,49,42,56,0,198,110,77,13,85,233,236,151,228,180,44,54,117,227,191,13,214,215,179,203,125,59,142,189,27,158,113,92,115,219,133,131,237,255,57,227,132,203,137,163,127,239,147,113,240,243,119,89,123,144,218,150,148,239,151,229,175,60,15,167,99,92,244,241,92,147,234,193,241,170,36,143,73,85,63,188,37,227,231,123,175,84,69,199,112,200,208,205,205,242,164,217,104,118,148,97,179,192,101,74,235,23,209,14,81,56,52,171,187,66,253,235,169,132,216,231,83,201,182,181,78,101,186,17,239,197,83,50,238,71,243,181,36,47,201,244,228,198,70,217,209,199,216,211,214,97,31,207,206,228,207,114,123,92,254,224,132,251,151,213,158,47,55,103,237,211,179,182,195,211,54,103,185,94,38,237,244,220,215,175,241,113,0,176,131,73,112,0,244,93,148,228,93,205,250,51,82,129,244,60,55,12,214,239,183,110,143,168,63,35,203,163,83,1,200,163,71,235,183,101,229,108,40,223,204,184,233,232,241,169,161,28,109,243,188,97,66,100,53,110,26,172,31,48,113,171,233,238,61,88,31,38,136,22,177,45,201,87,82,87,238,95,214,220,126,80,198,137,157,78,91,133,115,84,250,65,205,142,116,89,170,137,106,247,179,200,204,27,203,24,86,178,44,59,13,230,166,193,239,252,75,214,94,189,179,17,239,197,35,155,229,115,210,79,54,108,47,59,242,24,59,40,243,167,122,93,196,143,38,121,240,132,219,175,108,150,31,148,228,110,107,252,59,87,15,214,15,157,184,213,226,174,26,172,31,49,113,171,201,218,169,179,39,85,182,181,213,113,107,77,238,1,176,193,36,56,0,86,122,83,250,189,11,126,59,243,175,90,94,158,126,239,132,167,174,227,227,185,62,227,158,25,7,164,122,13,116,1,252,121,153,220,179,225,99,205,242,177,233,247,223,88,100,10,219,121,134,51,204,44,51,252,97,83,198,195,101,146,106,18,58,156,149,225,152,84,179,200,238,103,207,204,118,110,250,51,44,220,103,112,255,112,232,199,48,1,178,163,108,75,5,80,221,207,122,251,82,250,211,105,62,47,203,245,139,57,58,253,89,57,62,190,14,143,105,35,222,139,182,50,101,145,30,38,27,241,253,103,71,30,99,143,29,172,63,34,53,171,203,34,63,247,79,114,99,243,187,79,158,176,255,47,54,203,123,167,63,109,236,52,187,165,250,26,253,183,209,79,155,244,189,114,240,55,23,61,127,188,168,217,223,211,155,219,191,154,254,240,146,71,103,49,135,15,254,246,164,115,99,91,173,54,172,12,3,96,39,35,193,1,176,210,77,169,153,44,58,135,164,174,108,206,114,71,146,247,53,235,63,149,234,21,49,207,158,169,169,80,231,5,240,109,194,226,229,25,247,80,186,96,194,182,73,63,168,125,76,198,9,133,47,167,130,129,181,250,98,250,229,220,139,60,135,206,241,233,39,92,38,77,101,185,37,213,195,160,251,153,247,250,39,53,99,200,52,151,165,159,0,249,15,89,44,88,57,56,213,215,227,174,122,229,118,91,146,119,52,235,135,103,241,222,19,155,82,179,216,116,110,201,244,227,109,25,27,241,94,180,9,178,251,206,217,207,238,73,126,97,129,191,151,172,172,86,153,117,28,236,168,99,108,211,232,247,59,31,201,98,125,131,58,183,165,166,38,238,252,116,86,206,114,114,121,250,149,98,207,89,96,191,255,46,53,116,232,113,163,159,182,170,230,187,233,79,163,123,74,230,159,63,246,74,29,187,221,254,218,190,32,119,166,26,244,118,126,33,139,13,199,58,165,89,190,49,149,108,29,106,19,49,15,200,252,153,110,30,58,231,254,141,214,246,50,185,171,158,183,0,86,77,130,3,96,178,143,164,63,195,192,34,222,147,126,179,209,215,102,246,151,236,189,82,211,190,254,86,146,183,38,185,231,140,109,219,89,79,218,228,192,167,166,108,127,109,198,179,142,60,35,227,25,52,206,203,250,52,8,253,78,170,247,69,231,65,73,254,83,230,127,249,63,38,201,235,155,245,175,37,249,235,9,219,125,46,253,192,226,151,51,187,207,199,193,233,15,165,184,98,112,255,214,36,255,125,176,253,171,51,59,168,58,56,201,127,73,77,83,251,202,172,189,44,127,150,141,252,255,248,188,212,176,141,206,43,51,191,194,104,83,146,231,167,127,53,255,205,89,57,52,105,53,54,226,189,104,171,39,158,154,228,129,83,246,179,215,232,111,13,171,43,166,29,91,195,202,162,89,149,92,59,234,24,59,58,253,33,104,211,166,122,157,229,111,155,229,189,211,31,242,147,212,57,227,127,52,235,207,202,236,99,104,223,212,243,233,156,151,154,2,185,245,129,140,155,141,30,154,234,245,50,45,32,223,61,201,43,50,30,246,115,83,250,189,137,146,228,172,140,207,25,91,82,231,214,89,13,81,159,146,228,231,154,245,51,51,185,250,167,29,54,182,57,149,188,158,230,1,73,126,115,198,253,219,67,59,220,111,214,255,41,0,223,147,36,56,0,38,219,150,10,196,151,153,178,243,138,244,155,148,30,158,228,189,169,47,196,237,21,209,45,169,0,235,29,25,95,121,61,40,179,19,15,151,166,223,72,47,73,46,206,236,43,181,231,77,184,237,226,25,219,47,235,3,233,95,241,124,118,146,191,74,77,175,123,72,42,88,219,148,154,225,228,65,73,78,79,93,41,238,250,117,108,77,242,187,89,249,188,146,186,58,251,71,205,250,73,169,178,244,19,210,79,162,236,147,10,194,223,150,113,48,115,115,250,21,47,157,143,36,249,96,179,254,164,36,111,79,93,113,109,3,203,253,155,231,210,205,84,115,64,54,102,8,201,230,84,181,208,23,70,143,101,35,2,146,59,71,127,163,77,250,188,41,21,84,31,151,122,190,187,165,102,74,57,32,21,220,190,57,253,0,245,31,82,9,188,245,178,222,239,197,57,131,245,51,82,137,189,31,74,53,156,60,60,117,12,157,149,201,213,7,195,102,175,157,219,211,31,158,241,139,169,132,194,94,169,164,225,48,128,222,17,199,216,19,154,229,111,102,117,61,118,186,38,178,157,167,79,216,230,220,244,43,120,222,144,228,5,233,247,26,217,51,117,252,188,35,227,70,200,195,207,114,231,171,169,228,78,231,148,212,249,243,240,140,19,29,187,167,42,65,222,152,74,114,118,94,147,149,231,230,27,147,252,94,179,126,66,38,191,246,7,39,121,105,250,211,130,127,42,253,74,167,214,23,210,63,6,94,149,228,87,71,251,217,61,117,14,186,239,104,159,239,205,250,54,152,94,141,246,115,254,180,212,240,165,125,82,73,167,101,154,175,2,220,37,41,93,3,190,215,29,151,126,96,246,156,84,163,196,69,61,55,253,164,69,82,65,250,233,83,182,223,45,117,165,113,210,20,145,87,164,206,187,135,13,110,191,42,85,206,254,229,57,143,229,13,233,151,162,191,38,253,171,170,67,135,103,220,108,52,169,132,194,177,89,46,105,51,207,126,73,254,36,53,236,100,25,183,164,102,168,57,127,198,54,187,165,18,32,147,134,84,92,157,10,166,38,53,55,125,81,250,87,164,91,251,166,130,173,225,21,252,219,70,251,220,47,43,155,67,94,144,122,79,135,137,152,135,37,121,103,179,126,92,250,85,39,139,24,238,227,245,73,254,116,201,125,44,234,224,84,165,208,178,13,112,47,78,5,111,255,119,202,253,47,78,245,73,73,106,24,195,207,44,184,223,245,124,47,146,58,86,126,105,193,191,125,126,250,125,43,158,155,233,213,80,167,38,249,181,41,247,61,37,43,27,195,174,247,243,154,101,75,170,47,74,87,161,245,182,84,229,216,106,156,156,126,130,224,196,172,108,222,121,224,232,111,28,53,184,253,235,169,94,21,135,164,159,244,185,35,117,110,251,135,41,127,243,110,73,94,151,149,9,149,155,82,199,219,129,89,25,148,255,113,146,255,154,201,9,225,174,242,232,149,131,219,183,166,18,42,251,101,252,90,117,62,151,58,103,92,151,233,30,149,122,222,139,184,38,245,58,116,78,206,184,154,174,179,154,115,199,187,146,252,228,104,249,79,211,175,132,107,61,60,211,147,53,93,146,25,224,123,150,10,14,128,217,254,42,253,126,22,243,220,153,228,63,167,2,190,97,73,246,143,102,101,114,227,227,169,50,233,121,201,141,36,249,228,96,125,90,64,214,249,215,244,123,2,252,125,214,55,185,145,84,181,196,175,164,174,106,14,103,146,153,230,131,169,43,139,179,146,27,73,189,150,175,78,5,108,119,12,238,251,225,172,76,110,92,153,10,112,167,37,55,146,10,32,95,146,186,114,220,238,115,75,170,153,230,48,240,60,51,21,252,44,27,120,46,106,24,164,173,199,240,161,105,190,150,10,182,222,186,224,246,183,165,42,33,158,159,233,201,141,181,88,239,247,226,117,163,109,102,185,41,149,88,27,38,40,143,158,241,59,239,206,202,217,104,58,147,190,71,109,207,99,236,225,233,7,236,231,174,98,31,157,225,231,241,113,19,182,185,62,245,121,255,240,224,246,131,82,51,151,180,201,141,207,167,146,93,211,146,27,73,242,237,212,144,142,118,170,231,164,170,32,142,76,63,185,113,99,234,117,61,35,211,63,39,219,146,252,89,170,194,162,109,58,186,57,149,240,29,38,55,254,34,85,133,50,43,185,145,212,121,250,180,172,60,15,13,253,99,22,79,178,109,148,139,82,207,107,146,101,167,243,6,184,203,217,60,127,19,128,93,218,214,84,165,196,217,89,238,156,121,118,170,121,230,163,82,87,235,142,74,93,213,187,51,117,85,244,146,212,48,138,139,210,111,10,55,203,167,155,229,171,82,141,255,102,217,150,42,153,239,174,216,207,10,52,214,226,59,169,43,134,239,79,149,167,63,36,85,118,127,239,84,105,244,215,83,179,174,252,75,170,124,126,216,31,99,150,239,166,174,156,126,56,117,197,253,216,84,57,248,129,163,191,123,109,170,255,194,69,169,231,119,235,2,251,188,61,85,117,242,190,140,223,159,195,82,195,25,190,149,74,54,125,58,53,196,103,189,167,109,29,186,56,245,252,158,154,154,193,225,253,27,252,247,110,78,85,23,252,101,42,56,126,88,170,255,193,33,73,254,95,42,128,189,124,244,88,46,76,191,145,236,70,88,207,247,226,219,169,36,199,135,83,67,67,142,27,237,235,150,212,49,247,177,84,2,160,75,214,188,54,227,161,99,223,202,116,55,167,134,166,252,108,106,56,200,17,73,190,145,26,182,48,109,122,227,237,117,140,181,125,48,254,119,86,206,228,178,140,107,83,125,135,186,190,43,207,74,85,136,13,135,205,92,155,106,116,252,246,212,231,253,216,84,117,208,254,169,36,218,103,82,159,197,143,167,159,180,152,230,246,212,16,148,179,82,195,74,30,150,74,96,222,59,149,212,184,52,117,44,126,52,139,79,39,253,145,209,239,156,48,122,140,71,140,246,249,205,212,185,243,226,84,213,204,165,11,238,47,163,199,247,207,169,106,147,135,167,102,160,73,234,57,127,54,245,156,63,153,197,207,231,27,229,206,84,53,211,69,73,158,153,234,71,115,71,42,225,125,205,140,223,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,118,29,255,31,159,11,119,65,68,10,172,1,0,0,0,0,73,69,78,68,174,66,96,130]},{"layer_unique_id":53455,"duration_micros":5529,"top":-17.875,"left":-43.083335876464844,"width":1166.1666259765625,"height":311.20831298828125,"snapshot":[137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,4,56,0,0,8,106,8,6,0,0,0,106,246,175,7,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,32,0,73,68,65,84,120,156,236,221,119,148,94,85,221,54,224,59,97,200,64,26,53,244,64,0,9,93,64,169,161,41,93,58,82,44,40,130,34,138,32,88,95,21,20,81,94,253,64,4,65,80,20,164,8,226,11,42,216,16,68,233,130,10,22,80,169,9,37,130,209,144,6,164,32,129,73,230,251,227,24,153,204,156,243,76,205,76,78,184,174,181,158,149,176,247,57,251,108,146,227,146,231,158,189,127,123,80,110,121,176,53,0,0,0,0,53,54,120,160,39,0,0,0,0,208,91,2,14,0,0,0,160,246,4,28,0,0,0,64,237,9,56,0,0,0,128,218,19,112,0,0,0,0,181,39,224,0,0,0,0,106,79,192,1,0,0,0,212,158,128,3,0,0,0,168,61,1,7,0,0,0,80,123,2,14,0,0,0,160,246,4,28,0,0,0,64,237,9,56,0,0,0,128,218,19,112,0,0,0,0,181,39,224,0,0,0,0,106,79,192,1,0,0,0,212,158,128,3,0,0,0,168,61,1,7,0,0,0,80,123,2,14,0,0,0,160,246,4,28,0,0,0,64,237,9,56,0,0,0,128,218,19,112,0,0,0,0,181,39,224,0,0,0,0,106,79,192,1,0,0,0,212,158,128,3,0,0,0,168,61,1,7,0,0,0,80,123,2,14,0,0,0,160,246,4,28,0,0,0,64,237,9,56,0,0,0,128,218,19,112,0,0,0,0,181,39,224,0,0,0,0,106,79,192,1,0,0,0,212,158,128,3,0,0,0,168,61,1,7,0,0,0,80,123,2,14,0,0,0,160,246,4,28,0,0,0,64,237,9,56,0,0,0,128,218,19,112,0,0,0,0,181,39,224,0,0,0,0,106,79,192,1,0,0,0,212,158,128,3,0,0,0,168,61,1,7,0,0,0,80,123,2,14,0,0,0,160,246,4,28,0,0,0,64,237,9,56,0,0,0,128,218,19,112,0,0,0,0,181,39,224,0,0,0,0,106,79,192,1,0,0,0,212,158,128,3,0,0,0,168,61,1,7,0,0,0,80,123,2,14,0,0,0,160,246,4,28,0,0,0,64,237,9,56,0,0,0,128,218,19,112,0,0,0,0,181,39,224,0,0,0,0,106,79,192,1,0,0,0,212,158,128,3,0,0,0,168,61,1,7,0,0,0,80,123,2,14,0,0,0,160,246,4,28,0,0,0,64,237,9,56,0,0,0,128,218,19,112,0,0,0,0,181,39,224,0,0,0,0,106,79,192,1,0,0,0,212,158,128,3,0,0,0,168,61,1,7,0,0,0,80,123,2,14,0,0,0,160,246,4,28,0,0,0,64,237,9,56,0,0,0,128,218,19,112,0,0,0,0,181,39,224,0,0,0,0,106,79,192,1,0,0,0,212,158,128,3,0,0,0,168,61,1,7,0,0,0,80,123,2,14,0,0,0,160,246,4,28,0,0,0,64,237,9,56,0,0,0,128,218,19,112,0,0,0,0,181,39,224,0,0,0,0,106,79,192,1,0,0,0,212,158,128,3,0,0,0,168,61,1,7,0,0,0,80,123,2,14,0,0,0,160,246,4,28,0,0,0,64,237,9,56,0,0,0,128,218,19,112,0,0,0,0,181,39,224,0,0,0,0,106,79,192,1,0,0,0,212,158,128,3,0,0,0,168,61,1,7,0,0,0,80,123,2,14,0,0,0,160,246,154,6,122,2,116,226,249,25,201,248,135,146,217,179,146,213,215,76,54,218,60,25,36,151,2,0,0,128,182,234,29,112,180,188,146,236,179,85,215,175,111,106,74,70,174,144,172,176,82,178,246,186,201,218,235,37,27,110,150,108,188,69,50,98,228,162,155,103,79,253,241,183,201,89,159,73,158,155,254,106,219,184,221,146,79,125,57,25,54,124,224,230,53,80,46,59,63,249,254,37,229,125,67,135,37,151,254,52,25,181,90,207,198,110,109,77,62,123,66,114,239,93,229,253,27,191,62,57,247,138,100,233,33,61,27,31,0,0,128,69,106,80,110,121,176,117,160,39,209,99,221,13,56,170,52,47,147,236,121,96,178,239,161,201,216,77,123,63,94,95,152,249,124,114,236,33,201,140,169,29,251,142,60,46,57,230,164,254,159,211,64,155,53,51,57,254,240,100,242,164,242,254,3,142,72,78,62,173,103,99,255,246,182,228,180,6,127,166,231,94,145,188,126,235,158,141,13,0,0,192,34,103,175,67,146,204,125,41,185,225,7,201,135,222,150,156,249,233,234,47,208,253,233,169,9,229,225,70,146,220,115,123,255,206,101,113,49,98,100,242,190,143,84,247,255,252,7,201,99,15,118,127,220,185,47,37,151,93,80,221,191,239,97,194,13,0,0,128,197,156,128,163,189,91,110,40,86,9,220,125,203,64,207,164,218,82,175,225,191,182,93,247,78,182,222,177,186,255,242,175,39,173,243,187,55,230,77,215,37,19,39,148,247,141,24,153,188,251,131,221,27,15,0,0,128,126,247,26,254,166,220,192,172,153,201,233,31,73,174,187,114,224,230,176,222,134,201,42,171,151,247,237,188,103,255,206,101,113,50,120,112,242,254,143,85,247,255,241,183,201,61,183,117,125,188,25,83,147,43,47,170,238,63,250,195,61,175,235,1,0,0,64,191,169,119,145,209,206,156,114,214,194,255,60,191,53,153,61,179,56,153,228,241,71,146,223,223,217,248,254,139,190,146,44,213,148,28,252,206,69,55,199,42,35,70,22,243,63,251,179,201,164,167,95,109,223,235,160,228,208,163,250,127,62,139,147,245,55,76,222,126,108,114,205,119,202,251,47,251,122,242,198,113,201,178,67,59,31,235,218,203,139,122,39,101,198,110,154,188,229,173,61,159,39,0,0,0,253,102,201,45,50,186,223,225,201,71,63,223,248,254,231,166,39,119,223,154,92,113,65,242,194,115,213,215,157,121,113,178,245,184,158,207,179,55,94,156,147,252,253,137,100,206,236,100,213,53,146,209,99,6,102,30,139,155,153,207,39,31,56,52,153,250,108,121,255,241,159,74,14,125,119,227,49,158,28,159,28,215,32,192,248,234,101,201,150,219,246,124,142,0,0,0,244,155,215,246,22,149,21,86,42,78,222,184,228,250,100,220,155,171,175,59,239,11,141,3,144,69,105,232,176,226,136,210,173,199,9,55,218,26,185,124,227,173,42,87,126,35,153,54,165,186,191,181,53,185,226,194,234,254,189,15,22,110,0,0,0,212,200,107,59,224,88,96,197,81,201,103,206,74,118,220,189,188,127,242,164,228,135,87,244,239,156,232,220,174,251,36,111,220,161,188,111,206,236,228,218,75,171,239,189,239,55,197,209,176,101,134,13,79,222,115,66,239,231,7,0,0,64,191,17,112,44,176,236,208,98,75,203,168,85,203,251,127,244,221,197,227,248,88,94,181,212,82,141,87,113,252,248,234,162,214,74,123,115,231,22,117,58,170,28,253,225,234,2,175,0,0,0,44,150,4,28,109,45,191,98,242,193,255,41,239,107,105,73,110,253,69,223,60,167,181,181,168,255,240,251,59,147,95,255,44,249,237,237,75,110,120,50,99,106,242,215,63,38,183,223,148,252,242,199,201,173,55,36,247,222,149,60,53,161,168,161,210,91,175,219,56,57,226,152,234,254,43,46,44,254,188,219,250,213,79,147,39,30,173,30,111,223,195,122,63,47,0,0,0,250,213,146,125,138,74,79,236,184,91,178,198,232,228,159,207,116,236,187,225,218,228,109,239,77,154,42,254,216,46,59,63,249,254,37,29,219,143,255,159,87,79,62,249,237,109,201,255,93,154,60,242,151,133,175,57,224,136,228,228,211,22,110,219,111,235,100,238,75,29,199,59,249,180,226,250,5,94,121,57,121,207,126,201,148,127,117,188,118,223,67,147,143,125,161,124,190,101,90,94,73,222,185,87,17,76,180,119,232,187,139,226,157,157,153,59,55,185,253,198,228,230,159,36,127,251,83,245,117,35,70,38,123,30,152,188,229,208,100,221,13,186,62,199,246,222,246,222,228,182,95,148,215,220,248,253,157,201,239,238,120,181,198,202,243,51,138,162,178,85,222,255,177,164,185,185,231,115,1,0,0,96,64,88,193,209,94,211,210,69,40,80,102,234,179,201,132,135,187,63,230,139,115,146,249,243,139,0,228,180,147,58,134,27,73,50,168,23,127,21,75,15,73,246,60,160,188,239,55,191,46,2,135,174,154,240,112,121,184,145,36,227,118,235,252,254,223,221,145,156,248,246,228,171,159,107,28,110,36,201,172,153,201,245,223,75,222,127,72,114,241,57,201,172,23,186,62,207,182,150,91,33,121,223,71,171,251,47,255,250,171,65,209,15,175,168,46,24,187,199,254,213,53,61,0,0,0,88,172,9,56,202,108,181,125,117,223,99,127,235,254,120,255,158,83,212,131,40,91,221,177,192,224,94,254,85,236,80,113,10,204,172,153,201,163,127,237,250,56,15,220,87,222,62,106,213,100,147,45,170,239,155,63,63,249,238,55,146,207,157,88,108,63,233,174,31,92,158,156,250,161,100,122,131,147,79,26,217,109,223,100,171,237,202,251,158,154,144,220,116,125,113,220,238,181,151,149,95,51,116,88,81,123,3,0,0,128,90,18,112,148,25,189,110,117,223,99,15,117,127,188,155,174,79,46,58,171,241,53,131,6,117,127,220,182,198,110,154,172,179,126,121,223,159,127,215,245,113,126,115,75,121,251,94,7,21,43,69,202,180,206,79,46,248,82,114,213,69,93,127,78,153,135,255,146,156,242,161,34,148,233,174,206,10,142,94,249,205,228,162,175,84,247,31,245,161,100,181,53,187,255,92,0,0,0,22,11,2,142,50,67,135,85,175,86,120,114,124,247,199,235,202,23,246,222,174,224,24,60,184,168,103,81,230,174,95,21,33,68,103,38,61,157,140,175,8,112,182,223,181,250,190,95,252,40,249,249,181,213,253,67,154,139,85,49,123,30,152,108,187,115,227,19,74,158,120,52,185,242,27,157,207,181,204,216,77,147,195,222,83,222,55,243,249,228,143,247,148,247,173,187,65,114,192,219,122,246,76,0,0,0,22,11,138,140,86,89,109,205,98,69,65,123,127,127,60,153,55,175,88,49,208,27,155,109,149,172,188,106,81,176,116,214,204,100,216,136,222,141,151,36,219,239,146,124,231,107,29,219,159,153,152,60,245,120,178,222,216,198,247,87,213,204,24,61,38,25,187,89,121,223,147,227,147,111,86,172,78,105,106,74,142,57,41,217,231,144,162,78,198,2,243,230,37,247,223,155,92,118,94,50,190,164,166,201,143,175,78,118,221,59,217,236,13,141,231,91,230,237,239,75,110,187,177,186,142,72,153,15,124,34,105,94,166,251,207,2,0,0,96,177,33,224,168,82,21,56,180,180,36,47,253,59,25,54,188,251,99,174,188,74,177,21,98,167,61,146,145,203,247,110,126,101,214,121,93,178,241,22,229,69,76,255,250,135,206,3,142,251,126,83,222,190,231,65,213,129,206,53,223,73,94,174,40,98,122,198,133,201,54,59,117,108,95,106,169,100,235,113,201,6,27,23,53,59,202,130,164,155,174,239,89,192,177,252,138,201,177,31,73,190,114,106,215,174,223,109,223,100,235,29,187,255,28,0,0,0,22,43,182,168,84,105,180,162,162,234,11,125,35,99,54,72,206,187,42,217,247,176,69,19,110,36,69,29,143,221,247,43,239,187,231,182,198,247,206,154,89,28,97,91,102,187,93,202,219,39,78,40,86,75,148,57,246,163,229,225,70,91,203,173,144,156,240,153,242,190,91,111,40,63,246,181,43,118,223,63,217,98,155,206,175,107,94,70,97,81,0,0,128,37,132,128,163,74,83,131,197,45,243,231,117,127,188,79,158,209,63,69,44,171,194,136,251,239,109,28,24,60,252,64,177,58,165,189,177,155,84,175,252,168,10,55,86,28,149,236,127,68,227,121,46,176,225,102,229,71,179,182,180,36,143,246,224,196,154,164,88,33,242,222,147,59,191,238,157,199,37,107,140,238,217,51,0,0,0,88,172,8,56,250,203,134,21,53,44,250,218,234,107,85,111,185,168,170,177,145,84,159,180,178,251,1,213,39,188,220,91,177,165,101,143,253,147,225,221,168,41,178,109,69,40,243,248,35,93,31,163,189,137,93,56,170,118,194,195,73,107,107,207,159,1,0,0,192,98,67,192,81,165,209,42,141,193,189,44,48,186,168,189,249,45,229,237,247,221,85,222,62,111,94,113,210,74,153,237,118,46,111,159,58,185,56,241,164,204,27,199,53,158,95,123,171,86,156,170,50,161,164,0,105,87,76,159,146,92,122,126,231,215,221,125,75,242,187,59,122,246,12,0,0,0,22,43,138,140,86,153,251,82,117,223,144,230,254,155,71,79,84,213,190,184,231,182,228,223,47,38,203,14,93,184,253,241,71,146,169,207,118,188,126,139,109,146,181,198,148,143,245,244,83,213,207,191,244,188,234,192,164,204,148,127,149,183,79,239,198,73,40,109,125,239,219,197,177,176,93,113,201,57,201,150,219,36,67,123,80,52,22,0,0,128,197,134,128,163,74,213,23,228,166,166,100,153,101,187,55,214,235,54,238,253,124,186,99,197,149,139,99,86,239,188,121,225,246,23,231,20,39,150,180,175,121,241,192,125,229,227,84,21,44,77,146,217,51,171,251,198,63,84,124,122,107,198,180,238,223,243,224,159,147,159,95,219,245,235,159,153,88,28,75,123,228,7,186,255,44,0,0,0,22,27,182,168,84,249,199,211,229,237,235,172,95,125,100,106,149,229,87,236,253,124,186,107,151,189,202,219,203,106,109,220,115,107,249,181,141,142,79,109,20,112,244,149,25,83,147,214,249,93,191,254,149,151,147,139,207,233,254,115,174,190,184,8,58,0,0,0,168,45,1,71,153,127,191,152,76,168,88,129,176,238,6,253,59,151,158,122,195,14,197,49,168,237,221,121,115,81,115,99,129,201,147,138,85,29,237,237,240,166,100,149,138,218,24,73,50,103,118,239,231,216,21,221,169,1,250,203,159,148,255,187,36,201,250,27,37,135,189,167,188,239,229,185,197,182,26,5,71,1,0,0,106,75,192,81,102,226,227,229,71,166,38,201,216,126,58,13,165,183,70,140,76,118,219,183,99,251,228,73,201,147,143,189,250,207,85,39,171,236,186,79,39,15,168,56,89,101,160,76,159,146,92,254,245,234,254,247,157,156,188,227,216,226,8,219,50,10,142,2,0,0,212,154,26,28,101,170,142,76,77,146,141,54,239,191,121,244,214,78,123,36,55,93,223,177,253,129,251,146,13,54,41,126,127,95,201,81,175,77,77,201,214,157,156,132,50,98,100,121,123,243,50,201,13,127,168,62,90,118,81,185,234,91,213,117,83,118,218,189,40,188,58,104,80,114,204,135,147,115,78,43,191,78,193,81,0,0,128,218,178,130,163,189,185,115,147,95,253,180,188,111,197,81,201,216,77,250,119,62,189,177,197,54,201,200,229,59,182,223,115,91,241,235,156,217,175,254,190,173,93,246,234,188,110,200,136,229,202,219,231,190,148,204,122,161,123,243,236,173,191,254,49,185,225,7,213,253,71,159,248,106,224,178,199,254,201,198,175,47,191,238,153,137,201,143,191,223,247,243,3,0,0,96,145,19,112,180,119,215,205,201,164,138,2,163,251,31,158,52,45,221,191,243,233,141,101,150,77,246,60,160,99,251,131,127,254,79,237,141,7,138,250,19,237,237,188,103,231,99,175,84,177,213,35,41,182,248,244,151,87,94,78,46,57,183,186,255,109,239,77,198,180,169,155,178,244,144,98,21,71,149,171,191,173,224,40,0,0,64,13,9,56,218,154,54,37,185,228,107,213,253,187,239,223,127,115,233,43,227,118,43,111,255,219,159,146,251,127,223,177,189,121,153,100,171,237,59,31,119,189,13,147,97,21,91,57,250,179,150,197,77,215,39,143,252,181,188,111,133,149,146,195,143,238,216,254,134,29,146,55,191,165,252,30,5,71,1,0,0,106,73,192,177,192,156,217,201,217,167,22,71,147,150,57,252,232,100,205,181,251,119,78,125,97,211,45,147,213,214,236,216,126,207,173,201,93,191,238,216,190,199,1,201,240,17,157,143,219,220,92,156,180,82,230,103,215,36,83,39,119,111,158,73,177,61,104,198,180,174,95,63,245,217,198,133,69,143,62,177,122,171,205,81,39,20,181,70,202,40,56,10,0,0,80,59,2,142,36,121,246,159,201,233,39,39,127,170,40,46,186,202,234,201,17,199,244,239,156,250,74,211,210,229,43,79,238,190,181,216,166,210,222,142,21,43,62,202,236,182,95,121,251,220,151,146,111,156,89,125,18,77,153,150,150,228,252,47,38,159,61,161,56,17,165,43,174,186,40,153,53,179,188,111,236,38,201,158,7,86,223,59,122,76,242,246,99,171,251,47,57,39,121,177,159,142,194,5,0,0,160,215,94,219,1,199,115,211,147,235,174,74,142,63,34,185,255,222,234,235,78,254,92,177,221,161,174,198,189,185,107,215,141,92,190,40,76,218,85,91,239,152,108,182,85,121,223,221,183,36,231,125,161,8,59,58,243,220,244,228,43,167,22,197,93,199,63,148,124,238,195,157,135,28,127,249,67,114,227,143,170,251,223,123,114,50,164,185,241,24,135,190,59,89,121,149,242,62,5,71,1,0,0,106,101,201,61,38,246,23,63,236,120,212,233,252,249,201,191,95,44,190,60,63,246,96,113,68,106,103,171,12,142,255,84,178,221,46,139,110,158,253,97,236,38,69,161,205,137,19,26,95,183,231,129,69,13,142,174,26,60,56,121,207,9,201,39,43,86,66,252,242,199,201,227,143,22,91,69,182,220,182,40,122,218,214,244,41,197,86,144,107,46,93,120,53,201,130,144,227,140,11,146,149,74,2,136,151,231,38,23,159,83,61,175,93,246,74,222,216,201,49,183,73,113,18,204,49,39,37,103,127,182,188,255,234,111,23,99,141,30,211,249,88,0,0,0,12,168,37,55,224,72,146,47,124,180,119,247,127,224,19,201,91,223,213,55,115,25,72,131,6,23,167,169,52,58,109,36,233,250,74,143,182,182,218,190,88,45,113,217,249,229,253,143,63,82,108,59,25,49,50,217,120,139,226,244,149,23,231,36,255,122,38,25,255,112,245,184,207,207,40,2,169,50,55,94,87,4,84,101,154,154,138,208,101,193,177,176,157,217,125,191,34,12,123,248,47,29,251,22,20,28,253,252,215,186,62,30,0,0,0,3,226,181,189,69,165,202,200,229,147,211,207,43,10,139,46,41,95,108,59,91,133,178,202,234,201,38,91,244,108,236,35,142,73,246,57,164,241,53,179,102,22,43,102,110,186,62,185,243,230,198,225,198,200,229,147,211,206,77,70,173,214,177,111,234,228,228,187,23,86,223,123,248,49,201,58,235,119,109,222,73,81,163,228,189,39,87,247,43,56,10,0,0,80,11,2,142,246,246,58,40,185,232,7,201,78,123,12,244,76,250,214,152,215,53,14,48,246,60,32,89,122,72,207,198,110,106,74,62,246,133,98,187,71,111,173,49,58,57,243,226,100,163,205,203,251,175,252,102,117,97,209,21,71,37,135,29,213,253,103,110,185,109,227,35,128,21,28,5,0,0,88,236,9,56,146,100,232,176,228,128,183,21,193,198,255,124,41,89,117,141,129,158,209,162,209,232,75,252,246,21,71,190,118,213,224,193,201,145,199,37,231,92,222,189,66,165,109,237,127,68,114,193,247,139,154,33,101,30,184,175,88,1,82,229,232,19,147,229,86,232,217,179,143,58,190,186,40,169,130,163,0,0,0,139,189,37,187,6,71,123,67,154,147,145,203,21,63,233,31,189,110,50,102,253,100,236,102,197,106,129,97,195,7,122,118,139,222,118,187,36,23,124,169,99,251,218,235,37,27,110,214,55,207,216,98,155,228,236,75,147,63,220,157,220,118,99,177,197,163,209,73,42,107,140,46,10,121,238,125,112,241,119,82,165,179,194,162,99,55,45,86,161,244,212,154,235,36,111,127,95,177,66,164,140,130,163,0,0,0,139,181,65,185,229,193,214,129,158,4,75,176,185,115,147,127,60,149,76,125,54,153,61,43,153,215,82,172,152,25,54,60,89,117,205,34,224,88,82,234,156,0,0,0,48,96,4,28,0,0,0,64,237,169,193,1,0,0,0,212,158,128,3,0,0,0,168,61,1,7,0,0,0,80,123,2,14,0,0,0,160,246,4,28,0,0,0,64,237,9,56,0,0,0,128,218,19,112,0,0,0,0,181,39,224,0,0,0,0,106,79,192,1,0,0,0,212,158,128,3,0,0,0,168,61,1,7,0,0,0,80,123,2,14,0,0,0,160,246,4,28,0,0,0,64,237,9,56,0,0,0,128,218,19,112,0,0,0,0,181,39,224,0,0,0,0,106,79,192,1,0,0,0,212,158,128,3,0,0,0,168,61,1,7,0,0,0,80,123,2,14,0,0,0,160,246,154,6,122,2,0,64,47,60,63,35,25,255,80,50,123,86,178,250,154,201,70,155,39,131,252,252,2,0,120,237,17,112,0,208,119,206,248,120,114,231,205,29,219,71,46,159,92,127,119,255,207,103,73,247,199,223,38,103,125,38,121,110,250,171,109,227,118,75,62,245,229,100,216,240,129,155,87,95,251,201,247,147,11,191,220,179,123,155,151,73,86,88,169,248,172,189,94,178,206,250,201,38,91,36,27,108,154,52,55,247,237,60,1,128,1,37,224,0,128,58,154,249,124,242,149,83,23,14,55,146,228,183,183,37,63,184,44,57,230,164,129,153,215,226,102,238,75,201,228,73,197,231,145,191,190,218,62,106,213,228,224,35,147,125,14,73,150,91,97,224,230,7,0,244,25,107,88,1,160,142,158,154,144,204,152,90,222,119,207,237,253,59,151,58,154,250,108,114,201,185,201,7,14,77,238,248,229,64,207,6,0,232,3,2,14,0,88,210,44,229,255,222,187,108,218,148,228,127,63,145,124,231,188,100,254,252,129,158,13,0,208,11,254,11,8,0,234,104,189,13,147,85,86,47,239,219,121,207,254,157,203,146,224,154,239,36,223,189,112,160,103,1,0,244,130,26,28,0,80,71,35,70,38,167,156,149,156,253,217,100,210,211,175,182,239,117,80,114,232,81,3,55,175,254,118,220,199,147,149,87,169,238,159,55,63,249,247,156,100,210,223,147,123,110,43,106,113,84,185,250,226,100,195,205,147,113,111,238,251,121,2,0,139,156,128,3,0,234,106,179,55,36,23,253,48,249,251,19,201,156,217,201,170,107,36,163,199,12,244,172,250,215,118,187,20,39,163,116,197,251,63,86,156,242,115,254,25,201,139,115,202,175,249,230,153,201,150,219,38,67,135,245,221,28,1,128,126,97,139,10,0,212,217,208,97,201,198,175,79,182,30,247,218,11,55,186,171,105,233,100,247,253,147,175,94,158,172,56,170,252,154,201,147,20,29,5,128,154,18,112,0,0,175,45,99,55,73,62,240,241,234,254,95,253,180,255,230,2,0,244,25,1,7,0,240,218,179,219,190,201,216,77,203,251,30,252,115,50,229,95,253,59,31,0,160,215,212,224,0,96,201,246,202,203,201,51,19,147,169,147,147,89,51,147,150,87,146,230,101,146,229,87,76,86,95,171,168,91,49,104,80,223,63,247,229,185,201,196,39,146,103,39,21,245,30,6,47,149,140,92,174,120,230,232,49,201,160,154,252,140,97,250,148,228,233,167,146,231,166,37,45,45,197,150,152,229,87,76,214,29,155,12,27,62,208,179,235,185,65,131,147,55,189,37,25,255,80,121,255,51,19,171,79,169,169,50,103,118,242,244,19,201,204,23,138,223,191,242,114,241,174,173,184,114,241,247,62,106,181,222,207,187,189,197,225,61,155,49,53,249,199,223,147,233,83,147,185,47,37,75,47,157,12,31,89,252,249,141,30,83,108,13,2,128,126,32,224,0,96,201,244,200,95,146,95,253,44,185,227,166,34,216,168,178,246,122,201,94,7,38,123,28,216,248,52,142,174,154,242,175,228,167,255,151,220,248,163,234,231,174,53,38,57,248,157,201,91,14,77,154,155,147,23,158,75,14,221,185,227,117,91,239,152,156,249,237,234,103,237,183,117,241,133,178,189,147,79,75,14,56,162,252,158,95,255,44,57,235,148,142,237,111,127,95,114,236,71,139,223,183,182,38,127,184,59,249,201,247,147,251,126,83,253,252,61,246,79,222,250,238,234,149,16,139,187,215,109,88,221,55,237,217,174,141,49,243,249,226,116,150,91,111,72,30,184,175,241,181,235,111,84,188,107,187,237,151,172,176,82,215,231,89,166,63,223,179,50,115,231,38,183,223,152,220,252,147,228,111,127,170,190,110,196,200,100,207,3,139,57,172,187,65,247,158,1,0,221,36,224,0,96,201,50,121,82,114,245,183,147,155,174,239,218,245,79,63,153,124,231,188,228,218,203,146,163,78,72,246,61,180,248,169,123,119,181,206,47,2,149,111,127,181,248,210,219,200,63,38,38,23,126,185,8,95,62,114,90,178,244,144,238,63,175,175,205,158,85,252,58,245,217,228,146,115,147,219,126,209,249,61,183,220,80,124,78,60,37,57,232,29,139,102,37,204,162,180,220,138,213,125,255,174,56,101,101,129,150,87,138,119,236,59,95,43,86,107,116,197,19,143,38,23,61,154,92,249,205,34,76,218,247,176,100,169,165,186,62,223,100,241,120,207,126,119,71,114,217,249,201,83,19,58,191,118,214,204,228,250,239,21,159,35,142,73,222,113,108,50,98,185,190,153,7,0,180,35,224,0,96,201,241,208,253,201,105,39,21,63,169,238,174,89,51,147,111,252,191,228,183,183,39,159,61,59,89,110,133,174,223,219,218,154,92,241,141,34,88,233,142,7,239,79,62,253,129,34,88,25,104,179,103,22,225,208,169,31,42,142,157,237,142,11,191,156,44,179,108,178,207,33,139,102,110,139,74,235,252,234,190,193,13,130,135,89,47,36,255,239,211,141,87,183,52,50,103,118,113,84,237,132,71,146,15,159,210,245,224,97,160,223,179,249,243,147,171,46,42,62,61,241,131,203,139,250,38,159,255,90,178,82,31,172,150,2,128,118,106,178,1,24,0,58,241,167,223,37,159,249,96,207,194,141,182,238,255,125,114,202,241,69,237,137,174,250,225,21,221,255,210,185,192,180,41,201,185,159,239,217,189,125,233,193,63,247,44,220,88,224,155,103,22,1,73,157,188,208,96,5,196,178,195,202,219,95,156,147,124,254,228,158,135,27,109,221,248,163,228,123,223,234,250,245,3,249,158,181,206,79,46,248,82,207,195,141,5,30,254,75,114,202,135,26,111,27,3,128,30,178,130,3,128,250,155,60,41,249,210,39,139,47,159,85,86,89,61,89,111,108,81,19,96,202,228,228,209,191,149,215,175,72,146,199,30,76,206,251,98,114,250,249,157,111,33,120,226,209,228,226,115,26,95,51,164,57,25,179,126,178,242,170,201,115,211,147,39,199,87,63,123,160,76,155,82,124,218,90,101,245,162,70,73,90,139,34,146,141,2,140,23,231,36,183,252,60,121,215,7,23,233,52,251,212,163,127,173,238,91,181,162,192,232,213,223,78,254,250,199,234,251,198,237,150,108,185,109,81,136,245,229,185,201,191,254,81,212,170,248,231,51,21,227,93,156,236,240,230,100,163,205,27,207,117,160,223,179,95,252,40,249,249,181,141,159,189,233,86,69,29,155,23,158,75,38,62,94,125,18,205,19,143,38,87,126,35,57,225,51,125,51,55,0,248,15,1,7,0,245,214,210,82,44,247,175,170,71,240,186,141,139,122,7,91,110,179,240,105,14,47,60,151,220,126,83,81,111,162,236,75,224,239,238,40,138,56,190,245,93,213,207,158,63,63,249,214,87,171,251,135,14,43,158,189,235,222,11,111,121,153,51,59,249,227,61,201,21,23,20,167,117,44,110,222,180,79,114,248,209,69,241,208,5,117,53,90,91,147,39,31,75,46,191,32,249,253,157,229,247,221,240,131,228,157,199,37,131,107,176,64,244,149,151,147,91,27,212,25,89,107,76,199,182,127,253,163,168,213,82,102,221,13,146,79,125,185,120,223,218,123,231,113,197,202,135,107,190,83,126,239,79,174,78,62,125,102,245,92,6,250,61,123,114,124,242,205,179,202,251,154,154,146,99,78,42,182,39,181,125,246,188,121,201,253,247,38,151,157,151,140,127,184,227,125,63,190,186,152,239,102,111,232,249,188,0,160,157,26,252,23,8,0,52,112,223,93,197,137,31,101,182,223,53,57,231,242,100,235,113,29,143,170,92,110,133,226,132,137,175,93,153,140,92,190,252,254,43,46,104,188,229,229,225,7,138,45,45,101,86,88,41,57,239,170,228,192,183,119,172,231,49,108,120,241,229,238,252,239,37,111,220,161,122,252,129,112,220,199,147,83,191,146,108,184,217,194,69,67,7,13,42,78,1,249,220,185,201,22,219,148,223,59,109,74,242,207,167,251,103,158,189,117,221,149,69,129,217,50,219,236,84,28,237,218,94,85,176,51,164,57,57,253,188,242,112,35,41,78,48,121,239,73,201,78,123,148,247,223,241,203,198,91,54,6,250,61,187,230,59,197,106,148,50,103,92,152,188,237,189,29,159,189,212,82,197,255,238,254,223,183,147,77,182,40,191,183,171,133,128,1,160,139,4,28,0,212,87,107,107,241,147,224,50,171,173,153,124,252,139,197,151,188,70,198,110,146,124,226,140,242,190,23,231,20,219,11,170,220,214,160,239,147,255,91,108,137,105,100,228,242,201,39,191,212,248,154,254,116,232,81,197,202,141,65,13,254,243,160,185,185,56,9,163,202,211,79,245,253,188,250,210,188,121,201,117,87,21,39,231,84,217,251,224,242,246,167,43,234,147,236,180,123,178,230,58,141,159,59,120,112,114,224,219,202,251,90,90,138,19,79,170,12,228,123,54,113,66,245,243,143,253,104,17,6,53,178,220,10,213,91,81,110,189,161,227,182,40,0,232,5,91,84,0,168,175,199,31,41,150,193,151,121,215,7,139,159,110,119,197,14,111,74,198,189,185,56,65,165,189,31,95,253,159,35,80,219,125,233,159,251,82,114,243,79,202,199,219,126,215,206,191,248,45,176,242,98,116,154,196,145,199,117,237,168,215,141,43,126,34,159,116,126,116,105,127,107,109,45,254,174,166,79,77,38,60,156,220,116,93,81,144,182,202,216,77,146,29,119,43,239,59,242,131,201,97,71,119,108,31,90,81,144,180,189,117,27,4,17,207,77,43,111,31,232,247,172,42,220,88,113,84,178,255,17,93,27,99,195,205,138,21,36,237,255,220,91,90,138,90,56,59,237,222,179,185,1,64,59,2,14,0,234,235,145,138,34,145,205,203,36,59,239,217,245,113,6,13,74,246,61,172,60,224,152,244,116,81,96,115,244,186,11,183,63,253,100,117,1,199,125,14,233,90,80,176,192,110,251,54,254,41,125,127,169,218,170,211,222,176,225,69,177,214,178,109,21,255,126,177,111,231,212,153,247,29,212,119,99,53,53,37,39,159,86,125,108,107,111,195,168,225,35,170,251,170,254,220,6,250,61,187,183,226,180,152,61,246,111,252,239,211,222,182,187,148,7,75,143,63,34,224,0,160,207,216,162,2,64,125,61,248,231,242,246,157,246,232,124,107,74,123,155,191,177,248,130,91,102,252,67,29,219,38,62,222,120,172,238,24,181,90,247,174,95,28,172,180,106,121,251,75,253,28,112,244,165,83,207,46,86,27,44,42,141,194,136,249,243,203,219,7,242,61,155,58,185,56,241,164,204,27,199,117,111,172,170,83,105,38,148,20,32,5,128,30,178,130,3,128,250,250,219,159,202,219,55,168,40,246,216,200,176,225,197,169,33,15,255,165,99,223,83,37,95,50,171,142,253,92,123,189,142,5,23,151,68,85,223,213,91,251,117,22,125,99,229,85,146,79,252,111,81,20,179,39,158,155,158,60,244,64,177,218,226,201,199,138,227,81,103,190,144,204,152,218,248,232,226,174,24,200,247,172,81,61,149,75,207,75,238,250,85,215,199,170,58,50,118,250,212,238,205,9,0,26,16,112,0,80,79,45,45,201,212,103,203,251,86,91,171,103,99,174,183,97,121,192,49,179,228,36,149,217,21,167,94,172,191,97,207,158,77,255,107,106,74,14,121,87,114,216,81,201,74,61,216,126,114,255,239,147,27,126,152,220,121,115,223,207,109,129,129,124,207,170,158,157,20,171,154,202,86,54,117,215,140,138,218,35,0,208,3,2,14,0,234,105,206,172,234,190,161,67,123,54,230,240,145,229,237,207,207,232,216,86,245,229,175,59,117,9,232,127,67,154,139,194,156,91,239,152,140,123,83,207,130,141,231,166,39,223,60,51,185,253,166,190,159,95,123,3,249,158,53,10,56,250,202,140,169,73,235,252,198,39,247,0,64,23,9,56,0,168,167,151,231,86,247,13,105,238,217,152,205,21,247,205,46,9,83,170,138,66,54,47,219,179,103,211,51,239,124,127,178,193,38,213,253,131,6,39,67,134,36,203,14,45,78,254,88,121,213,234,191,231,174,152,60,41,57,253,35,69,113,204,254,48,144,239,217,156,217,139,254,25,73,177,173,169,27,181,82,1,160,138,128,3,128,122,106,20,98,52,10,63,26,153,91,113,95,217,79,203,151,169,248,130,217,211,103,211,51,187,239,159,172,179,126,255,60,171,229,149,228,171,159,171,14,55,86,91,179,56,217,100,243,55,38,171,175,149,44,59,108,225,247,180,229,149,228,160,237,187,247,204,1,125,207,164,14,0,212,139,128,3,128,122,106,116,74,74,79,143,42,157,83,177,36,127,249,21,59,182,141,88,174,252,218,178,213,30,44,25,126,245,211,228,129,251,202,251,14,62,50,57,230,195,141,223,203,165,122,176,13,99,32,223,179,17,21,91,182,154,151,73,110,248,67,247,142,168,5,128,126,96,195,35,0,245,212,180,116,50,170,226,168,210,201,255,236,217,152,19,159,40,111,31,89,114,90,69,213,23,207,191,87,140,65,189,181,182,38,55,93,95,222,183,203,94,201,9,159,234,254,209,196,93,49,144,239,89,213,179,231,190,148,204,122,97,209,63,31,0,186,73,192,1,64,125,109,246,134,242,246,39,30,237,254,88,255,126,49,121,164,228,4,149,36,25,243,186,142,109,107,172,93,253,108,171,56,150,60,255,124,38,121,228,175,229,125,135,190,123,209,21,201,28,200,247,108,165,81,213,125,19,75,142,78,6,128,1,38,224,0,160,190,54,127,99,121,251,61,183,118,127,155,202,67,247,23,71,207,150,217,112,211,142,109,235,110,208,120,172,238,240,101,113,241,55,99,106,117,223,218,139,176,6,200,64,190,103,235,109,88,189,42,229,119,119,116,111,44,0,232,7,2,14,0,234,107,163,215,151,183,207,153,157,252,238,246,238,141,245,171,159,150,183,175,49,58,89,115,157,142,237,163,199,84,127,249,171,26,171,202,189,119,117,239,122,250,223,204,231,171,251,6,119,241,63,167,122,114,42,201,64,190,103,205,205,201,14,111,42,239,251,217,53,201,212,201,221,27,47,41,10,249,206,152,214,253,251,0,160,11,4,28,0,212,215,6,27,39,91,110,91,222,119,213,69,201,172,138,162,161,237,61,112,95,114,219,141,229,125,135,188,171,252,11,236,144,230,100,223,195,202,239,185,243,230,228,47,127,232,218,179,39,61,221,181,235,24,88,75,53,168,203,254,143,137,93,27,227,7,151,119,255,185,3,253,158,237,182,95,121,251,220,151,146,111,156,89,189,234,169,76,75,75,114,254,23,147,207,158,144,76,159,210,179,249,0,64,3,2,14,0,234,107,208,160,228,144,35,203,251,158,153,152,156,243,185,206,183,170,252,253,137,228,204,79,151,247,13,29,150,236,182,111,245,189,111,218,167,186,239,172,83,146,103,158,106,252,236,169,147,147,179,79,109,124,13,139,135,81,171,85,247,93,119,85,210,58,191,186,191,117,126,114,253,247,146,107,47,235,217,179,7,242,61,219,122,199,100,179,173,202,251,238,190,37,57,239,11,69,216,209,153,231,166,39,95,57,181,88,117,50,254,161,228,115,31,22,114,0,208,231,28,19,11,192,162,55,243,249,228,55,191,238,253,56,43,142,74,54,221,100,132,119,63,0,0,32,0,73,68,65,84,114,225,182,237,118,45,190,132,253,241,158,142,215,223,125,107,50,229,152,228,125,31,73,182,216,186,56,121,101,129,89,47,36,119,253,42,185,248,156,234,173,3,239,57,49,89,174,228,4,149,5,198,110,154,236,180,123,241,156,246,166,252,43,57,233,200,228,253,31,47,174,25,185,252,194,207,190,251,214,228,255,46,41,138,87,178,248,91,103,189,100,181,53,147,201,147,58,246,221,246,139,98,27,201,187,143,79,86,92,249,213,246,214,249,201,163,15,38,63,250,110,177,218,162,145,87,94,169,238,27,200,247,108,240,224,228,61,39,36,159,60,182,188,255,151,63,78,30,127,52,57,250,196,98,53,213,50,203,46,220,63,125,74,81,175,227,154,75,23,254,179,91,16,114,156,113,65,178,210,42,61,155,27,0,180,35,224,0,160,127,124,225,163,189,31,99,191,195,59,6,28,77,77,201,73,159,77,78,120,91,249,150,148,241,15,37,159,122,127,178,242,42,201,186,99,139,163,47,167,61,155,60,246,96,227,159,60,111,183,75,114,208,59,26,207,103,208,160,228,253,31,75,254,112,79,249,88,179,102,38,231,126,62,249,250,25,201,90,235,38,43,172,148,252,235,153,242,47,201,44,222,154,150,78,14,126,103,242,173,179,203,251,127,126,109,114,211,117,201,86,219,23,199,23,207,124,190,56,118,184,171,219,87,26,189,139,3,253,158,109,181,125,242,222,147,147,203,206,47,239,127,252,145,98,219,201,136,145,201,198,91,20,167,175,188,56,167,152,195,248,135,171,199,125,126,70,50,191,193,202,23,0,232,38,1,7,0,245,183,198,232,228,148,175,36,167,127,164,250,139,226,180,41,197,167,43,198,110,146,124,228,243,69,120,210,153,53,215,73,62,124,106,242,213,207,85,95,211,210,146,76,156,80,124,168,175,253,14,79,238,185,45,249,219,159,202,251,91,90,146,63,220,221,179,177,167,61,219,184,127,160,223,179,35,142,73,254,249,116,177,98,163,202,172,153,201,125,191,233,218,120,35,151,79,78,59,183,241,214,31,0,232,38,53,56,0,88,50,108,179,83,114,214,197,141,183,148,116,197,86,219,37,95,254,86,241,83,248,174,218,231,144,228,131,159,236,217,243,198,110,146,236,186,119,207,238,165,127,45,59,52,57,229,172,100,205,181,123,118,255,193,239,172,46,218,249,244,147,157,223,63,144,239,89,83,83,242,177,47,36,199,156,212,243,49,22,88,99,116,114,230,197,201,70,155,247,126,44,0,104,67,192,1,192,146,99,179,55,36,223,188,182,250,212,137,70,134,13,79,142,255,159,228,140,11,147,229,87,236,254,253,135,30,149,124,254,107,197,86,152,174,218,101,175,228,139,23,22,181,29,168,135,81,171,37,231,92,209,184,240,103,123,77,77,201,137,167,36,39,124,58,217,164,226,104,227,63,255,190,107,197,58,7,242,61,27,60,56,57,242,184,228,156,203,147,45,182,233,217,24,251,31,145,92,240,253,34,112,1,128,62,102,139,10,0,75,150,85,215,72,62,118,122,178,239,161,201,175,127,86,20,128,108,116,92,236,90,99,146,61,15,76,246,58,168,123,171,54,218,27,52,40,217,121,207,100,211,173,146,159,126,63,185,225,135,201,11,207,149,95,187,225,102,201,97,239,73,222,180,119,50,104,112,210,82,81,96,114,233,165,203,219,25,88,43,175,146,156,250,149,34,228,248,233,255,37,247,223,91,126,221,136,145,197,187,117,240,145,197,170,133,36,217,124,235,242,107,231,190,84,28,249,186,237,206,141,159,189,56,188,103,91,108,147,156,125,105,177,29,231,182,27,139,211,84,26,133,51,107,140,46,66,150,189,15,78,70,175,219,189,103,1,64,55,12,202,45,15,182,14,244,36,0,96,145,121,229,229,228,31,127,47,78,155,152,53,179,248,146,55,164,185,216,202,178,250,90,197,103,208,160,69,243,220,167,30,79,158,157,84,20,92,28,60,184,120,230,154,235,20,95,248,218,62,243,140,79,36,119,254,178,227,24,123,236,159,124,250,204,190,159,27,125,107,218,148,228,153,39,139,163,80,95,121,37,25,62,162,56,77,101,189,141,146,230,230,69,251,236,197,225,61,155,59,55,249,199,83,201,212,103,147,217,179,146,121,45,197,17,203,195,134,39,171,174,217,113,30,0,176,136,88,193,1,192,146,109,233,33,201,186,27,20,159,254,126,238,216,77,58,95,138,223,218,154,252,253,137,242,190,149,123,177,162,132,254,179,242,42,221,219,50,210,151,22,135,247,172,185,57,89,127,163,226,3,0,3,72,13,14,0,232,11,45,45,61,187,111,194,35,213,167,94,172,179,126,207,231,195,146,201,123,6,0,149,4,28,0,208,23,46,61,47,185,246,178,226,39,229,93,213,218,154,252,248,123,213,253,27,87,20,164,228,181,203,123,6,0,149,108,81,1,128,222,250,245,207,146,31,94,81,252,126,206,172,228,29,239,47,142,20,109,164,181,53,185,238,202,226,222,50,91,109,87,20,64,133,5,188,103,0,208,144,34,163,0,208,27,227,31,74,62,114,84,242,242,220,87,219,214,89,63,57,234,67,201,27,118,40,78,210,104,171,181,53,121,106,66,242,195,203,147,95,255,188,122,220,51,47,78,182,30,183,104,230,76,253,120,207,0,160,83,2,14,0,232,169,150,150,228,248,195,139,47,146,101,134,52,23,63,33,95,117,141,226,84,137,25,211,146,39,199,39,143,63,210,120,220,125,15,77,62,122,186,147,39,40,120,207,0,160,75,4,28,0,208,27,247,253,38,57,229,248,190,27,111,139,109,146,211,207,239,248,19,121,94,219,188,103,0,208,41,69,70,1,160,55,182,221,57,57,243,219,201,168,62,56,210,117,220,110,201,105,231,250,210,73,71,222,51,0,232,148,21,28,0,208,23,166,77,73,174,185,52,185,225,218,238,31,229,185,220,10,201,209,39,38,111,121,107,210,180,244,162,153,31,75,6,239,25,0,84,18,112,0,64,95,154,60,41,249,205,175,147,59,126,153,60,246,96,227,107,183,217,41,217,117,239,100,199,221,146,17,203,245,207,252,88,50,120,207,0,160,3,1,7,0,44,42,51,166,37,255,124,186,248,245,197,57,197,79,205,135,14,77,86,94,45,89,99,116,50,124,196,64,207,144,37,129,247,12,0,146,8,56,0,0,0,128,37,128,34,163,0,0,0,64,237,9,56,0,0,0,128,218,19,112,0,0,0,0,181,39,224,0,0,0,0,106,79,192,1,0,0,0,212,158,128,3,0,0,0,168,61,1,7,0,0,0,80,123,2,14,0,0,0,160,246,4,28,0,0,0,64,237,9,56,0,0,0,128,218,19,112,0,0,0,0,181,39,224,0,0,0,0,106,111,80,146,49,73,150,106,243,105,106,247,235,82,41,130,144,193,255,185,126,193,125,173,253,61,89,0,0,0,96,137,215,54,115,104,77,50,255,63,159,121,255,249,180,180,251,117,94,146,121,77,255,185,104,80,155,207,130,127,158,215,102,240,214,118,215,1,0,0,0,44,74,173,109,62,109,3,142,249,101,159,166,44,28,100,180,15,54,22,12,56,40,182,179,0,0,0,0,253,111,126,58,134,28,243,218,255,115,251,21,28,101,225,198,224,44,188,194,163,109,31,0,0,0,64,95,106,159,61,180,93,197,81,22,114,252,119,5,71,251,45,42,109,131,140,5,131,180,173,189,209,246,33,0,0,0,0,125,169,44,123,104,27,112,84,110,81,89,112,97,219,68,100,80,187,1,212,222,0,0,0,0,6,66,107,202,87,114,180,109,75,83,201,69,11,182,170,44,88,185,33,220,0,0,0,0,6,82,251,236,162,237,175,173,73,90,219,110,81,153,223,230,198,193,89,56,224,72,58,134,28,182,168,0,0,0,0,125,173,42,127,40,91,197,241,223,176,163,169,77,71,251,155,173,222,0,0,0,0,22,23,85,91,85,230,231,63,43,56,218,118,44,184,161,44,220,80,96,20,0,0,0,232,15,85,25,68,89,200,177,208,22,149,5,55,183,61,22,182,253,128,0,0,0,0,3,169,253,169,42,255,13,58,218,110,81,89,176,98,163,234,88,216,70,3,3,0,0,0,244,86,87,115,136,246,43,57,22,42,50,218,217,182,20,0,0,0,128,129,84,185,93,165,44,224,72,4,27,0,0,0,192,226,171,195,74,142,166,118,141,221,93,189,97,139,10,0,0,0,208,87,186,155,69,252,55,211,104,187,130,163,253,64,234,111,0,0,0,0,253,173,59,121,196,66,1,199,130,229,28,131,210,49,180,168,26,84,184,1,0,0,0,44,42,221,201,35,90,147,164,209,22,149,170,27,1,0,0,0,22,165,174,230,17,255,189,174,109,192,209,126,0,171,55,0,0,0,128,129,210,173,92,162,125,192,209,233,13,0,0,0,0,253,160,91,185,196,82,113,36,44,0,0,0,80,115,2,14,0,0,0,160,246,150,42,105,235,238,153,179,0,0,0,0,125,169,219,217,196,160,46,222,4,0,0,0,176,216,170,10,55,202,218,173,218,0,0,0,0,250,155,140,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,63,123,112,32,0,0,0,0,0,228,255,218,8,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,42,237,193,33,1,0,0,0,128,160,255,175,221,96,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,132,195,180,156,0,0,7,101,73,68,65,84,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,224,11,198,102,136,27,102,226,224,36,0,0,0,0,73,69,78,68,174,66,96,130]},{"layer_unique_id":53459,"duration_micros":1215,"top":-69.584716796875,"left":878.186279296875,"width":271.3984375,"height":271.3984069824219,"snapshot":[137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,4,56,0,0,8,106,8,6,0,0,0,106,246,175,7,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,32,0,73,68,65,84,120,156,236,221,123,112,92,245,97,232,241,223,89,61,214,146,31,178,100,176,193,128,177,193,90,219,112,241,165,45,161,73,26,8,15,67,73,104,234,36,13,38,36,211,166,3,164,52,233,107,166,233,76,166,211,25,104,166,109,114,211,6,147,166,184,77,8,233,157,78,76,9,132,20,18,30,33,13,245,36,64,120,26,46,132,0,54,248,133,241,11,191,101,75,150,165,213,238,185,127,72,43,31,173,118,87,146,145,109,105,245,249,204,28,239,158,179,231,236,158,21,252,179,223,249,157,223,137,2,0,0,0,19,89,84,97,61,74,172,71,69,75,170,111,137,66,8,53,137,245,154,194,242,153,169,83,231,92,57,117,234,141,53,33,76,143,67,136,226,16,162,124,8,169,56,132,40,31,199,169,194,182,184,104,91,40,218,55,132,16,66,28,23,246,141,66,8,33,30,124,222,197,95,34,30,244,24,69,253,207,139,150,124,20,66,28,69,81,255,182,77,221,221,171,191,180,103,207,163,33,132,158,16,66,174,196,210,19,66,200,247,61,47,245,152,92,226,190,37,249,188,212,18,74,60,22,63,47,181,78,232,253,159,14,0,0,128,137,107,168,192,81,120,44,142,27,229,182,21,66,71,234,229,238,238,246,198,16,54,204,171,175,63,55,21,69,147,194,145,64,209,255,152,124,175,120,240,123,38,67,198,128,237,37,206,187,212,247,26,176,111,239,63,71,158,150,252,206,189,175,135,230,154,154,217,231,167,211,141,63,239,236,220,80,225,253,227,18,231,83,233,188,134,58,231,114,239,83,233,191,17,125,4,14,0,0,128,137,173,212,143,229,82,63,218,203,5,134,138,225,227,151,221,221,29,233,16,54,156,93,95,127,78,95,228,8,37,70,97,20,7,141,66,240,72,69,35,251,252,226,125,66,232,79,22,71,246,143,122,71,114,136,28,85,70,224,0,0,0,152,216,142,38,112,84,90,82,69,75,244,171,238,238,142,154,56,222,56,63,157,94,84,42,114,68,97,64,216,72,126,94,185,207,46,117,142,165,190,195,145,168,81,252,40,114,84,29,129,3,0,0,96,98,59,218,192,81,110,123,169,224,17,189,150,205,118,68,189,145,227,156,154,40,74,135,40,42,30,193,17,74,92,162,82,105,116,198,160,0,80,56,190,232,11,137,28,19,132,192,1,0,0,48,177,141,52,112,12,181,62,104,4,71,97,251,154,108,182,35,142,227,77,153,116,122,97,42,138,38,13,10,26,137,232,81,120,227,228,62,137,19,29,116,217,73,169,243,77,238,95,124,156,200,81,125,4,14,0,0,0,42,253,96,30,106,228,196,112,71,93,68,33,132,212,218,108,182,61,151,207,191,149,169,175,95,88,19,69,233,16,6,93,166,82,252,185,125,107,81,8,195,59,151,226,239,81,42,134,36,35,138,200,81,37,4,14,0,0,0,134,19,56,146,207,135,27,57,66,24,60,241,104,234,141,108,182,35,151,207,111,202,164,211,253,145,163,176,127,114,46,142,228,40,142,68,164,24,240,60,121,158,69,33,35,12,241,154,200,81,101,4,14,0,0,0,74,70,129,18,143,165,2,70,241,243,82,183,144,29,180,253,205,108,246,80,182,40,114,244,214,139,1,109,99,224,123,71,209,145,32,81,249,60,203,125,199,146,151,182,136,28,213,65,224,0,0,0,96,164,129,35,148,121,94,110,159,146,161,99,93,54,219,209,157,207,191,181,48,157,206,12,24,201,81,98,46,142,35,103,117,36,114,132,18,193,162,194,40,142,80,102,31,145,163,74,8,28,0,0,0,84,10,28,133,231,229,126,80,87,138,25,197,175,13,26,221,177,62,155,237,232,234,141,28,11,82,81,148,46,49,50,99,192,165,42,161,47,128,132,112,84,151,170,148,219,71,228,168,2,2,7,0,0,0,33,140,124,20,71,113,192,40,247,250,80,225,35,172,207,102,59,58,115,185,205,231,164,211,173,133,200,81,225,82,149,16,18,17,162,84,16,73,108,23,57,38,16,129,3,0,0,128,16,134,31,56,42,29,55,210,248,209,191,125,67,79,79,123,103,46,183,121,209,145,203,85,162,1,249,162,196,143,247,104,224,99,185,115,169,68,228,168,34,2,7,0,0,0,5,149,126,28,151,11,21,197,251,31,205,8,143,16,66,8,27,122,122,58,58,115,185,183,22,37,231,228,232,139,8,137,59,169,36,62,237,93,207,199,81,106,63,145,99,156,18,56,0,0,0,8,161,252,143,224,225,254,32,31,206,40,143,178,113,163,240,124,67,79,207,161,206,92,238,173,133,233,116,166,54,138,234,123,95,57,210,28,42,68,142,35,123,138,28,165,142,171,250,200,33,112,0,0,0,80,48,156,75,80,10,143,21,67,69,133,215,202,141,250,232,95,239,27,201,177,121,64,228,72,236,35,114,84,220,103,194,70,14,129,3,0,0,128,164,225,68,142,225,252,24,47,23,58,138,183,151,60,126,99,223,229,42,133,200,81,52,233,168,200,81,121,159,9,25,57,4,14,0,0,0,138,13,117,153,73,225,177,210,143,231,225,92,202,82,41,156,68,34,71,201,99,134,50,97,35,135,192,1,0,0,64,177,225,94,170,82,120,94,41,118,84,10,26,165,182,15,120,143,141,61,61,29,135,122,239,174,210,42,114,12,235,220,203,189,79,213,71,14,129,3,0,0,128,164,161,70,94,36,159,15,247,135,120,165,247,28,242,61,54,246,244,180,139,28,101,62,103,232,125,38,76,228,16,56,0,0,0,40,54,210,200,49,156,203,81,134,122,189,98,64,49,146,163,228,49,67,153,80,145,67,224,0,0,0,160,148,145,68,142,194,243,74,63,158,71,114,25,75,169,112,48,32,114,212,68,81,186,56,48,136,28,21,247,169,250,200,33,112,0,0,0,80,78,169,31,190,67,253,56,46,247,195,124,168,31,238,197,63,192,69,14,145,99,68,4,14,0,0,0,42,25,42,114,148,251,241,92,233,71,255,72,71,135,12,32,114,148,60,102,40,85,31,57,4,14,0,0,0,134,114,180,145,99,56,239,115,84,251,136,28,37,143,25,74,85,71,14,129,3,0,0,128,225,56,154,200,49,220,247,57,170,125,68,142,146,199,12,165,106,35,135,192,1,0,0,192,112,141,36,114,12,231,135,248,187,254,177,46,114,148,60,102,40,85,25,57,4,14,0,0,0,70,98,184,145,163,220,190,197,175,85,125,228,104,206,100,38,93,244,213,175,158,189,229,231,63,223,159,235,234,202,39,143,22,57,70,143,192,1,0,0,192,72,137,28,101,142,75,172,68,81,20,197,205,153,76,195,135,86,174,60,247,148,11,46,104,110,253,216,199,78,222,240,224,131,187,178,237,237,185,228,209,34,199,232,16,56,0,0,0,56,26,34,71,153,227,10,255,76,207,100,26,174,190,235,174,69,211,206,56,163,49,132,16,234,167,77,171,59,239,166,155,230,172,249,207,255,220,38,114,140,62,129,3,0,0,128,163,53,26,145,99,164,33,164,226,249,140,149,200,209,156,201,164,175,94,185,114,81,211,156,57,141,197,59,159,119,211,77,115,94,185,243,206,45,46,87,25,93,2,7,0,0,0,239,198,177,136,28,195,217,175,236,249,156,232,200,209,114,36,110,52,148,219,249,244,139,47,110,122,243,254,251,119,231,179,89,145,99,148,8,28,0,0,0,188,91,163,29,57,70,178,95,201,125,78,84,228,104,105,109,77,255,206,93,119,45,172,20,55,66,8,161,113,214,172,73,39,47,94,220,248,230,15,126,176,187,248,83,69,142,163,35,112,0,0,0,48,26,38,124,228,104,110,109,77,127,228,174,187,22,148,138,27,157,187,118,117,237,122,245,213,246,169,167,157,54,169,176,109,218,220,185,147,83,117,117,185,109,79,62,121,176,248,83,69,142,145,19,56,0,0,0,24,45,19,54,114,244,197,141,76,169,184,113,104,231,206,238,31,223,112,195,218,23,110,189,117,235,172,223,248,141,198,166,121,243,250,231,229,104,206,100,166,172,249,222,247,118,228,58,59,227,226,79,21,57,70,70,224,0,0,0,96,52,77,184,200,49,140,184,177,102,251,243,207,31,10,33,132,77,63,249,201,222,69,215,94,123,114,221,148,41,181,33,132,80,219,208,80,211,125,240,96,215,142,103,159,109,31,112,42,34,199,136,9,28,0,0,0,140,182,9,19,57,134,138,27,143,92,127,253,218,29,171,87,119,22,142,203,119,119,199,51,207,63,191,97,198,194,133,83,10,251,197,249,124,252,198,125,247,21,230,226,16,57,142,82,234,68,159,0,0,0,0,85,39,30,98,91,169,231,113,209,146,47,122,158,47,122,94,88,114,137,199,114,75,79,8,33,183,170,179,115,219,61,109,109,247,100,227,248,64,8,33,164,162,40,31,133,16,71,125,159,19,21,45,33,138,226,196,235,33,26,120,174,161,165,181,181,190,82,220,120,248,250,235,223,216,158,136,27,125,7,70,217,246,246,92,114,223,134,147,79,78,199,33,68,137,37,21,135,16,197,113,220,191,109,110,125,253,5,183,204,152,113,85,8,161,54,244,14,86,40,94,106,67,239,111,252,154,50,143,201,37,234,91,146,207,75,45,161,196,99,241,243,82,235,39,132,192,1,0,0,192,177,48,156,200,17,23,109,31,55,145,163,37,147,169,255,157,50,19,138,22,226,198,142,213,171,15,245,125,169,1,145,160,101,225,194,201,201,253,107,234,234,82,69,129,67,228,56,10,2,7,0,0,0,199,74,85,70,142,150,76,166,254,234,149,43,75,222,10,182,56,110,36,190,104,20,66,8,103,92,114,201,180,89,191,246,107,211,146,175,117,237,223,159,45,236,35,114,28,61,129,3,0,0,128,99,169,170,34,71,115,38,147,190,122,229,202,69,35,137,27,5,233,25,51,234,62,248,149,175,204,139,106,106,6,132,128,61,107,215,30,138,227,56,213,247,197,163,56,132,232,172,143,126,116,198,178,167,158,122,207,204,11,47,156,38,114,12,143,73,70,1,0,0,56,30,134,154,120,52,185,62,102,39,30,125,207,23,190,48,123,206,37,151,204,40,126,233,240,254,253,217,135,63,243,153,228,132,162,3,212,77,158,156,250,232,221,119,183,158,116,206,57,83,146,219,227,56,14,191,184,249,230,141,237,91,182,116,135,16,162,40,138,226,249,75,151,182,92,186,124,249,194,198,153,51,39,205,185,252,242,25,239,188,248,98,91,199,214,173,221,133,115,8,193,196,163,165,8,28,0,0,0,28,47,227,62,114,108,94,181,170,109,230,249,231,55,76,63,235,172,1,243,104,28,222,187,55,251,194,138,21,59,122,58,58,242,197,135,77,57,229,148,218,223,189,251,238,76,241,165,41,33,132,176,237,233,167,247,61,119,235,173,59,10,159,53,127,233,210,150,203,110,187,45,83,219,216,88,27,66,8,117,147,39,215,46,184,238,186,217,7,54,111,110,223,251,218,107,189,35,67,68,142,146,4,14,0,0,0,142,167,113,31,57,222,188,255,254,61,239,249,171,191,154,147,220,86,63,117,106,237,188,37,75,154,182,175,94,125,176,115,231,206,108,225,176,214,165,75,167,95,245,205,111,206,111,89,176,96,114,209,219,132,108,71,71,238,177,191,248,139,245,237,219,182,101,67,8,81,235,210,165,211,47,93,190,60,83,55,121,114,109,241,190,115,63,244,161,89,91,158,120,98,143,145,28,229,157,240,89,78,1,0,0,152,112,134,138,28,229,230,125,72,46,197,243,71,164,138,158,23,150,228,252,19,229,150,218,16,66,205,101,13,13,179,175,109,106,186,182,46,138,166,133,16,66,62,142,251,239,110,18,6,79,0,26,221,184,110,221,251,234,38,79,30,48,112,160,167,179,51,183,227,133,23,14,116,29,60,152,155,126,214,89,13,45,173,173,147,163,212,224,233,47,243,61,61,241,207,254,250,175,55,188,246,221,239,238,14,33,132,214,165,75,155,46,91,190,188,181,248,253,146,58,119,238,236,250,233,103,63,251,202,206,231,158,59,16,133,16,71,137,201,79,55,117,119,175,254,210,158,61,143,134,190,57,70,74,44,61,97,240,60,37,201,199,228,82,106,238,147,82,75,40,241,88,252,188,212,250,49,97,4,7,0,0,0,39,194,184,31,201,241,226,55,190,177,165,37,147,73,183,44,88,208,63,175,70,170,174,46,53,109,206,156,134,150,214,214,198,198,147,78,170,143,162,193,31,157,207,102,227,103,191,246,181,205,47,223,113,199,174,208,55,114,227,242,33,226,70,8,189,151,171,152,147,163,60,129,3,0,0,128,19,101,220,71,142,245,15,61,180,183,225,228,147,83,39,47,94,60,53,42,85,51,138,100,219,219,123,30,255,155,191,217,248,242,157,119,246,143,220,184,124,249,242,249,165,226,198,174,151,95,110,91,115,247,221,59,78,189,240,194,166,40,149,138,66,16,57,42,17,56,0,0,0,56,145,198,125,228,120,235,177,199,218,14,110,217,210,217,188,96,65,227,164,230,230,186,82,111,26,231,114,241,219,63,255,249,190,159,124,238,115,235,223,90,181,234,96,8,149,227,198,206,151,94,58,240,163,107,175,93,187,249,127,254,167,45,132,144,155,253,222,247,78,23,57,42,19,56,0,0,0,56,209,198,125,228,216,253,234,171,157,191,250,206,119,118,236,95,191,190,163,167,171,43,215,181,127,127,182,115,247,238,236,158,215,94,107,223,248,232,163,123,87,125,241,139,155,94,250,214,183,118,29,218,181,171,39,132,202,113,99,247,171,175,182,63,112,205,53,107,186,218,218,242,33,132,176,253,233,167,15,6,145,99,216,31,14,0,0,0,39,82,85,76,60,26,226,56,74,188,30,226,162,115,142,123,231,220,40,27,55,66,8,97,239,27,111,116,220,255,137,79,172,233,187,27,75,40,76,36,122,193,95,254,229,169,239,249,194,23,230,70,53,53,253,127,151,67,239,188,115,248,7,75,150,172,238,218,189,187,123,162,79,60,106,4,7,0,0,0,99,197,184,31,201,17,162,40,185,173,48,41,71,255,57,247,77,40,90,54,110,132,16,66,195,140,25,245,103,94,122,233,180,245,143,60,178,175,167,163,35,95,56,190,120,36,71,28,199,225,141,239,125,111,235,198,135,31,222,55,224,84,38,232,72,14,129,3,0,0,128,177,164,106,35,71,165,187,165,196,185,92,28,162,168,127,158,210,198,147,78,170,24,57,78,253,205,223,156,254,234,191,255,251,219,191,184,249,230,205,205,153,204,164,139,190,250,213,179,183,252,252,231,251,115,93,93,249,228,167,78,164,200,33,112,0,0,0,48,214,84,93,228,200,44,93,58,253,178,229,203,51,229,38,20,253,207,75,46,121,181,231,208,161,236,105,239,123,95,255,29,83,42,69,142,173,79,61,181,255,181,149,43,119,54,103,50,13,31,90,185,242,220,83,46,184,160,249,244,139,47,110,90,255,224,131,187,39,106,228,16,56,0,0,0,24,139,170,38,114,204,95,186,180,249,210,10,113,227,129,101,203,222,236,58,112,32,183,237,153,103,58,226,124,62,55,156,200,209,190,101,75,247,244,76,166,225,234,187,238,90,52,237,140,51,26,67,8,161,113,214,172,73,19,57,114,8,28,0,0,0,140,85,85,17,57,206,188,252,242,166,51,46,185,100,70,33,90,20,28,124,251,237,195,247,253,238,239,190,222,117,224,64,190,176,173,84,228,104,152,49,163,190,107,223,190,174,237,207,61,119,168,240,174,205,153,76,250,234,149,43,23,53,205,153,211,152,124,207,137,28,57,4,14,0,0,0,198,178,113,31,57,118,60,255,124,71,62,155,237,57,237,162,139,90,10,115,108,244,191,246,236,179,109,7,54,111,238,78,30,150,140,28,33,138,162,151,239,184,99,235,51,95,253,234,142,194,92,30,45,71,226,70,67,169,19,156,168,145,67,224,0,0,0,96,172,27,247,145,99,251,115,207,181,183,100,50,233,150,5,11,166,20,182,213,78,154,148,154,123,229,149,205,187,94,126,249,96,185,200,177,231,181,215,58,158,184,229,150,173,133,183,109,105,109,77,255,206,93,119,45,44,23,55,10,26,103,205,154,116,218,7,62,48,237,205,255,250,175,221,113,79,79,239,45,89,171,60,114,8,28,0,0,0,140,7,227,62,114,172,127,232,161,189,205,173,173,245,205,153,204,148,194,72,142,218,73,147,106,42,69,142,205,63,251,217,193,194,122,115,107,107,250,35,119,221,181,160,84,220,232,220,181,171,107,199,243,207,183,53,205,157,219,127,201,202,228,83,78,105,56,105,241,226,198,117,63,248,193,238,35,103,93,189,145,67,224,0,0,0,96,188,168,134,200,177,47,215,221,157,157,253,254,247,55,23,230,216,168,20,57,10,250,226,70,166,84,220,56,180,115,103,247,143,111,184,97,237,139,223,248,198,246,147,206,59,111,82,243,252,249,147,11,175,53,205,155,55,57,68,81,207,246,167,158,234,15,37,213,26,57,4,14,0,0,0,198,147,113,31,57,182,63,247,92,123,62,155,237,25,110,228,24,70,220,88,179,253,249,231,15,133,16,194,186,7,30,216,115,218,7,62,48,101,234,233,167,247,239,59,227,220,115,167,174,253,254,247,223,233,187,11,75,223,73,85,95,228,16,56,0,0,0,24,111,38,76,228,168,20,55,66,8,97,245,109,183,109,126,227,129,7,218,146,31,179,243,133,23,14,156,251,251,191,127,106,84,83,211,255,190,33,159,239,217,242,248,227,7,6,156,74,149,69,14,129,3,0,0,128,241,168,42,35,71,77,125,125,170,109,211,166,67,219,158,121,166,163,165,194,156,27,5,103,92,124,113,243,190,141,27,15,237,125,253,245,195,133,143,201,117,117,197,231,255,241,31,159,154,170,171,75,21,246,203,103,179,241,218,123,239,221,53,232,84,170,40,114,8,28,0,0,0,140,87,85,21,57,66,8,225,133,127,254,231,205,207,125,237,107,59,90,50,153,97,221,45,37,132,16,230,95,125,245,140,67,187,118,29,222,249,242,203,157,33,132,112,217,215,191,62,119,230,226,197,211,146,251,116,238,217,211,253,250,93,119,237,44,249,125,170,36,114,8,28,0,0,0,140,103,85,19,57,118,190,248,226,129,103,191,250,213,237,45,153,76,250,234,149,43,23,149,155,115,227,129,107,175,125,253,220,79,125,106,102,114,251,220,43,174,104,57,227,226,139,167,158,127,211,77,167,156,113,241,197,45,197,199,189,243,252,243,251,215,61,248,224,190,228,182,154,116,58,21,231,114,85,115,11,217,163,186,245,10,0,0,0,140,33,67,69,142,40,148,254,65,158,92,82,69,207,83,69,207,11,75,77,226,177,220,82,27,66,168,185,172,161,97,246,181,77,77,215,214,69,209,180,16,66,200,199,113,42,14,33,138,251,62,39,46,90,66,28,71,77,153,76,67,165,184,241,240,245,215,191,177,99,245,234,67,33,132,240,103,59,118,92,56,156,63,78,62,155,141,31,188,246,218,87,182,61,253,244,129,190,47,30,95,122,219,109,243,102,156,115,206,148,135,151,45,123,37,219,214,150,141,66,136,163,40,138,163,16,226,40,132,120,83,119,247,234,47,237,217,243,104,8,161,39,132,144,43,177,244,132,16,242,125,207,75,61,38,151,184,111,73,62,47,181,132,18,143,197,207,75,173,135,16,122,255,163,0,0,0,192,120,86,234,7,111,241,15,228,82,63,160,147,75,241,15,241,124,209,243,194,146,252,33,95,110,233,9,33,228,86,117,118,110,187,167,173,237,158,108,28,31,8,33,132,84,20,229,11,1,33,244,61,38,151,16,69,241,121,127,248,135,39,151,138,27,135,247,239,207,62,114,253,245,107,11,113,35,132,16,254,229,148,83,158,219,245,203,95,30,44,222,119,192,31,33,142,195,75,223,250,214,219,91,159,122,170,61,142,227,84,8,33,92,114,219,109,103,45,248,228,39,79,63,105,241,226,233,87,223,123,239,121,117,77,77,117,113,8,81,28,199,253,177,101,110,125,253,5,183,204,152,113,85,232,139,53,37,150,218,48,56,248,36,31,147,75,169,136,84,106,9,37,30,139,159,151,90,15,33,184,68,5,0,0,128,234,49,238,47,87,217,188,106,85,219,236,247,189,111,202,180,162,200,113,120,239,222,236,11,43,86,236,232,187,213,107,255,97,251,222,124,179,115,209,39,63,217,127,185,74,156,203,197,133,9,75,59,118,236,232,122,254,182,219,54,63,127,235,173,59,10,159,117,233,109,183,205,91,116,221,117,167,21,246,111,156,53,107,210,233,23,95,220,180,254,193,7,119,231,186,186,122,111,35,59,78,47,87,49,130,3,0,0,128,106,81,21,35,57,126,244,137,79,188,86,252,37,166,204,158,61,233,163,247,222,187,160,97,230,204,218,40,241,157,166,204,158,93,159,220,111,253,35,143,236,190,255,19,159,120,237,7,75,151,190,250,127,207,63,255,165,255,247,175,255,186,171,239,75,70,151,44,95,62,111,209,117,215,205,46,126,239,25,231,157,55,125,225,167,62,53,51,14,33,53,158,71,114,8,28,0,0,0,84,147,170,136,28,255,118,234,169,79,102,59,58,114,201,47,49,99,225,194,41,31,187,239,190,133,205,173,173,233,40,132,248,164,115,207,157,244,155,95,252,226,233,201,125,166,207,159,223,184,229,201,39,219,183,61,251,108,71,156,136,4,151,45,95,126,230,57,159,250,212,169,131,254,48,113,28,94,253,206,119,222,122,233,223,254,237,157,190,168,49,110,35,135,73,70,1,0,0,168,70,85,49,241,232,149,119,220,209,122,246,71,62,50,43,249,37,178,29,29,185,182,77,155,14,53,205,155,215,88,215,216,56,96,234,137,221,175,189,214,126,247,101,151,13,24,1,114,249,242,229,103,148,139,27,191,186,243,206,205,79,222,124,243,230,226,192,18,133,144,31,111,19,143,154,131,3,0,0,128,106,53,238,231,228,88,255,224,131,123,91,50,153,116,203,130,5,83,10,219,106,234,235,83,141,51,103,166,107,234,234,6,93,149,177,241,209,71,247,108,252,233,79,15,20,214,47,187,245,214,57,231,126,250,211,37,227,198,43,223,254,246,219,79,222,124,243,150,226,115,24,116,42,227,100,78,14,129,3,0,0,128,106,54,254,35,199,67,15,237,109,154,55,175,174,101,209,162,169,81,84,254,35,218,183,110,237,250,233,159,254,233,134,238,246,246,124,8,253,113,227,148,226,253,226,56,14,191,252,246,183,183,60,121,243,205,91,250,222,45,42,62,135,217,239,127,255,212,174,3,7,114,227,105,226,81,129,3,0,0,128,106,55,238,35,199,134,71,30,217,23,231,114,61,51,207,63,127,106,77,125,253,160,145,27,7,183,108,57,252,232,231,62,183,110,239,27,111,116,133,48,116,220,120,226,230,155,183,20,62,166,56,114,156,121,197,21,77,87,220,113,199,185,103,94,113,69,243,120,186,187,138,192,1,0,0,192,68,48,238,35,199,182,103,158,105,223,248,227,31,239,174,111,106,138,106,39,79,174,141,162,40,180,239,216,209,189,225,161,135,118,61,250,217,207,174,111,91,191,190,43,132,16,93,252,229,47,159,126,222,103,62,83,242,178,148,151,239,184,99,235,147,183,220,178,53,20,125,215,66,228,152,123,197,21,211,150,172,88,177,168,126,218,180,186,241,118,11,89,147,140,2,0,0,48,81,84,197,196,163,33,113,135,147,16,122,111,1,91,56,215,133,203,150,53,95,254,245,175,183,70,169,212,128,239,90,136,27,79,244,198,141,16,21,77,220,25,133,16,207,189,226,138,169,87,172,88,177,160,126,218,180,186,228,177,187,127,249,203,253,15,47,91,246,74,182,173,45,59,150,39,30,53,130,3,0,0,128,137,100,220,143,228,8,81,148,220,86,152,149,35,10,33,132,223,254,214,183,90,27,102,204,168,79,238,94,28,55,74,29,119,230,146,37,77,87,172,88,177,32,221,212,52,32,110,132,16,66,87,91,91,246,205,251,239,223,213,211,209,145,47,62,122,44,141,228,16,56,0,0,0,152,104,170,50,114,156,246,222,247,78,249,181,207,127,254,244,226,93,95,254,206,119,182,61,113,243,205,91,139,183,23,142,59,115,201,146,105,87,174,88,145,73,55,53,213,22,239,176,119,237,218,246,7,151,45,123,181,115,231,206,236,160,83,25,99,145,67,224,0,0,0,96,34,170,186,200,209,250,241,143,55,159,113,209,69,205,201,93,222,90,181,106,239,79,255,228,79,54,149,251,208,185,67,199,141,95,29,218,185,179,167,236,247,25,67,145,99,208,204,171,0,0,0,48,1,196,67,108,43,55,223,67,114,41,158,55,34,95,244,188,176,36,231,157,40,183,244,132,16,114,171,58,59,183,221,211,214,118,79,54,142,15,132,16,66,42,138,242,133,249,46,66,223,99,114,9,137,249,48,82,53,53,131,130,192,234,175,127,125,91,185,63,192,220,37,75,166,94,185,98,69,107,185,184,241,163,101,203,94,235,120,231,157,124,223,23,47,158,11,164,119,158,144,196,124,32,115,235,235,47,184,101,198,140,171,66,223,220,34,37,150,218,48,120,126,146,228,99,114,41,53,231,73,169,37,20,30,5,14,0,0,0,38,170,170,138,28,251,214,172,57,84,252,101,178,237,237,185,168,196,247,28,42,110,60,112,205,53,107,58,222,121,39,23,66,8,113,28,167,250,190,248,152,142,28,238,162,2,0,0,192,68,87,53,119,87,249,131,151,94,186,96,242,41,167,164,11,39,190,238,71,63,218,249,232,31,253,209,198,16,142,220,109,165,82,220,216,179,102,77,199,3,203,150,173,41,204,185,49,245,212,83,107,23,223,120,227,204,51,47,191,188,121,202,105,167,53,212,77,153,82,155,239,238,206,29,124,251,237,206,237,207,62,187,239,133,127,250,167,205,135,223,121,167,107,44,220,93,197,28,28,0,0,0,80,37,115,114,164,167,79,79,205,126,239,123,167,23,54,53,103,50,147,167,157,126,122,205,219,79,62,121,48,206,102,227,223,248,179,63,155,245,193,127,248,135,179,234,167,78,45,25,55,238,95,182,108,237,225,222,57,55,162,11,254,252,207,103,93,254,47,255,146,57,227,131,31,108,105,56,233,164,116,77,58,157,138,162,40,164,106,107,83,147,90,90,234,79,94,188,184,105,193,117,215,157,154,59,124,56,187,243,197,23,219,11,231,16,194,137,153,147,195,8,14,0,0,0,232,53,238,71,114,212,212,215,167,62,246,208,67,231,157,116,222,121,211,146,95,34,219,209,145,203,247,244,196,165,70,109,132,112,36,110,116,238,220,217,83,83,95,31,253,246,55,191,57,247,236,15,127,248,228,225,252,209,226,92,46,254,213,157,119,110,122,246,111,255,118,227,137,28,201,97,4,7,0,0,0,28,49,174,71,114,228,115,185,176,229,241,199,247,207,251,240,135,103,36,71,105,212,212,215,167,106,39,77,42,57,15,103,50,110,212,77,158,156,250,232,189,247,102,230,92,114,73,203,48,206,173,247,243,83,169,104,230,175,255,122,115,190,167,39,187,227,217,103,15,246,110,60,254,35,57,4,14,0,0,0,24,104,92,71,142,174,182,182,220,214,199,31,223,119,218,197,23,55,77,106,110,174,175,244,198,187,94,121,229,224,3,215,93,247,70,103,223,173,96,151,222,125,119,235,105,239,123,223,244,82,251,118,238,222,221,189,254,225,135,119,173,127,240,193,157,7,55,109,58,52,237,204,51,27,106,39,77,170,9,33,132,40,138,194,172,11,46,152,190,229,137,39,246,30,218,190,189,187,247,164,142,111,228,16,56,0,0,0,96,176,113,29,57,14,237,222,221,179,230,158,123,118,78,158,61,187,118,250,89,103,53,166,106,107,7,140,222,232,57,124,56,183,246,190,251,118,62,124,195,13,27,187,219,218,114,33,132,112,229,237,183,207,61,235,170,171,102,20,127,112,156,207,135,117,63,252,225,206,7,174,185,102,205,186,31,254,112,223,246,103,158,105,223,244,223,255,189,127,203,227,143,239,59,235,195,31,158,81,215,216,88,19,66,8,169,186,186,212,212,57,115,234,223,252,254,247,119,31,57,235,227,23,57,204,193,1,0,0,0,165,141,251,57,57,226,16,162,169,167,159,158,206,92,115,205,73,211,207,62,187,33,74,165,162,125,27,54,28,94,251,253,239,239,105,219,180,41,27,66,239,221,85,50,31,255,248,244,43,111,191,61,19,165,6,94,197,146,207,102,227,231,110,187,237,237,213,203,151,111,239,219,20,247,125,201,56,10,33,62,239,198,27,103,94,244,247,127,63,191,176,127,174,187,59,191,114,241,226,167,186,219,218,122,162,16,242,199,115,78,14,129,3,0,0,0,202,171,138,200,17,226,56,74,188,222,127,203,216,194,57,127,250,23,191,56,175,249,236,179,27,147,95,50,206,229,226,167,191,252,229,183,94,88,177,98,103,223,142,113,225,165,194,250,228,89,179,106,254,240,229,151,47,76,30,183,234,243,159,255,213,186,251,239,223,211,23,53,142,91,228,40,57,193,8,0,0,0,16,66,56,242,163,190,220,182,56,20,253,240,79,108,43,117,215,143,228,15,243,226,31,235,201,31,242,229,150,158,16,66,110,85,103,231,182,123,218,218,238,201,198,241,129,16,66,72,69,81,190,16,16,66,223,99,114,9,137,192,16,194,192,88,113,214,85,87,77,43,142,27,33,132,240,194,237,183,111,41,196,141,190,47,53,32,138,196,33,68,167,95,116,81,83,241,113,233,150,150,186,68,92,233,13,47,137,192,50,183,190,254,130,91,102,204,184,42,244,197,154,18,75,109,24,28,124,146,143,201,165,63,28,9,28,0,0,0,80,89,85,71,142,179,174,190,186,185,248,203,189,253,248,227,251,158,254,202,87,182,39,183,93,250,143,255,120,198,212,51,207,76,247,173,70,33,132,240,191,111,186,105,118,241,177,109,27,55,118,21,141,32,57,46,145,67,224,0,0,0,128,161,85,109,228,152,122,218,105,133,104,17,66,232,157,119,227,201,191,251,187,45,201,109,31,89,185,114,254,255,250,131,63,56,117,233,221,119,103,146,145,99,221,15,127,184,59,223,211,211,255,119,232,216,190,253,240,91,171,86,29,40,190,68,230,120,68,14,129,3,0,0,0,134,167,58,35,71,109,237,128,121,70,218,54,109,58,180,251,149,87,58,11,235,151,125,237,107,115,230,46,89,210,18,66,8,211,207,58,171,49,25,57,94,184,253,246,157,207,254,159,255,179,169,16,57,214,63,242,200,238,56,142,83,125,95,252,184,70,14,183,137,5,0,0,128,145,25,215,183,144,237,221,16,245,111,155,119,213,85,211,155,231,207,159,92,120,169,227,157,119,186,95,253,143,255,216,89,56,108,255,198,141,135,231,46,89,50,61,221,212,84,27,66,8,147,154,155,235,230,94,126,249,180,141,143,61,214,214,221,214,150,219,254,220,115,29,249,238,238,108,227,201,39,215,253,228,198,27,215,197,185,92,28,66,136,138,207,97,208,169,140,242,45,100,5,14,0,0,0,24,185,170,137,28,141,167,158,90,55,231,146,75,90,10,155,235,167,78,173,89,255,208,67,123,14,239,221,219,19,66,136,14,239,221,155,219,252,179,159,237,31,42,114,188,126,247,221,187,114,221,221,201,207,58,174,145,67,224,0,0,0,128,163,83,21,145,99,223,27,111,28,62,231,211,159,158,89,219,208,80,19,66,8,169,218,218,212,204,197,139,27,214,222,119,223,158,194,104,140,250,169,83,107,22,252,222,239,181,76,106,110,174,43,28,90,28,57,226,92,110,192,199,28,239,200,33,112,0,0,0,192,209,27,247,145,35,215,213,21,215,78,154,20,159,246,91,191,213,127,55,149,41,179,103,79,154,187,100,201,180,61,175,191,222,81,83,87,23,45,253,222,247,22,76,159,55,111,208,173,100,67,28,199,111,61,246,216,190,131,91,183,246,20,130,70,242,99,142,103,228,24,206,31,7,0,0,0,40,111,168,200,17,133,210,163,14,146,75,170,232,121,170,232,121,97,73,78,178,89,110,169,13,33,212,92,214,208,48,251,218,166,166,107,235,162,104,90,8,33,228,227,56,85,152,220,51,12,158,0,52,250,240,119,191,187,224,204,37,75,78,78,126,137,56,151,139,123,58,59,115,117,83,166,212,22,127,193,195,123,247,118,63,114,253,245,111,110,125,230,153,142,196,23,29,48,201,234,128,201,76,163,40,159,220,150,88,122,39,69,77,76,126,186,169,187,123,245,151,246,236,121,52,244,77,164,90,98,233,9,69,147,177,26,193,1,0,0,0,239,222,184,31,201,177,241,199,63,222,119,234,133,23,78,158,122,198,25,13,253,251,164,82,81,77,125,253,160,59,176,150,138,27,133,67,78,212,72,14,129,3,0,0,0,70,199,184,142,28,249,158,158,120,205,189,247,238,110,62,251,236,250,230,5,11,166,68,101,46,250,168,16,55,250,223,246,68,68,14,129,3,0,0,0,70,207,184,142,28,33,132,176,254,225,135,247,181,111,221,122,104,198,57,231,52,166,155,154,234,146,175,29,222,187,183,251,199,55,220,240,198,214,103,158,57,52,212,231,30,239,200,33,112,0,0,0,192,232,26,247,145,99,247,171,175,118,190,242,237,111,239,232,220,189,251,112,84,83,19,66,42,21,117,181,181,245,60,246,249,207,191,185,245,233,167,15,69,165,15,27,244,185,199,51,114,152,100,20,0,0,0,70,95,85,76,60,26,226,56,74,188,30,226,162,115,142,75,127,207,226,47,125,92,38,30,53,130,3,0,0,0,142,141,113,63,146,35,68,81,114,219,160,17,25,99,105,36,135,192,1,0,0,0,199,142,200,81,230,184,196,202,168,68,14,129,3,0,0,0,142,45,145,163,204,113,137,149,119,29,57,4,14,0,0,0,56,246,68,142,50,199,37,86,222,85,228,16,56,0,0,0,224,248,16,57,202,28,151,88,57,234,200,33,112,0,0,0,192,241,35,114,148,57,46,177,114,84,145,67,224,0,0,0,128,227,75,228,40,115,92,98,101,196,145,67,224,0,0,0,128,227,79,228,40,115,92,98,101,68,145,67,224,0,0,0,128,19,67,228,40,115,92,98,101,216,145,67,224,0,0,0,128,19,71,228,40,115,92,98,101,88,145,67,224,0,0,0,128,19,75,228,40,115,92,98,101,200,200,33,112,0,0,0,192,137,39,114,148,57,46,177,82,49,114,8,28,0,0,0,48,54,136,28,101,142,75,172,148,141,28,2,7,0,0,0,140,29,34,71,153,227,18,43,37,35,135,192,1,0,0,0,99,139,200,81,230,184,196,202,160,200,33,112,0,0,0,192,216,35,114,148,57,46,177,50,32,114,8,28,0,0,0,48,54,137,28,3,247,75,238,28,21,71,14,129,3,0,0,0,198,46,145,99,224,126,3,142,137,10,7,70,145,17,28,0,0,0,48,198,137,28,71,94,44,121,76,20,92,162,2,0,0,0,227,129,200,49,196,49,2,7,0,0,0,140,15,34,71,153,99,140,224,0,0,0,128,241,101,194,71,142,104,240,83,35,56,0,0,0,96,28,154,16,145,163,66,232,136,74,157,188,192,1,0,0,0,227,79,181,71,142,114,219,138,55,244,127,71,129,3,0,0,0,198,167,137,28,57,6,141,226,16,56,0,0,0,96,252,154,48,145,163,120,187,192,1,0,0,0,213,101,66,68,142,194,63,81,40,125,18,2,7,0,0,0,140,127,85,21,57,74,204,177,49,228,103,11,28,0,0,0,80,29,170,41,114,68,69,39,58,228,121,9,28,0,0,0,80,61,170,49,114,148,189,155,74,146,192,1,0,0,0,213,165,58,34,71,223,62,201,57,55,74,77,54,90,32,112,0,0,0,64,245,25,211,145,163,54,138,234,163,168,127,222,208,114,111,18,69,81,20,151,26,197,17,149,88,4,14,0,0,0,168,78,99,45,114,132,163,137,28,197,151,172,24,193,1,0,0,0,19,207,184,143,28,189,175,70,131,110,17,107,4,7,0,0,0,76,44,227,54,114,68,33,196,253,219,162,40,238,187,80,37,42,142,27,2,7,0,0,0,76,12,99,49,114,180,23,71,142,111,217,87,208,0,0,32,0,73,68,65,84,232,200,229,40,33,36,110,21,59,96,61,138,74,46,2,7,0,0,0,76,12,99,50,114,116,230,114,111,45,76,167,51,181,81,84,223,123,228,192,67,75,142,230,72,44,133,7,129,3,0,0,0,38,142,177,24,57,58,134,19,57,138,67,71,33,110,164,250,214,5,14,0,0,0,152,88,78,100,228,136,251,182,197,201,125,74,69,142,40,138,10,251,14,136,26,69,147,140,198,133,71,129,3,0,0,0,38,158,19,21,57,10,113,99,208,190,27,123,122,218,15,231,114,111,45,74,167,91,107,162,40,29,133,16,10,243,114,36,14,30,16,58,76,50,10,0,0,0,28,139,200,49,156,207,42,30,193,209,111,67,239,72,142,77,139,210,233,76,77,20,213,247,127,120,223,104,142,228,101,42,81,209,123,8,28,0,0,0,48,113,141,118,228,168,20,60,42,189,214,31,43,250,34,199,91,231,164,211,173,169,222,145,28,113,97,52,71,232,29,209,145,28,197,209,255,92,224,0,0,0,128,137,237,68,68,142,138,177,99,67,239,221,85,54,159,211,123,185,74,125,225,128,254,160,17,69,113,40,220,86,54,138,226,40,138,204,193,1,0,0,0,156,208,145,28,113,169,231,27,122,122,14,118,229,243,155,22,246,94,174,146,46,49,255,198,128,117,129,3,0,0,0,8,225,248,70,142,161,94,143,67,8,241,250,108,182,189,187,47,114,212,246,206,201,81,136,26,253,143,238,162,2,0,0,0,20,27,141,200,49,220,125,138,247,141,19,143,253,207,215,103,179,7,123,242,249,141,11,210,233,5,181,165,46,87,233,139,28,2,7,0,0,0,144,52,156,200,49,212,246,74,175,197,195,216,103,192,126,235,178,217,246,92,62,191,97,65,58,189,160,54,149,170,79,76,52,106,146,81,0,0,0,160,172,161,34,199,104,204,183,49,28,133,209,28,241,155,217,108,123,62,159,223,216,63,39,199,145,137,70,77,50,10,0,0,0,148,117,44,34,199,112,46,89,41,37,14,33,196,111,100,179,7,226,56,222,152,73,167,23,22,205,201,97,4,7,0,0,0,80,214,241,136,28,67,141,234,72,206,205,17,214,102,179,7,82,113,188,62,147,78,47,44,220,93,197,36,163,0,0,0,192,80,70,43,114,12,245,122,169,208,81,124,11,217,56,132,16,214,100,179,7,107,227,120,125,235,145,200,97,4,7,0,0,0,48,164,209,140,28,201,125,202,141,222,136,43,60,198,33,132,248,181,108,246,64,58,132,117,243,235,235,23,213,68,81,90,224,0,0,0,0,134,99,180,35,71,169,253,74,142,216,8,37,2,71,8,33,255,171,238,238,3,147,163,232,205,179,211,233,69,2,7,0,0,0,48,92,199,34,114,132,48,120,36,71,169,208,145,140,28,249,194,227,47,187,187,15,76,13,97,221,209,206,94,10,0,0,0,76,76,195,141,28,81,209,243,16,66,72,37,214,83,137,125,146,75,169,237,197,219,138,63,199,28,28,0,0,0,192,136,141,100,36,71,114,219,80,119,76,41,39,30,106,17,56,0,0,0,128,163,49,146,145,28,149,142,25,46,129,3,0,0,0,56,38,70,43,114,12,53,178,163,120,78,142,226,71,129,3,0,0,0,120,87,142,38,114,36,85,154,96,180,212,182,226,59,170,132,32,112,0,0,0,0,163,96,164,115,114,28,77,236,168,116,203,88,147,140,2,0,0,0,163,226,104,38,30,173,164,84,208,40,126,236,95,220,38,22,0,0,0,24,45,67,69,142,228,250,187,125,28,240,126,70,112,0,0,0,0,163,105,36,145,99,36,74,205,189,209,191,46,112,0,0,0,0,163,109,164,145,163,82,240,40,53,15,71,225,121,127,244,112,137,10,0,0,0,112,44,12,39,114,20,111,27,238,221,87,6,109,51,130,3,0,0,0,56,86,202,13,172,120,55,19,146,150,124,205,8,14,0,0,0,224,88,58,218,200,49,156,245,161,95,0,0,0,0,24,37,67,245,135,225,132,140,138,239,33,112,0,0,0,0,199,195,72,35,199,112,143,11,33,132,72,224,0,0,0,0,142,151,97,197,138,163,121,93,224,0,0,0,0,142,167,145,180,136,97,239,43,112,0,0,0,0,199,219,209,244,8,115,112,0,0,0,0,99,78,20,66,136,19,207,223,205,251,8,28,0,0,0,192,152,240,174,26,69,106,180,206,2,0,0,0,224,93,136,139,30,71,196,8,14,0,0,0,96,172,50,201,40,0,0,0,80,149,180,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,248,255,236,193,129,0,0,0,0,0,144,255,107,35,168,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,180,7,135,4,0,0,0,0,130,254,191,118,134,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,229,178,195,232,0,0,4,106,73,68,65,84,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,126,1,39,8,152,192,71,172,150,42,0,0,0,0,73,69,78,68,174,66,96,130]}],"frame_width":1080,"frame_height":2154} \ No newline at end of file diff --git a/finalproject/ios/.gitignore b/finalproject/ios/.gitignore new file mode 100755 index 0000000..ad322bc --- /dev/null +++ b/finalproject/ios/.gitignore @@ -0,0 +1,34 @@ +**/dgph +*.mode1v3 +*.mode2v3 +*.moved-aside +*.pbxuser +*.perspectivev3 +**/*sync/ +.sconsign.dblite +.tags* +**/.vagrant/ +**/DerivedData/ +Icon? +**/Pods/ +**/.symlinks/ +profile +xcuserdata +**/.generated/ +Flutter/App.framework +Flutter/Flutter.framework +Flutter/Flutter.podspec +Flutter/Generated.xcconfig +Flutter/ephemeral/ +Flutter/app.flx +Flutter/app.zip +Flutter/flutter_assets/ +Flutter/flutter_export_environment.sh +ServiceDefinitions.json +Runner/GeneratedPluginRegistrant.* + +# Exceptions to above rules. +!default.mode1v3 +!default.mode2v3 +!default.pbxuser +!default.perspectivev3 diff --git a/finalproject/ios/Flutter/AppFrameworkInfo.plist b/finalproject/ios/Flutter/AppFrameworkInfo.plist new file mode 100755 index 0000000..0d9747f --- /dev/null +++ b/finalproject/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 11.0 + + diff --git a/finalproject/ios/Flutter/Debug.xcconfig b/finalproject/ios/Flutter/Debug.xcconfig new file mode 100755 index 0000000..0b2d479 --- /dev/null +++ b/finalproject/ios/Flutter/Debug.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/finalproject/ios/Flutter/Release.xcconfig b/finalproject/ios/Flutter/Release.xcconfig new file mode 100755 index 0000000..0b2d479 --- /dev/null +++ b/finalproject/ios/Flutter/Release.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/finalproject/ios/Runner.xcodeproj/project.pbxproj b/finalproject/ios/Runner.xcodeproj/project.pbxproj new file mode 100755 index 0000000..634ad2c --- /dev/null +++ b/finalproject/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,614 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 331C8082294A63A400263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + 331C8082294A63A400263BE5 /* RunnerTests */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C807D294A63A400263BE5 /* Sources */, + 331C807E294A63A400263BE5 /* Frameworks */, + 331C807F294A63A400263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C8086294A63A400263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1430; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 1100; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + 331C8080294A63A400263BE5 /* RunnerTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C807F294A63A400263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C807D294A63A400263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.finalproject; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AE0B7B92F70575B8D7E0D07E /* Pods-RunnerTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.finalproject.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 89B67EB44CE7B6631473024E /* Pods-RunnerTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.finalproject.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 640959BDD8F10B91D80A66BE /* Pods-RunnerTests.profile.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.finalproject.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.finalproject; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.finalproject; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/finalproject/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/finalproject/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100755 index 0000000..c4b79bd --- /dev/null +++ b/finalproject/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/finalproject/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/finalproject/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100755 index 0000000..fc6bf80 --- /dev/null +++ b/finalproject/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/finalproject/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/finalproject/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100755 index 0000000..af0309c --- /dev/null +++ b/finalproject/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/finalproject/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/finalproject/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100755 index 0000000..952169b --- /dev/null +++ b/finalproject/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/finalproject/ios/Runner.xcworkspace/contents.xcworkspacedata b/finalproject/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100755 index 0000000..59c6d39 --- /dev/null +++ b/finalproject/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/finalproject/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/finalproject/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100755 index 0000000..fc6bf80 --- /dev/null +++ b/finalproject/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/finalproject/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/finalproject/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100755 index 0000000..af0309c --- /dev/null +++ b/finalproject/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/finalproject/ios/Runner/AppDelegate.swift b/finalproject/ios/Runner/AppDelegate.swift new file mode 100755 index 0000000..3763683 --- /dev/null +++ b/finalproject/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import UIKit +import Flutter + +@UIApplicationMain +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100755 index 0000000..1950fd8 --- /dev/null +++ b/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@1x.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@1x.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "Icon-App-83.5x83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100755 index 0000000..dc9ada4 Binary files /dev/null and b/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png differ diff --git a/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png new file mode 100755 index 0000000..7353c41 Binary files /dev/null and b/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ diff --git a/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png new file mode 100755 index 0000000..797d452 Binary files /dev/null and b/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ diff --git a/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100755 index 0000000..6ed2d93 Binary files /dev/null and b/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ diff --git a/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png new file mode 100755 index 0000000..4cd7b00 Binary files /dev/null and b/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ diff --git a/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100755 index 0000000..fe73094 Binary files /dev/null and b/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ diff --git a/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png new file mode 100755 index 0000000..321773c Binary files /dev/null and b/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ diff --git a/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png new file mode 100755 index 0000000..797d452 Binary files /dev/null and b/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ diff --git a/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100755 index 0000000..502f463 Binary files /dev/null and b/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ diff --git a/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png new file mode 100755 index 0000000..0ec3034 Binary files /dev/null and b/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ diff --git a/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100755 index 0000000..0ec3034 Binary files /dev/null and b/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ diff --git a/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100755 index 0000000..e9f5fea Binary files /dev/null and b/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ diff --git a/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png new file mode 100755 index 0000000..84ac32a Binary files /dev/null and b/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ diff --git a/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png new file mode 100755 index 0000000..8953cba Binary files /dev/null and b/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ diff --git a/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png new file mode 100755 index 0000000..0467bf1 Binary files /dev/null and b/finalproject/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/finalproject/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/finalproject/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json new file mode 100755 index 0000000..d08a4de --- /dev/null +++ b/finalproject/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "LaunchImage.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/finalproject/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/finalproject/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png new file mode 100755 index 0000000..9da19ea Binary files /dev/null and b/finalproject/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png differ diff --git a/finalproject/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/finalproject/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100755 index 0000000..9da19ea Binary files /dev/null and b/finalproject/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png differ diff --git a/finalproject/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/finalproject/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100755 index 0000000..9da19ea Binary files /dev/null and b/finalproject/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png differ diff --git a/finalproject/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/finalproject/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100755 index 0000000..65a94b5 --- /dev/null +++ b/finalproject/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -0,0 +1,5 @@ +# Launch Screen Assets + +You can customize the launch screen with your own desired assets by replacing the image files in this directory. + +You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. \ No newline at end of file diff --git a/finalproject/ios/Runner/Base.lproj/LaunchScreen.storyboard b/finalproject/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100755 index 0000000..497371e --- /dev/null +++ b/finalproject/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/finalproject/ios/Runner/Base.lproj/Main.storyboard b/finalproject/ios/Runner/Base.lproj/Main.storyboard new file mode 100755 index 0000000..bbb83ca --- /dev/null +++ b/finalproject/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/finalproject/ios/Runner/GoogleService-Info.plist b/finalproject/ios/Runner/GoogleService-Info.plist new file mode 100755 index 0000000..da32922 --- /dev/null +++ b/finalproject/ios/Runner/GoogleService-Info.plist @@ -0,0 +1,30 @@ + + + + + API_KEY + AIzaSyAPdxrWpt2ua6W9wb8m4qygOrTfxt5tWh4 + GCM_SENDER_ID + 612408492430 + PLIST_VERSION + 1 + BUNDLE_ID + com.example.finalproject + PROJECT_ID + fp-467 + STORAGE_BUCKET + fp-467.appspot.com + IS_ADS_ENABLED + + IS_ANALYTICS_ENABLED + + IS_APPINVITE_ENABLED + + IS_GCM_ENABLED + + IS_SIGNIN_ENABLED + + GOOGLE_APP_ID + 1:612408492430:ios:08528b12044fc9dc3b24df + + \ No newline at end of file diff --git a/finalproject/ios/Runner/Info.plist b/finalproject/ios/Runner/Info.plist new file mode 100755 index 0000000..e946678 --- /dev/null +++ b/finalproject/ios/Runner/Info.plist @@ -0,0 +1,49 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Finalproject + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + finalproject + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents + + + diff --git a/finalproject/ios/Runner/Runner-Bridging-Header.h b/finalproject/ios/Runner/Runner-Bridging-Header.h new file mode 100755 index 0000000..fae207f --- /dev/null +++ b/finalproject/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/finalproject/ios/RunnerTests/RunnerTests.swift b/finalproject/ios/RunnerTests/RunnerTests.swift new file mode 100755 index 0000000..4d206de --- /dev/null +++ b/finalproject/ios/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Flutter +import UIKit +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/finalproject/ios/firebase_app_id_file.json b/finalproject/ios/firebase_app_id_file.json new file mode 100755 index 0000000..3dc19c8 --- /dev/null +++ b/finalproject/ios/firebase_app_id_file.json @@ -0,0 +1,7 @@ +{ + "file_generated_by": "FlutterFire CLI", + "purpose": "FirebaseAppID & ProjectID for this Firebase app in this directory", + "GOOGLE_APP_ID": "1:612408492430:ios:08528b12044fc9dc3b24df", + "FIREBASE_PROJECT_ID": "fp-467", + "GCM_SENDER_ID": "612408492430" +} \ No newline at end of file diff --git a/finalproject/lib/carDetail.dart b/finalproject/lib/carDetail.dart new file mode 100755 index 0000000..14cbf34 --- /dev/null +++ b/finalproject/lib/carDetail.dart @@ -0,0 +1,189 @@ +/* + 1. Adjusted paddings with Chatgpt + 2. For code syntax took help from Chatgpt +* +*/ + + +import 'drive.dart'; +import 'package:flutter/material.dart'; +import 'package:firebase_auth/firebase_auth.dart'; +import 'message.dart'; +import 'list.dart'; + +class Cardetails extends StatelessWidget { + const Cardetails({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return MaterialApp( + theme: ThemeData( + colorScheme: ColorScheme.fromSwatch(primarySwatch: Colors.cyan), + ), + home: const MyHomePage(title: 'DriveX'), + ); + } +} + +class MyHomePage extends StatefulWidget { + const MyHomePage({Key? key, required this.title}) : super(key: key); + final String title; + final String coming = ""; + + @override + State createState() => _MyHomePageState(); +} + +class _MyHomePageState extends State { + String input = ""; + bool password = false; + final auth = FirebaseAuth.instance; + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + elevation: 0.0, + leading: IconButton( + onPressed: () { + Navigator.pushReplacement(context, MaterialPageRoute(builder: (context) => CarListPage())); + }, + icon: const Icon(Icons.arrow_back), + ), + title: const Text( + "Honda CR-V", + style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold), + ), + centerTitle: true, + backgroundColor: Colors.white, + ), + body: Padding( + padding: const EdgeInsets.only(top: 20.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Container( + height: 100, + decoration: const BoxDecoration( + color: Colors.white, + image: DecorationImage( + image: AssetImage('assets/drivecar.png'), + // fit: BoxFit.cover, + ), + ), + ), + const SizedBox(height: 10), + const Text( + 'Trip Dates', + textAlign: TextAlign.left, + style: TextStyle(fontSize: 22, fontWeight: FontWeight.bold), + ), + const Divider(color: Colors.black), + Container( + margin: const EdgeInsets.all(9), + child: const Align( + alignment: Alignment.centerLeft, + child: Padding( + padding: EdgeInsets.only(left: 10), + child: Text('Pick Up : 00:00:00', + textAlign: TextAlign.start, + style: + TextStyle(fontSize: 22, fontWeight: FontWeight.bold)), + ), + ), + ), + Container( + margin: const EdgeInsets.all(9), + child: const Align( + alignment: Alignment.centerLeft, + child: Padding( + padding: EdgeInsets.only(left: 10), + child: Text('Drop off : 00:00:00', + textAlign: TextAlign.start, + style: + TextStyle(fontSize: 22, fontWeight: FontWeight.bold)), + ), + ), + ), + Container( + margin: const EdgeInsets.all(9), + child: const Align( + alignment: Alignment.centerLeft, + child: Padding( + padding: EdgeInsets.only(left: 10), + child: Text('Price : \$ 0.0', + textAlign: TextAlign.start, + style: + TextStyle(fontSize: 22, fontWeight: FontWeight.bold)), + ), + ), + ), + const Divider(color: Colors.black), + const Text( + 'Hosted By : ', + textAlign: TextAlign.left, + style: TextStyle(fontSize: 22, fontWeight: FontWeight.bold), + ), + Row( + children: [ + Container( + child: const CircleAvatar( + radius: 40, + backgroundImage: AssetImage('assets/profile.jpg'), + ), + ), + const SizedBox(width: 10), + const Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + ' Charan ', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 22, fontWeight: FontWeight.bold), + ), + Text( + ' 20 trips . Joined Aug 2021 ', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 12, fontWeight: FontWeight.bold), + ), + ], + ), + ), + IconButton( + icon: Image.asset('assets/inbox.png'), + iconSize: 50, + onPressed: () { + Navigator.push(context, + MaterialPageRoute(builder: (context) { + return const ChatDetailPage(); + })); + }, + ) + ], + ), + const Text( + 'Total Amount : ', + textAlign: TextAlign.left, + style: TextStyle(fontSize: 22, fontWeight: FontWeight.bold), + ), + const SizedBox(height: 10), + ElevatedButton( + onPressed: () async { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => const Drivepage(), + ), + ); + }, + child: const Text('BOOK'), + ), + ], + ), + ), + ); + } +} \ No newline at end of file diff --git a/finalproject/lib/drawer.dart b/finalproject/lib/drawer.dart new file mode 100755 index 0000000..0bf895d --- /dev/null +++ b/finalproject/lib/drawer.dart @@ -0,0 +1,38 @@ +import 'package:flutter/material.dart'; +import 'package:finalproject/first.dart'; +import 'package:finalproject/second.dart'; + + +Widget getDrawer(context) { + return Drawer( + // Add a ListView to the drawer. This ensures the user can scroll + // through the options in the drawer if there isn't enough vertical + // space to fit everything. + child: ListView( + // Important: Remove any padding from the ListView. + padding: EdgeInsets.zero, + children: [ + const DrawerHeader( + decoration: BoxDecoration( + color: Colors.blue, + ), + child: Text('Tinder for Cats'), + ), + ListTile( + title: const Text('Profile'), + onTap: () { + // Update the state of the app. + Navigator.popAndPushNamed(context, '/'); + }, + ), + ListTile( + title: const Text('Matches'), + onTap: () { + // Update the state of the app. + Navigator.popAndPushNamed(context, '/second'); + }, + ), + ], + ), + ); +} \ No newline at end of file diff --git a/finalproject/lib/drive.dart b/finalproject/lib/drive.dart new file mode 100755 index 0000000..3d411d5 --- /dev/null +++ b/finalproject/lib/drive.dart @@ -0,0 +1,708 @@ +// import 'dart:async'; +// import 'dart:io'; +// +// import 'package:flutter/material.dart'; +// import 'package:image_picker/image_picker.dart'; +// import 'package:cloud_firestore/cloud_firestore.dart'; +// import 'trips.dart'; +// +// class Drivepage extends StatefulWidget { +// const Drivepage({Key? key}) : super(key: key); +// +// @override +// _DrivepageState createState() => _DrivepageState(); +// } +// +// class _DrivepageState extends State { +// int startImageCounter = 0; +// int endImageCounter = 0; +// bool tripEnded = false; +// +// final List _startTripImages = List.filled(4, null); +// final List _endTripImages = List.filled(4, null); +// +// Future _startTripImagePicker(int index) async { +// final ImagePicker spicker = ImagePicker(); +// // Capture a photo. +// try { +// final XFile? sphoto = await spicker.pickImage(source: ImageSource.camera); +// print('Image path before conversion: ${sphoto?.path}'); +// if (sphoto != null) { +// setState(() { +// _startTripImages[index] = sphoto; +// startImageCounter++; +// }); +// } +// } catch (e) { +// print('Error during image capture: $e'); +// } +// } +// +// Future _endTripImagePicker(int index) async { +// final ImagePicker epicker = ImagePicker(); +// // Capture a photo. +// try { +// final XFile? ephoto = await epicker.pickImage(source: ImageSource.camera); +// if (ephoto != null) { +// setState(() { +// _endTripImages[index] = ephoto; +// endImageCounter++; +// }); +// } +// } catch (e) { +// print('Error during image capture: $e'); +// } +// } +// +// Future savingpictures(String firstName, String email, +// List startImagePaths, List endImagePaths) async { +// try { +// final CollectionReference photosCollection = +// FirebaseFirestore.instance.collection('photos2'); +// +// Map tripImages = { +// 'first name': firstName, +// 'email': email, +// 'tripType': 'start', +// 'startImagePaths': startImagePaths, +// 'tripType': 'end', +// 'endImagePaths': endImagePaths, +// }; +// +// await photosCollection.add(tripImages); +// +// setState(() { +// startImageCounter = 0; +// endImageCounter = 0; +// _startTripImages.fillRange(0, 4, null); +// _endTripImages.fillRange(0, 4, null); +// }); +// +// print('Images saved to Firebase successfully!'); +// } catch (e) { +// print('Error saving images to Firebase: $e'); +// } +// } +// +// String getImageText(int index) { +// switch (index) { +// case 0: +// return 'Front'; +// case 1: +// return 'Left'; +// case 2: +// return 'Right'; +// case 3: +// return 'Rear'; +// default: +// return ''; +// } +// } +// +// @override +// void initState() { +// super.initState(); +// } +// +// @override +// void dispose() { +// super.dispose(); +// } +// +// @override +// Widget build(BuildContext context) { +// return Scaffold( +// appBar: AppBar( +// title: const Text( +// "Drive", +// style: TextStyle( +// fontSize: 24, fontWeight: FontWeight.bold, color: Colors.black), +// ), +// centerTitle: true, +// backgroundColor: Colors.white, +// ), +// body: Column( +// crossAxisAlignment: CrossAxisAlignment.stretch, +// children: [ +// Container( +// height: 100, +// decoration: const BoxDecoration( +// color: Colors.white, +// image: DecorationImage( +// image: AssetImage('assets/drivecar.png'), +// // fit: BoxFit.cover, +// ), +// ), +// ), +// const SizedBox(height: 10), +// const Text( +// 'Honda CRV ', +// textAlign: TextAlign.center, +// style: TextStyle(fontSize: 22, fontWeight: FontWeight.bold), +// ), +// const SizedBox(height: 10), +// Row( +// children: [ +// Container( +// margin: const EdgeInsets.all(9), +// child: const Align( +// alignment: Alignment.centerLeft, +// child: Padding( +// padding: EdgeInsets.only(left: 10), +// child: Text('Start Trip: ', +// textAlign: TextAlign.start, +// style: TextStyle( +// fontSize: 22, fontWeight: FontWeight.bold)), +// ), +// ), +// ), +// Transform.scale( +// scale: 0.5, +// child: IconButton( +// icon: Image.asset('assets/camera.png'), +// iconSize: 22, +// onPressed: () { +// _startTripImagePicker(startImageCounter); +// }, +// ), +// ), +// ], +// ), +// Container( +// margin: const EdgeInsets.all(9), +// child: const Align( +// alignment: Alignment.centerLeft, +// child: Padding( +// padding: EdgeInsets.only(left: 10), +// child: Text('Images Added', +// textAlign: TextAlign.start, +// style: +// TextStyle(fontSize: 15, fontWeight: FontWeight.bold)), +// ), +// ), +// ), +// Container( +// margin: const EdgeInsets.all(3), +// child: const Align( +// alignment: Alignment.centerLeft, +// child: Padding( +// padding: EdgeInsets.only(left: 10), +// child: Text('All sides of the car', +// textAlign: TextAlign.start, +// style: +// TextStyle(fontSize: 15, fontWeight: FontWeight.bold)), +// ), +// ), +// ), +// Padding( +// padding: const EdgeInsets.all(8.0), +// child: Row( +// mainAxisAlignment: MainAxisAlignment.spaceEvenly, +// children: List.generate(4, (index) { +// return Column( +// children: [ +// Container( +// width: 70, +// height: 70, +// decoration: BoxDecoration( +// border: Border.all(color: Colors.white), +// borderRadius: BorderRadius.circular(8), +// ), +// child: _startTripImages[index] != null +// ? Image.file(File(_startTripImages[index]!.path)) +// : const Placeholder(), +// ), +// const SizedBox(height: 8), +// Text( +// getImageText(index), +// style: const TextStyle(fontSize: 12), +// ), +// ], +// ); +// }), +// ), +// ), +// const SizedBox(height: 10), +// Row( +// children: [ +// Container( +// margin: const EdgeInsets.all(9), +// child: const Align( +// alignment: Alignment.centerLeft, +// child: Padding( +// padding: EdgeInsets.only(left: 10), +// child: Text('End Trip: ', +// textAlign: TextAlign.start, +// style: TextStyle( +// fontSize: 22, fontWeight: FontWeight.bold)), +// ), +// ), +// ), +// Transform.scale( +// scale: 1.5, +// child: IconButton( +// icon: Image.asset('assets/camera.png'), +// iconSize: 22, +// onPressed: () { +// if (startImageCounter == 4) { +// _endTripImagePicker(endImageCounter); +// } +// }, +// ), +// ), +// ], +// ), +// Container( +// margin: const EdgeInsets.all(9), +// child: const Align( +// alignment: Alignment.centerLeft, +// child: Padding( +// padding: EdgeInsets.only(left: 10), +// child: Text('Images Added', +// textAlign: TextAlign.start, +// style: +// TextStyle(fontSize: 15, fontWeight: FontWeight.bold)), +// ), +// ), +// ), +// Container( +// margin: const EdgeInsets.all(3), +// child: const Align( +// alignment: Alignment.centerLeft, +// child: Padding( +// padding: EdgeInsets.only(left: 10), +// child: Text('All sides of the car', +// textAlign: TextAlign.start, +// style: +// TextStyle(fontSize: 15, fontWeight: FontWeight.bold)), +// ), +// ), +// ), +// Padding( +// padding: const EdgeInsets.all(8.0), +// child: Row( +// mainAxisAlignment: MainAxisAlignment.spaceEvenly, +// children: List.generate(4, (index) { +// return Column( +// children: [ +// Container( +// width: 70, +// height: 70, +// decoration: BoxDecoration( +// border: Border.all(color: Colors.white), +// borderRadius: BorderRadius.circular(8), +// ), +// child: _endTripImages[index] != null +// ? Image.file(File(_endTripImages[index]!.path)) +// : const Placeholder(), +// ), +// const SizedBox(height: 8), +// Text( +// getImageText(index), +// style: const TextStyle(fontSize: 12), +// ), +// ], +// ); +// }), +// ), +// ), +// ElevatedButton( +// onPressed: endImageCounter == 4 +// ? () async { +// List startImagePaths = +// _startTripImages.map((image) => image?.path).toList(); +// List endImagePaths = +// _endTripImages.map((image) => image?.path).toList(); +// savingpictures( +// 'firstName', 'email', startImagePaths, endImagePaths); +// +// await showDialog( +// context: context, +// builder: (BuildContext context) { +// return const AlertDialog( +// title: Text('Your trip has been ended'), +// content: Text('Hope you had a safe trip'), +// ); +// }, +// ); +// +// await Future.delayed(Duration(seconds: 3)); +// +// Navigator.push( +// context, +// MaterialPageRoute( +// builder: (context) => const Tripspage(), +// ), +// ); +// } +// : null, +// child: const Text('End Trip'), +// ), +// ], +// ), +// ); +// } +// } + +/* + 1. Adjusted paddings with help of Chatgpt + 2. Took many references from stackoverflow and github accounts to understand how two cameras can work in one page + and also how can we add 4 image boxes and name each box + 3. Referred from 467 -MW class imagepicker() + 4. For code syntax took help from Chatgpt +* +*/ + +import 'dart:async'; +import 'dart:io'; +import 'package:flutter/material.dart'; +import 'package:image_picker/image_picker.dart'; +import 'package:cloud_firestore/cloud_firestore.dart'; +import 'trips.dart'; + +class Drivepage extends StatefulWidget { + const Drivepage({Key? key}) : super(key: key); + + @override + _DrivepageState createState() => _DrivepageState(); +} + +class _DrivepageState extends State { + int startImageCounter = 0; + int endImageCounter = 0; + bool tripEnded = false; + + final List _startTripImages = List.filled(4, null); + final List _endTripImages = List.filled(4, null); + + Future _startTripImagePicker(int index) async { + final ImagePicker spicker = ImagePicker(); +// Capture a photo. + try { + final XFile? sphoto = await spicker.pickImage(source: ImageSource.camera); + print('Image path before conversion: ${sphoto?.path}'); + if (sphoto != null) { + setState(() { + _startTripImages[index] = sphoto; + startImageCounter++; + }); + } + } catch (e) { + print('Error during image capture: $e'); + } + } + + Future _endTripImagePicker(int index) async { + final ImagePicker epicker = ImagePicker(); +// Capture a photo. + try { + final XFile? ephoto = await epicker.pickImage(source: ImageSource.camera); + if (ephoto != null) { + setState(() { + _endTripImages[index] = ephoto; + endImageCounter++; + }); + } + } catch (e) { + print('Error during image capture: $e'); + } + } + + Future savingpictures(String firstName, String email, + List startImagePaths, List endImagePaths) async { + try { + final CollectionReference photosCollection = FirebaseFirestore.instance.collection('photos2'); + + Map tripImages = { + 'first name': firstName, + 'email': email, + 'tripType': 'start', + 'startImagePaths': startImagePaths, + 'tripType': 'end', + 'endImagePaths': endImagePaths, + }; + + await photosCollection.add(tripImages); + + setState(() { + startImageCounter = 0; + endImageCounter = 0; + _startTripImages.fillRange(0, 4, null); + _endTripImages.fillRange(0, 4, null); + }); + + print('Images saved to Firebase successfully!'); + } catch (e) { + print('Error saving images to Firebase: $e'); + } + } + + void callTrips(){ + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => const Tripspage(), + ), + ); + } + + /*Took help from OpenAI to how to write this function */ + String getImageText(int index) { + switch (index) { + case 0: + return 'Front'; + case 1: + return 'Left'; + case 2: + return 'Right'; + case 3: + return 'Rear'; + default: + return ''; + } + } + + @override + void initState() { + super.initState(); + } + + @override + void dispose() { + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: const Text( + "Drive", + style: TextStyle( + fontSize: 24, fontWeight: FontWeight.bold, color: Colors.black), + ), + centerTitle: true, + backgroundColor: Colors.white, + ), + body: SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + Container( + height: 100, + decoration: const BoxDecoration( + color: Colors.white, + image: DecorationImage( + image: AssetImage('assets/drivecar.png'), + // fit: BoxFit.cover, + ), + ), + ), + const SizedBox(height: 10), + const Text( + 'Honda CRV ', + textAlign: TextAlign.center, + style: TextStyle(fontSize: 22, fontWeight: FontWeight.bold), + ), + Row( + children: [ + Container( + margin: const EdgeInsets.all(9), + child: const Align( + alignment: Alignment.centerLeft, + child: Padding( + padding: EdgeInsets.only(left: 10), + child: Text('Start Trip: ', + textAlign: TextAlign.start, + style: TextStyle( + fontSize: 22, fontWeight: FontWeight.bold)), + ), + ), + ), + // Transform.scale( + // scale: 0.1, + Padding( + padding: const EdgeInsets.all(9), + child: IconButton( + icon: + Image.asset('assets/camera.png', width: 50, height: 50), + // iconSize: 22, + onPressed: () { + _startTripImagePicker(startImageCounter); + }, + ), + ), + ], + ), + Container( + margin: const EdgeInsets.all(9), + child: const Align( + alignment: Alignment.centerLeft, + child: Padding( + padding: EdgeInsets.only(left: 10), + child: Text('Images Added', + textAlign: TextAlign.start, + style: + TextStyle(fontSize: 15, fontWeight: FontWeight.bold)), + ), + ), + ), + Container( + margin: const EdgeInsets.all(3), + child: const Align( + alignment: Alignment.centerLeft, + child: Padding( + padding: EdgeInsets.only(left: 10), + child: Text('All sides of the car', + textAlign: TextAlign.start, + style: + TextStyle(fontSize: 15, fontWeight: FontWeight.bold)), + ), + ), + ), + Padding( + padding: const EdgeInsets.all(8.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: List.generate(4, (index) { + return Column( + children: [ + Container( + width: 70, + height: 70, + decoration: BoxDecoration( + border: Border.all(color: Colors.white), + borderRadius: BorderRadius.circular(8), + ), + child: _startTripImages[index] != null + ? Image.file(File(_startTripImages[index]!.path)) + : const Placeholder(), + ), + const SizedBox(height: 8), + Text( + getImageText(index), + style: const TextStyle(fontSize: 12), + ), + ], + ); + }), + ), + ), + const SizedBox(height: 10), + Row( + children: [ + Container( + margin: const EdgeInsets.all(9), + child: const Align( + alignment: Alignment.centerLeft, + child: Padding( + padding: EdgeInsets.only(left: 10), + child: Text('End Trip: ', + textAlign: TextAlign.start, + style: TextStyle( + fontSize: 22, fontWeight: FontWeight.bold)), + ), + ), + ), + Padding( + padding: const EdgeInsets.all(9), + child: IconButton( + icon: + Image.asset('assets/camera.png', width: 50, height: 50), + // iconSize: 22, + onPressed: () { + if (startImageCounter == 4) { + _endTripImagePicker(endImageCounter); + } + }, + ), + ), + ], + ), + Container( + margin: const EdgeInsets.all(9), + child: const Align( + alignment: Alignment.centerLeft, + child: Padding( + padding: EdgeInsets.only(left: 10), + child: Text('Images Added', + textAlign: TextAlign.start, + style: + TextStyle(fontSize: 15, fontWeight: FontWeight.bold)), + ), + ), + ), + Container( + margin: const EdgeInsets.all(3), + child: const Align( + alignment: Alignment.centerLeft, + child: Padding( + padding: EdgeInsets.only(left: 10), + child: Text('All sides of the car', + textAlign: TextAlign.start, + style: + TextStyle(fontSize: 15, fontWeight: FontWeight.bold)), + ), + ), + ), + Padding( + padding: const EdgeInsets.all(8.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: List.generate(4, (index) { + return Column( + children: [ + Container( + width: 70, + height: 70, + decoration: BoxDecoration( + border: Border.all(color: Colors.white), + borderRadius: BorderRadius.circular(8), + ), + child: _endTripImages[index] != null + ? Image.file(File(_endTripImages[index]!.path)) + : const Placeholder(), + ), + const SizedBox(height: 8), + Text( + getImageText(index), + style: const TextStyle(fontSize: 12), + ), + ], + ); + }), + ), + ), + ElevatedButton( + onPressed: endImageCounter == 4 + ? () async { + List startImagePaths = + _startTripImages.map((image) => image?.path).toList(); + List endImagePaths = + _endTripImages.map((image) => image?.path).toList(); + savingpictures( + 'firstName', 'email', startImagePaths, endImagePaths); + + await showDialog( + context: context, + builder: (BuildContext context) { + return const AlertDialog( + title: Text('Your trip has been ended'), + content: Text('Hope you had a safe trip'), + ); + }, + ); + + await Future.delayed(Duration(seconds: 3)); + callTrips(); + } + : null, + child: const Text('End Trip'), + ), + ], + ), + ), + ); + } +} + diff --git a/finalproject/lib/firebase_options.dart b/finalproject/lib/firebase_options.dart new file mode 100755 index 0000000..320502b --- /dev/null +++ b/finalproject/lib/firebase_options.dart @@ -0,0 +1,81 @@ +// File generated by FlutterFire CLI. +// ignore_for_file: lines_longer_than_80_chars, avoid_classes_with_only_static_members +import 'package:firebase_core/firebase_core.dart' show FirebaseOptions; +import 'package:flutter/foundation.dart' + show defaultTargetPlatform, kIsWeb, TargetPlatform; + +/// Default [FirebaseOptions] for use with your Firebase apps. +/// +/// Example: +/// ```dart +/// import 'firebase_options.dart'; +/// // ... +/// await Firebase.initializeApp( +/// options: DefaultFirebaseOptions.currentPlatform, +/// ); +/// ``` +class DefaultFirebaseOptions { + static FirebaseOptions get currentPlatform { + if (kIsWeb) { + return web; + } + switch (defaultTargetPlatform) { + case TargetPlatform.android: + return android; + case TargetPlatform.iOS: + return ios; + case TargetPlatform.macOS: + return macos; + case TargetPlatform.windows: + throw UnsupportedError( + 'DefaultFirebaseOptions have not been configured for windows - ' + 'you can reconfigure this by running the FlutterFire CLI again.', + ); + case TargetPlatform.linux: + throw UnsupportedError( + 'DefaultFirebaseOptions have not been configured for linux - ' + 'you can reconfigure this by running the FlutterFire CLI again.', + ); + default: + throw UnsupportedError( + 'DefaultFirebaseOptions are not supported for this platform.', + ); + } + } + + static const FirebaseOptions web = FirebaseOptions( + apiKey: 'AIzaSyCzbUyvnC-eeDSrerO01rzeD_vwafTUsRc', + appId: '1:612408492430:web:a0ac470c63254bc43b24df', + messagingSenderId: '612408492430', + projectId: 'fp-467', + authDomain: 'fp-467.firebaseapp.com', + storageBucket: 'fp-467.appspot.com', + measurementId: 'G-TH4NDSB0JQ', + ); + + static const FirebaseOptions android = FirebaseOptions( + apiKey: 'AIzaSyAI-JDZ_oM6NcMrpNLYWTqphTRAR10eJGY', + appId: '1:612408492430:android:bcb82a7602e5fd243b24df', + messagingSenderId: '612408492430', + projectId: 'fp-467', + storageBucket: 'fp-467.appspot.com', + ); + + static const FirebaseOptions ios = FirebaseOptions( + apiKey: 'AIzaSyAPdxrWpt2ua6W9wb8m4qygOrTfxt5tWh4', + appId: '1:612408492430:ios:08528b12044fc9dc3b24df', + messagingSenderId: '612408492430', + projectId: 'fp-467', + storageBucket: 'fp-467.appspot.com', + iosBundleId: 'com.example.finalproject', + ); + + static const FirebaseOptions macos = FirebaseOptions( + apiKey: 'AIzaSyAPdxrWpt2ua6W9wb8m4qygOrTfxt5tWh4', + appId: '1:612408492430:ios:4a064360bbb68e453b24df', + messagingSenderId: '612408492430', + projectId: 'fp-467', + storageBucket: 'fp-467.appspot.com', + iosBundleId: 'com.example.finalproject.RunnerTests', + ); +} diff --git a/finalproject/lib/first.dart b/finalproject/lib/first.dart new file mode 100755 index 0000000..e69de29 diff --git a/finalproject/lib/list.dart b/finalproject/lib/list.dart new file mode 100755 index 0000000..16ed386 --- /dev/null +++ b/finalproject/lib/list.dart @@ -0,0 +1,72 @@ +import 'carDetail.dart'; +import 'package:flutter/material.dart'; + +class CarListPage extends StatelessWidget { + const CarListPage({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return MaterialApp( + theme: ThemeData( + colorScheme: ColorScheme.fromSwatch(primarySwatch: Colors.cyan), + ), + home: MyHomePage(title: 'DriveX'), + ); + } +} + +class MyHomePage extends StatefulWidget { + final String title; + + MyHomePage({Key? key, required this.title}) : super(key: key); + + @override + _MyHomePageState createState() => _MyHomePageState(); +} + +class _MyHomePageState extends State { + final List cars = ['Toyota Camry','Honda Accord',]; + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: const Text( + "Cars List", + style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold), + ), + centerTitle: true, + backgroundColor: Colors.white, + ), + body: ListView.builder( + itemCount: cars.length, + itemBuilder: (context, index) { + return ListTile( + title: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Image.asset( + 'assets/drivecar.png', + height: 150, + fit: BoxFit.cover, + ), + SizedBox(height: 8), + Text( + cars[index], + style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold), + ), + ], + ), + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => Cardetails(), + ), + ); + }, + ); + }, + ), + ); + } +} diff --git a/finalproject/lib/login.dart b/finalproject/lib/login.dart new file mode 100755 index 0000000..c3d3a9a --- /dev/null +++ b/finalproject/lib/login.dart @@ -0,0 +1,353 @@ +/* + 1. Adjusted paddings with Chatgpt + 2. Referred 467-MW class for google sign in function + 3. For code syntax took help from Chatgpt +* +*/ +import 'dart:async'; +import 'package:finalproject/firebase_options.dart'; +import 'package:finalproject/signup.dart'; +import 'package:firebase_core/firebase_core.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:google_sign_in/google_sign_in.dart'; +import 'package:firebase_auth/firebase_auth.dart'; +import 'package:geolocator/geolocator.dart'; +import 'package:google_maps_flutter/google_maps_flutter.dart'; +import 'tabs.dart'; + +// ignore: camel_case_types +class login extends StatelessWidget { + const login({Key? key}):super(key: key); + + @override + Widget build(BuildContext context) { + return MaterialApp( + theme: ThemeData( + colorScheme: ColorScheme.fromSwatch(primarySwatch: Colors.cyan), + ), + home: const MyHomePage(title: 'DriveX'), + ); + } +} + +class MyHomePage extends StatefulWidget { + const MyHomePage({Key? key, required this.title}) : super(key: key); + final String title; + final String coming = ""; + + @override + State createState() => _MyHomePageState(); +} + +class _MyHomePageState extends State { + final GlobalKey _formKey = GlobalKey(); + final TextEditingController _econtroller = TextEditingController(), _pcontroller = TextEditingController(); + String input = ""; + bool password = true, _initialized = false, _isLoading = true; + GoogleSignInAccount? googleUser; + late String _email, _password; + final auth = FirebaseAuth.instance; + late LatLng _currentPosition; + + Future getLocation() async { + LocationPermission permission = await Geolocator.checkPermission(); + if (permission == LocationPermission.denied) { + permission = await Geolocator.requestPermission(); + if(permission == LocationPermission.denied) { + return; + } + } + + Position position = await Geolocator.getCurrentPosition( + desiredAccuracy: LocationAccuracy.high, + ); + + double lat = position.latitude; + double long = position.longitude; + LatLng location = LatLng(lat, long); + + setState(() { + _currentPosition = location; + _isLoading = false; + }); + if (kDebugMode) { + print("location codes: $_currentPosition"); + } + } + + String? _textValidator(String? value) { + if (value == null || value.isEmpty) { + return "Please enter some text"; + } + if (value.trim().isEmpty) { + return "Field left blank with white space"; + } + if (value.contains("@")) { + return "Do not use @"; + } + return null; + } + + //modifed through GPT + Future initializeDefault() async { + FirebaseApp app = await Firebase.initializeApp( + options: DefaultFirebaseOptions.currentPlatform, + ); + _initialized = true; + if (kDebugMode) { + print("Initialized default Firebase app $app"); + } + } + + Future signInWithGoogle() async { + if (!_initialized) { + await initializeDefault(); + } + // Trigger the authentication flow + googleUser = await GoogleSignIn().signIn(); + setState(() { + Navigator.pushReplacement(context, MaterialPageRoute(builder: (context) => HomePage(loaded:_isLoading, position: _currentPosition,))); + }); + + + + if (kDebugMode) { + print(googleUser!.displayName); + } + + // Obtain the auth details from the request + final GoogleSignInAuthentication? googleAuth = + await googleUser?.authentication; + + // Create a new credential + final credential = GoogleAuthProvider.credential( + accessToken: googleAuth?.accessToken, + idToken: googleAuth?.idToken, + ); + // Once signed in, return the UserCredential + return await FirebaseAuth.instance.signInWithCredential(credential); + } + + @override + void initState() { + super.initState(); + getLocation(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + + body: Center( + child: Container( + height: 500.0, + width: 400.0, + margin: const EdgeInsets.all(10.0), + decoration: BoxDecoration(color: Colors.grey[200], + borderRadius: BorderRadius.circular(20),), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: getBodyWidgetList(), + ), + ), + ), + ); + } + + List getBodyWidgetList() { + return [ + Form( + key: _formKey, + child: SingleChildScrollView( + child: Column( + children: [ + Container( + margin: const EdgeInsets.all(11), + alignment:Alignment.topLeft, + child: const Text("Login",style:TextStyle(fontWeight: FontWeight.bold,fontSize: 25),textAlign: TextAlign.left, + ),), + //email + Container ( + margin: const EdgeInsets.all(9), + child: const Align( + alignment: Alignment.centerLeft, + child: Padding( + padding: EdgeInsets.only(left: 10), + child: Text('E-mail:',style:TextStyle(fontWeight: FontWeight.bold,fontSize: 20))))), + SizedBox( + width : 350, + child: TextFormField( + controller: _econtroller, + validator: (String? value){if(value != null && (value.contains('@gmail.com') || value.contains('@outlook.com'))){ + if(value.contains(',')){return 'invalid email id';}else{return null;}} + else{return (value != null && (!value.contains('@gmail.com') || + !value.contains('@outlook.com'))) ? 'invalid email id' : null;}}, + decoration: const InputDecoration( + border: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(15.0)), + ), + hintText: "Enter email id", + ), + ), + ), + const Text(" "), + //password + Container( + margin: const EdgeInsets.all(9), + child : const Align( + alignment: Alignment.centerLeft, + child: Padding( + padding: EdgeInsets.only(left: 10), + child: Text('Password:',style:TextStyle(fontWeight: FontWeight.bold,fontSize: 20)), + ))), + SizedBox( + width : 350, + child: TextFormField( + controller: _pcontroller, + validator: _textValidator, + obscureText: password, + obscuringCharacter:'*', + decoration: InputDecoration( + border:const OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(15.0)), + ), + hintText: "Enter password", + suffixIcon: IconButton( + icon: Icon(password ? Icons.visibility : Icons.visibility_off,), + onPressed: (){ + setState((){ + password = !password; + }); + }, + ), + ), + ), + ), + Container( + margin: const EdgeInsets.all(9), + child: const Align( + alignment: Alignment.centerRight, + child :Padding( + padding: EdgeInsets.only(right: 15), + child: Text('Forgot Password?',style:TextStyle(fontWeight: FontWeight.bold))))), + const Text(" "), + ElevatedButton( + child: const Text('Login', style: TextStyle(color: Colors.white)), + onPressed: () async{ + _email = _econtroller.text; + _password = _pcontroller.text; + try { + await auth.signInWithEmailAndPassword(email: _email, password: _password); + setState(() { + Navigator.pushReplacement( + context, + // https://docs.flutter.dev/cookbook/animation/page-route-animation + PageRouteBuilder( + pageBuilder: (context, animation, secondaryAnimation) { + return HomePage(loaded: _isLoading, position: _currentPosition); // Default to FirstRoute if the route is unknown. + }, + transitionsBuilder: (context, animation, secondaryAnimation, child) { + const Offset begin = Offset(0.0, 0.0); + const Offset end = Offset(0.0,0.0); + // const Offset end = Offset(0.0,0.0); + const Curve curve = Curves.ease; + var tween = Tween(begin: begin, end: end).chain(CurveTween(curve: curve)); + var offsetAnimation = animation.drive(tween); + return SlideTransition( + position: offsetAnimation, + child: child, + ); + }, + ), + ); + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar(content: Text('Logged In Successfully'), + duration : Duration(seconds : 2), + ), + ); + }); + } + catch(e) + { + if(e is FirebaseAuthException){ + if(e.code == 'user-not-found'){ + setState(() { + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar(content: Text('invalid-login-credentials'), + duration : Duration(seconds : 2), + ), + ); + }); + + }else if(e.code == 'wrong-password') { + setState(() { + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar(content: Text('Invalid password'), + duration : Duration(seconds : 2), + ), + ); + }); + } + } + // print('Error creating user: $e'); + } + _econtroller.clear(); + _pcontroller.clear(); + }, + ), + const Text(" "), + const Padding( + padding: EdgeInsets.symmetric(horizontal: 25.0), + child : Row( + children: [ + Expanded(child: Divider(thickness: 0.5,color: Colors.grey), + ), + Text('Or continue With'), + Expanded(child: Divider(thickness: 0.5,color: Colors.grey),), + ], + ), + ), + const Text(" "), + IconButton( + icon: Image.asset('assets/google.png'), + iconSize: 40, + onPressed: () { + print('logged in'); + signInWithGoogle(); + + }, + ), + ], + ), + ), + ), + GestureDetector( + onTap: (){ + Navigator.push( + context, + //https://docs.flutter.dev/cookbook/animation/page-route-animation + PageRouteBuilder( + pageBuilder: (context, animation, secondaryAnimation) { + return const SignUpPage(); // Default to FirstRoute if the route is unknown. + }, + transitionsBuilder: (context, animation, secondaryAnimation, child) { + const Offset begin = Offset(0.0, 0.0); + const Offset end = Offset(0.0,0.0); + // const Offset end = Offset(0.0,0.0); + const Curve curve = Curves.ease; + var tween = Tween(begin: begin, end: end).chain(CurveTween(curve: curve)); + var offsetAnimation = animation.drive(tween); + return SlideTransition( + position: offsetAnimation, + child: child, + ); + }, + ), + ); + }, + child : const Text('New User? SignUp Here',style: TextStyle(decoration: TextDecoration.underline,fontWeight: FontWeight.bold),), + ), + ]; + } +} \ No newline at end of file diff --git a/finalproject/lib/main.dart b/finalproject/lib/main.dart new file mode 100755 index 0000000..0eb000e --- /dev/null +++ b/finalproject/lib/main.dart @@ -0,0 +1,255 @@ +/*import 'package:flutter/material.dart'; +import 'package:google_maps_flutter/google_maps_flutter.dart'; +import 'first.dart'; +import 'storage.dart'; +import 'package:google_sign_in/google_sign_in.dart'; +import 'package:geolocator/geolocator.dart'; +import 'package:flutter/foundation.dart'; + +GoogleSignIn googleSignIn = GoogleSignIn( + scopes: [ + 'email', + ], +); + +void main() { + runApp(const MyApp()); +} + +class MyApp extends StatelessWidget { + const MyApp({Key? key}); + + @override + Widget build(BuildContext context) { + return MaterialApp( + title: 'Flutter Demo', + theme: ThemeData( + colorScheme: ColorScheme.fromSwatch(primarySwatch: Colors.cyan), + ), + home: MyHomePage(title: 'Login Page'), + ); + } +} + +class MyHomePage extends StatefulWidget { + MyHomePage({Key? key, required this.title}) : super(key: key); + + final String title; + // String coming = ""; + final TextStorage storage = TextStorage(); + + @override + State createState() => _MyHomePageState(); +} + +class _MyHomePageState extends State { + // late Stream _stream; + late Future _coming; + final GlobalKey _formKey = GlobalKey(); + final TextEditingController _econtroller = TextEditingController(), _pcontroller = TextEditingController(); + String input = ""; + bool password = false, _isLoading = true; + late LatLng _currentPosition; + + @override + void initState() { + super.initState(); + password = true; + _coming = widget.storage.readText(); + getLocation(); + } + + Future getLocation() async { + LocationPermission permission = await Geolocator.checkPermission(); + if (permission == LocationPermission.denied) { + permission = await Geolocator.requestPermission(); + if(permission == LocationPermission.denied) { + return; + } + } + + Position position = await Geolocator.getCurrentPosition( + desiredAccuracy: LocationAccuracy.high, + ); + + double lat = position.latitude; + double long = position.longitude; + LatLng location = LatLng(lat, long); + + setState(() { + _currentPosition = location; + _isLoading = false; + }); + if (kDebugMode) { + print("location codes: $_currentPosition"); + } + } + + Future _submit() async { + if (_formKey.currentState!.validate()) { + setState(() { + _coming = widget.storage.writeText(_econtroller.text).then((bool success) { + if (success) { + return _econtroller.text; + } else { + return ""; + } + }); + String text = _econtroller.text; + input = 'Saved Latest:- $text'; + }); + + runApp(MaterialApp( + initialRoute: '/', + onGenerateRoute: (settings) => PageRouteBuilder( + pageBuilder: (context, animation, secondaryAnimation) { + return HomePage(loaded: _isLoading, position: _currentPosition); + }, + transitionsBuilder: (context, animation, secondaryAnimation, child) { + const Offset begin = Offset(0.0, 0.0); + const Offset end = Offset.zero; + const Curve curve = Curves.ease; + var tween = Tween(begin: begin, end: end).chain(CurveTween(curve: curve)); + var offsetAnimation = animation.drive(tween); + return SlideTransition( + position: offsetAnimation, + child: child, + ); + }, + ), + )); + + + } + } + + String? _textValidator(String? value) { + if (value == null || value.isEmpty) { + return "Please enter some text"; + } + if (value.trim().isEmpty) { + return "Field left blank with white space"; + } + if (value.contains("@")) { + return "Do not use @"; + } + return null; + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + backgroundColor: Theme.of(context).colorScheme.primary, + title:Row(children: [ + const Padding( + padding: EdgeInsets.only(right: 50.0), // Adjust the value as needed + child: Align(alignment: Alignment.centerLeft, child: Text('DriveX')), + ), + Padding( + padding: const EdgeInsets.only(left: 50.0), // Adjust the value as needed + child: Align(alignment: Alignment.center, child: Text(widget.title)), + ) + ]), + ), + body: Center( + child: Container( + height: 555.0, + width: 444.0, + color: Colors.grey[200], + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: getBodyWidgetList(), + ), + ), + ), + ); + } + + List getBodyWidgetList() { + return [ + Form( + key: _formKey, + child: Column( + children: [ + /*FutureBuilder( + future: _coming, + builder: (BuildContext context, AsyncSnapshot snapshot) { + if (snapshot.hasData) { + return Text( + '${snapshot.data}', + style: Theme.of(context).textTheme.headlineLarge, + ); + } else if (snapshot.hasError) { + return Text("${snapshot.error}"); + } + return const CircularProgressIndicator(); + }),*/ + const Text("DriveX",style:TextStyle(fontWeight: FontWeight.bold)), + const Align(alignment: Alignment.centerLeft, child: Text('E-mail:',style:TextStyle(fontWeight: FontWeight.bold))), + TextFormField( + controller: _econtroller, + validator: (String? value){if(value != null && (value.contains('@gmail.com') || value.contains('@outlook.com'))){ + if(value.contains(',')){return 'invalid email id';}else{return null;}} + else{return (value != null && (!value.contains('@gmail.com') || + !value.contains('@outlook.com'))) ? 'invalid email id' : null;}}, + decoration: const InputDecoration( + border: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(30.0)), + ), + hintText: "Enter email id", + ), + ), + const Text(" "), + const Align(alignment: Alignment.centerLeft, child: Text('Password:',style:TextStyle(fontWeight: FontWeight.bold))), + TextFormField( + controller: _pcontroller, + validator: _textValidator, + obscureText: password, + obscuringCharacter:'*', + decoration: InputDecoration( + border:const OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(30.0)), + ), + hintText: "Enter password", + suffixIcon: IconButton( + icon: Icon(password ? Icons.visibility : Icons.visibility_off,), + onPressed: (){ + setState((){ + password = !password; + }); + }, + ), + ), + ), + const Align(alignment: Alignment.centerRight, child: Text('Forgot Password?',style:TextStyle(fontWeight: FontWeight.bold))), + const Text(" "), + ElevatedButton(onPressed: _submit, child: const Text("Login")), + const Text(" "), + const Text('New User? Create Account'), + ], + ), + ), + ]; + } +}*/ + + +import 'package:firebase_core/firebase_core.dart'; +import 'package:flutter/material.dart'; +import 'package:finalproject/firebase_options.dart'; +import 'splash.dart'; + + + +void main() async { + WidgetsFlutterBinding.ensureInitialized(); + await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform); + + runApp(MaterialApp( + debugShowCheckedModeBanner: false, + theme:ThemeData(), + home: const SplashScreen(), + ) + ); +} \ No newline at end of file diff --git a/finalproject/lib/message.dart b/finalproject/lib/message.dart new file mode 100755 index 0000000..655a147 --- /dev/null +++ b/finalproject/lib/message.dart @@ -0,0 +1,77 @@ +/* + +1. Referred this blog https://www.freecodecamp.org/news/build-a-chat-app-ui-with-flutter/ + +*/ + + +import 'package:flutter/material.dart'; + +class ChatDetailPage extends StatefulWidget { + const ChatDetailPage({super.key}); + + @override + _ChatDetailPageState createState() => _ChatDetailPageState(); +} + +class _ChatDetailPageState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + automaticallyImplyLeading: false, + backgroundColor: Colors.white, + flexibleSpace: SafeArea( + child: Container( + padding: const EdgeInsets.only(right: 16), + child: Row( + children: [ + IconButton(onPressed: () {Navigator.pop(context);}, + icon: const Icon(Icons.arrow_back, color: Colors.black),), + const SizedBox(width: 2), + const CircleAvatar(backgroundImage: AssetImage('assets/profile.jpg'),maxRadius: 20,), + const SizedBox(width: 12), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const Text("Charan", style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600)), + const SizedBox(height: 6), + Text("Online", style: TextStyle(color: Colors.grey.shade600, fontSize: 13)), + ], + ), + ), + ], + ), + ), + ), + ), + body: Stack( + children:[ + Align( + alignment: Alignment.bottomLeft, + child: Container( + padding: const EdgeInsets.only(left: 10,bottom: 10,top: 10), + height: 60, + color: Colors.white, + child: Row( + children: [ + const SizedBox(width: 15,), + const Expanded( + child: TextField(decoration: InputDecoration(hintText: "Write message...",),), + ), + const SizedBox(width: 15,), + FloatingActionButton( + onPressed: (){}, + child: const Icon(Icons.arrow_circle_right_outlined,size: 28,), + ), + ], + ), + ), + ), + ], + ), + ); + } +} \ No newline at end of file diff --git a/finalproject/lib/profile.dart b/finalproject/lib/profile.dart new file mode 100755 index 0000000..07e9fc0 --- /dev/null +++ b/finalproject/lib/profile.dart @@ -0,0 +1,274 @@ +/* + 1. Adjusted paddings with Chatgpt + 2. For code syntax took help from Chatgpt ,Source: https://www.openai.com +* +*/ + + +import 'package:cloud_firestore/cloud_firestore.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:firebase_auth/firebase_auth.dart'; +import 'package:finalproject/login.dart'; +import 'package:google_sign_in/google_sign_in.dart'; +import 'signup.dart'; + +class Profilepage extends StatelessWidget { + const Profilepage({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return MaterialApp( + theme: ThemeData( + colorScheme: ColorScheme.fromSwatch(primarySwatch: Colors.cyan), + ), + home: const MyHomePage(title: 'DriveX'), + ); + } +} + +class MyHomePage extends StatefulWidget { + const MyHomePage({Key? key, required this.title}) : super(key: key); + final String title; + final String coming = ""; + + @override + State createState() => _MyHomePageState(); +} + +class _MyHomePageState extends State { + String input = ""; + bool password = false; + final auth = FirebaseAuth.instance; + User? currentUser; + + Future signOut() async { + await auth.signOut(); + // await GoogleSignIn().signOut(); + + } + + String _AuthenticationMethod(User? user) { + if (user != null) { + if (user.providerData.isNotEmpty) { + String providerId = user.providerData[0].providerId; + if (providerId == "password") { + return "Email/Password"; + } else { + return providerId; + } + } + } + return 'Unknown'; + } + + Future _editName() async { + TextEditingController newNameController = TextEditingController(); + String newName = ""; + + await showDialog( + context: context, + builder: (BuildContext context) { + return AlertDialog( + title: const Text("Edit Name"), + content: TextField( + controller: newNameController, + decoration: const InputDecoration( + labelText: "Enter your new name"), + ), + actions: [ + TextButton( + onPressed: () { + Navigator.of(context).pop(); + }, + child: const Text("Cancel"), + ), + TextButton( + onPressed: () async { + newName = newNameController.text; + Navigator.of(context).pop(); + + if (newName.isNotEmpty) { + try { + await FirebaseAuth.instance.currentUser! + .updateDisplayName(newName); + setState(() { + currentUser = FirebaseAuth.instance.currentUser!; + }); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text('Name updated successfully'), + duration: Duration(seconds: 2), + ), + ); + } catch (e) { + print("Error updating name: $e"); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text('Failed to update name'), + duration: Duration(seconds: 2), + ), + ); + } + } + }, + child: Text("Save"), + ), + ], + ); + }, + ); + } + /* Taken help from Chatgpt and also stackoverflow to implement the logic to show logged in user details in profile page*/ + @override + Widget build(BuildContext context) { + final currentUser = FirebaseAuth.instance.currentUser!; + if (kDebugMode) { + print('current user issssssssssssssssssssssss ${currentUser}'); + } + return Scaffold( + appBar: AppBar( + title: const Text( + "Account", + style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold), + ), + centerTitle: true, + backgroundColor: Colors.white, + actions: [ + IconButton( + icon: Icon(Icons.edit), + onPressed: _editName, + ), + ], + ), + body: StreamBuilder( + stream: FirebaseAuth.instance.authStateChanges(), + builder: (context, snapshot) { + if (snapshot.connectionState == ConnectionState.waiting) { + return const Center(child: CircularProgressIndicator()); + } else if (snapshot.hasData) { + return Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const SizedBox(height: 20), + CircleAvatar( + radius: 50, + backgroundImage: currentUser.photoURL != null + ? NetworkImage(currentUser.photoURL!) + : const AssetImage('assets/profile.jpg') + as ImageProvider, + ), + const SizedBox(height: 5), + Container( + margin: const EdgeInsets.all(9), + child: Align( + alignment: Alignment.center, + child: Padding( + padding: const EdgeInsets.only(left: 10), + child: Text( + // currentUser.displayName ?? 'No Name', + 'Hi ${currentUser.displayName ?? 'No Name'}', + style: const TextStyle( + fontWeight: FontWeight.bold, + fontSize: 20, + ), + ), + ), + ), + ), + const Divider(thickness: 0.5, color: Colors.grey), + // const SizedBox(height: 20), + Container( + margin: const EdgeInsets.all(9), + child: Align( + alignment: Alignment.centerLeft, + child: Padding( + padding: const EdgeInsets.only(left: 24), + child: Row( + children: [ + Image.asset('assets/email.png', + width: 40, height: 40), + const SizedBox( + width: + 8), // Add some space between image and text + Text( + currentUser.email ?? 'No Name', + style: const TextStyle( + // fontWeight: FontWeight.bold, + fontSize: 20, + color: Colors.black, + ), + ), + ], + ), + ), + ), + ), + + const Divider(thickness: 0.5, color: Colors.grey), + Container( + margin: const EdgeInsets.all(9), + child: Align( + alignment: Alignment.centerLeft, + child: Padding( + padding: const EdgeInsets.only(left: 30), + child: Row( + children: [ + Image.asset('assets/authantication.png', + width: 30, height: 30), + const SizedBox( + width: + 8), // Add some space between image and text + Text( + _AuthenticationMethod(currentUser), + style: const TextStyle( + // fontWeight: FontWeight.bold, + fontSize: 20, + color: Colors.black, + ), + ), + ], + ), + ), + ), + ), + + const SizedBox(height: 5), + ElevatedButton( + onPressed: () { + signOut(); + Navigator.of(context, rootNavigator: true) + .pushReplacement( + PageRouteBuilder( + pageBuilder: (context, animation, + secondaryAnimation) { + return const login(); // Default to FirstRoute if the route is unknown. + }, + transitionsBuilder: + (context, animation, secondaryAnimation, child) { + const Offset begin = Offset(0.0, 0.0); + const Offset end = Offset(0.0, 0.0); + const Curve curve = Curves.ease; + var tween = Tween(begin: begin, end: end) + .chain(CurveTween(curve: curve)); + var offsetAnimation = animation.drive(tween); + return SlideTransition( + position: offsetAnimation, + child: child, + ); + }, + ), + ); + }, + child: const Text('Logout'), + ), + ], + ); + } else { + return const Center(child: Text('Not authenticated')); + } + }, + ), + ); + } +} \ No newline at end of file diff --git a/finalproject/lib/search.dart b/finalproject/lib/search.dart new file mode 100755 index 0000000..003be28 --- /dev/null +++ b/finalproject/lib/search.dart @@ -0,0 +1,351 @@ +import 'dart:async'; +import 'searchpage.dart'; +import 'package:flutter/material.dart'; +import 'package:google_maps_flutter/google_maps_flutter.dart'; +import 'package:cloud_firestore/cloud_firestore.dart'; +import 'package:geoflutterfire2/geoflutterfire2.dart'; +import 'list.dart'; +import 'carDetail.dart'; +//https://docs.flutter.dev/cookbook/effects/nested-nav +class Search extends StatefulWidget { + static SearchState of(BuildContext context) { + return context.findAncestorStateOfType()!; + } + const Search({super.key,required this.setupPageRoute, required this.loaded, required this.position}); + + final String setupPageRoute; + final bool loaded; + final LatLng position; + @override + SearchState createState() => SearchState(); +} + +class SearchState extends State { + final _navigatorKey = GlobalKey(); + bool _isTapped = false, isSearched = false, _isLoading = true; + final _controller = TextEditingController(); + late Map place; + // final LatLng _searchedPosition = const LatLng(39.7278851, -121.845067); + late LatLng _currentPosition ,_searchedPosition; + + @override + void initState() { + super.initState(); + _isLoading = widget.loaded; + _currentPosition = widget.position; + } + + void _onListSelected(){ + if(!_isTapped){ + setState(() { + _isTapped = !_isTapped; + _navigatorKey.currentState!.pushNamed('/list'); + });} + else{ + setState(() { + _isTapped = !_isTapped; + _navigatorKey.currentState!.pop(); + }); + } + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: _buildAppBar(), + body: Navigator( + key: _navigatorKey, + initialRoute: widget.setupPageRoute, + onGenerateRoute: _onGenerateRoute, + ), + ); + } + Route _onGenerateRoute(RouteSettings settings) { + late Widget page; + if (settings.name == '/') { + if(isSearched==true){ + page = Googlemap(loaded: _isLoading, position: _searchedPosition, searched: isSearched, + onListSelected: _onListSelected); + }else{ + page = Googlemap(loaded: _isLoading, position: _currentPosition, searched: isSearched, + onListSelected: _onListSelected);} + } + if (settings.name == '/list') { + page = const CarListPage(); + + return PageRouteBuilder( + pageBuilder: (context, animation, secondaryAnimation) => page, + settings: settings, // Pass the settings to the PageRouteBuilder + transitionsBuilder: (context, animation, secondaryAnimation, child) { + const begin = Offset(0.0, 1.0); + const end = Offset(0.0,0.0); + const curve = Curves.easeInOut; + var tween = Tween(begin: begin, end: end).chain(CurveTween(curve: curve)); + var offsetAnimation = animation.drive(tween); + + return SlideTransition(position: offsetAnimation, child: child); + }, + ); + + } + + return PageRouteBuilder( + pageBuilder: (context, animation, secondaryAnimation) => page, + settings: settings, // Pass the settings to the PageRouteBuilder + transitionsBuilder: (context, animation, secondaryAnimation, child) { + const begin = Offset(0.0, 0.0); + const end = Offset.zero; + const curve = Curves.easeInOut; + var tween = Tween(begin: begin, end: end).chain(CurveTween(curve: curve)); + var offsetAnimation = animation.drive(tween); + + return SlideTransition(position: offsetAnimation, child: child); + }, + ); + + } + + PreferredSizeWidget _buildAppBar() { + return AppBar( + backgroundColor: Colors.blueGrey, + title: Row( + children: [ + SizedBox( + width: 298, + height: 34, + child: TextField( + controller: _controller, + decoration: const InputDecoration( + enabledBorder: OutlineInputBorder(borderSide: BorderSide(color: Colors.white)), + focusedBorder: OutlineInputBorder(borderSide: BorderSide(color: Colors.white)), + filled: true, + fillColor: Colors.white, + hintText: 'Choose Location', + contentPadding: EdgeInsets.all(8.0), + ), + readOnly: true, + onTap: () async { + //https://docs.flutter.dev/cookbook/navigation/returning-data + place = await Navigator.push( + context, + PageRouteBuilder( + pageBuilder: (context, animation, secondaryAnimation) { + return SearchPage(userSearch: _controller.text); // Default to FirstRoute if the route is unknown. + }, + transitionsBuilder: (context, animation, secondaryAnimation, child) { + const Offset begin = Offset(1.0, 0.0); + const Offset end = Offset(0.0,0.0); + // const Offset end = Offset(0.0,0.0); + const Curve curve = Curves.ease; + var tween = Tween(begin: begin, end: end).chain(CurveTween(curve: curve)); + var offsetAnimation = animation.drive(tween); + return SlideTransition( + position: offsetAnimation, + child: child, + ); + }, + ), + ); + if (place.containsKey('location') && place.containsKey('latLng')) { + _controller.text = place['location']; + if(_controller.text.isNotEmpty){ + setState(() { + isSearched = true; + _searchedPosition = place['latLng']; + _navigatorKey.currentState!.pushNamed('/'); + }); + }else{setState(() { + isSearched = false; + _navigatorKey.currentState!.pushNamed('/');});} + } + } + ), + ), + GestureDetector( + onTap: _onListSelected, + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 16.0), + child: Text(_isTapped ? 'Map' : 'List', + style: const TextStyle(fontSize: 18), + ), + ), + ), + ], + ), + ); + } + +} + +//https://codelabs.developers.google.com/codelabs/google-maps-in-flutter#0 +class Googlemap extends StatefulWidget { + const Googlemap({super.key, required this.loaded, required this.position, + required this.searched, required this.onListSelected, + }); + + final void Function() onListSelected; + + final bool loaded, searched ; + final LatLng position; + + @override + State createState() => Googlemapstate(); +} + +class Googlemapstate extends State{ + + Completer mapController = Completer(); + final geo = GeoFlutterFire(); + late Set _markers = {}; + bool _isLoading = false, _isSearched = false; + late LatLng _currentPosition; + + @override + void initState() { + super.initState(); + _isSearched = widget.searched; + _isLoading = widget.loaded; + _currentPosition = widget.position; + } + +//https://pub.dev/packages/geoflutterfire2 and GPT + Future> getNearbyLocations() async { + CollectionReference geoCollection = FirebaseFirestore.instance.collection('geoCollection'); + List geoPoints = []; + + try { + QuerySnapshot querySnapshot = await geoCollection.get(); + + for (QueryDocumentSnapshot documentSnapshot in querySnapshot.docs) { + Map data = documentSnapshot.data() as Map; + + GeoPoint latlng = data['latlng']; + + GeoFirePoint geoFirePoint = GeoFirePoint(latlng.latitude, latlng.longitude); + geoPoints.add(geoFirePoint); + + print("Document ID: ${documentSnapshot.id}"); + print("Latitude : ${latlng.latitude}, Longitude : ${latlng.longitude}"); + } + } catch (e) { + print("Error getting documents: $e"); + } + + return geoPoints; + } + + + + void setInitialLocation() { + mapController.future.then((controller) { + controller.animateCamera(CameraUpdate.newLatLng(_currentPosition)); + }); + } + + + void updateMarkers(LatLng currentPosition) async { + List nearbyLocations = await getNearbyLocations(); + Set markers = nearbyLocations.map((GeoFirePoint geoPoint) { + return Marker( + markerId: MarkerId(geoPoint.hash), + position: LatLng(geoPoint.latitude, geoPoint.longitude), + icon: BitmapDescriptor.defaultMarkerWithHue(BitmapDescriptor.hueOrange), + // Customize the marker as needed. + ); + }).toSet(); + + setState(() { + _markers = markers; + final pickedLocatation = Marker( + markerId: const MarkerId("1"), + position: LatLng(_currentPosition.latitude, _currentPosition.longitude), + icon: BitmapDescriptor.defaultMarkerWithHue(BitmapDescriptor.hueRed), + onTap: () { + widget.onListSelected(); + } + ); + _markers.add(pickedLocatation); + }); + } + + + void _onMapCreated(GoogleMapController controller){ + + mapController.complete(controller); + if(_isSearched){ + updateMarkers(_currentPosition); + } + else{ + final userLocation = Marker( + markerId: const MarkerId("1"), + position: LatLng(_currentPosition.latitude, _currentPosition.longitude), + icon: BitmapDescriptor.defaultMarkerWithHue(BitmapDescriptor.hueRed), + onTap: () { + widget.onListSelected(); + } + ); + setState(() { + _markers.add(userLocation); + }); + } + } + + @override + Widget build(BuildContext context) { + return Scaffold( + body:Center( + child: Stack( + children: [ + _buildGoogleMap(), + _buildLocationButton(), + ], + ), + ), + ); + } + + Widget _buildGoogleMap() { + return _isLoading + ? const Center(child: CircularProgressIndicator()) + : + GoogleMap( + mapType: MapType.normal, + onMapCreated: _onMapCreated, + initialCameraPosition: CameraPosition( + target: _currentPosition, + zoom: 16.0, + ), + markers: _markers, + zoomControlsEnabled: false, + ); + } + + + Widget _buildLocationButton() { + if (!_isLoading) { + return Align( + alignment: Alignment.topRight, + child: Container( + height: 60, + width: 60, + padding: const EdgeInsets.all(10.0), + child: FloatingActionButton( + backgroundColor: Colors.white, + heroTag: 'recenter', + onPressed: setInitialLocation, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10.0), + side: const BorderSide(color: Color(0xFFECEDF1)), + ), + child: const Icon( + Icons.my_location, + color: Colors.grey, + ), + ), + ), + ); + } else { + return Container(); + } + } +} diff --git a/finalproject/lib/searchpage.dart b/finalproject/lib/searchpage.dart new file mode 100755 index 0000000..3dde9e5 --- /dev/null +++ b/finalproject/lib/searchpage.dart @@ -0,0 +1,134 @@ +import 'package:flutter/material.dart'; +import 'package:google_maps_flutter/google_maps_flutter.dart'; +import 'package:google_places_flutter/google_places_flutter.dart'; +import 'package:google_places_flutter/model/prediction.dart'; + +class SearchPage extends StatefulWidget { + const SearchPage({Key? key, required this.userSearch}) : super(key: key); + + final String userSearch; + @override + State createState() => _SearchPageState(); +} + +class _SearchPageState extends State { + + final searchController = TextEditingController(); + late LatLng picked; + @override + void initState() { + super.initState(); + searchController.text = widget.userSearch; + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: _buildAppBar(), + body: Center( + child: Column( + children: [ + const SizedBox(height: 20), + placesAutoCompleteTextField(), + Expanded( + child: Container(), // Add your main content here + ), + Padding(padding: const EdgeInsets.all(16.0), // Adjust the padding as needed + child: Align( + alignment: Alignment.bottomCenter, + child: ElevatedButton( + onPressed:(){if(searchController.text.isEmpty){ + Navigator.of(context).pop({'location': searchController.text, 'latLng': const LatLng(0.0,0.0)});} + else{Navigator.of(context).pop({'location': searchController.text, 'latLng': picked});}}, + style: ElevatedButton.styleFrom(backgroundColor: Colors.blueGrey), + child: const Text("Search", style:TextStyle(color: Colors.black87))), + ), + )]) + )); + } + + + PreferredSizeWidget _buildAppBar() { + return AppBar( + backgroundColor: Colors.blueGrey, + leading: IconButton( + onPressed: () { + Navigator.of(context).pop(); + }, + icon: const Icon(Icons.arrow_back), + ), + title: Row( + children: [ + const Padding( + padding: EdgeInsets.only(left: 100.0), // Adjust the value as needed + child: Align(alignment: Alignment.centerLeft, child: Text('Search')), + ), + Padding( + padding: const EdgeInsets.only(left: 100.0), // Adjust the value as needed + child:Align(alignment: Alignment.centerRight, + child: GestureDetector( + onTap: () { + searchController.clear(); + }, + child: const Text('Clear'), + ), + )) + ], + ), + ); + } +//https://pub.dev/packages/google_places_flutter/example + placesAutoCompleteTextField() { + return + Container( + padding: const EdgeInsets.symmetric(horizontal: 20), + // TextField( + child: + GooglePlaceAutoCompleteTextField( + textEditingController: searchController, + googleAPIKey: "AIzaSyC0VfkDfuJHQAFttjRzJ8za5ZJRbjkRYq4", + inputDecoration: const InputDecoration( + enabledBorder: OutlineInputBorder(borderSide: BorderSide(color: Colors.white)), + focusedBorder: OutlineInputBorder(borderSide: BorderSide(color: Colors.white)), + filled: true, + fillColor: Colors.white, + hintText: 'Search Location', + contentPadding: EdgeInsets.all(8.0), + ), + debounceTime: 200, + countries: const ["in", "us"], + isLatLngRequired: true, + getPlaceDetailWithLatLng: (Prediction prediction){ + if (prediction.lat != null) { + double latitude = double.tryParse(prediction.lat.toString()) ?? 0.0; + double longitude = double.tryParse(prediction.lng.toString()) ?? 0.0; + picked = LatLng(latitude, longitude); + } + }, + itemClick: (Prediction prediction){ + searchController.text = prediction.description ?? ""; + searchController.selection = TextSelection.fromPosition( + TextPosition(offset: prediction.description?.length ?? 0)); + FocusScope.of(context).requestFocus(FocusNode()); + }, + seperatedBuilder: const Divider(), + itemBuilder: (context, index, Prediction prediction) { + return Container( + padding: const EdgeInsets.all(10), + child: Row( + children: [ + const Icon(Icons.location_on), + const SizedBox( + width: 7, + ), + Expanded(child: Text(prediction.description??"")) + ], + ), + ); + }, + isCrossBtnShown: false, + // default 600 ms , + ), + ); + } +} diff --git a/finalproject/lib/second.dart b/finalproject/lib/second.dart new file mode 100755 index 0000000..39f9277 --- /dev/null +++ b/finalproject/lib/second.dart @@ -0,0 +1,32 @@ +import 'package:flutter/material.dart'; +import 'package:finalproject/drawer.dart'; + +class SecondRoute extends StatelessWidget { + const SecondRoute({super.key}); + + @override + Widget build(BuildContext context) { + return Scaffold( + // appBar: AppBar( + // title: const Text('Matches'), + // ), + drawer: getDrawer(context), + body: Center( + child: Container( + height: 555.0, + width: 444.0, + color: Colors.grey[200], + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ElevatedButton( + child: const Text('Go back!'), + onPressed: () { + Navigator.popAndPushNamed(context, '/'); + }, + ),] + ), + ), + ), + ); + } +} diff --git a/finalproject/lib/signup.dart b/finalproject/lib/signup.dart new file mode 100755 index 0000000..ee386be --- /dev/null +++ b/finalproject/lib/signup.dart @@ -0,0 +1,414 @@ +/* + 1. Adjusted paddings with help of Chatgpt + 2. Took many references from stackoverflow and github accounts to understand how to save user details to firebase + 4. For code syntax took help from Chatgpt +* +*/ + +import 'package:finalproject/firebase_options.dart'; +import 'package:finalproject/login.dart'; +import 'package:firebase_auth/firebase_auth.dart'; +import 'package:firebase_core/firebase_core.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:google_sign_in/google_sign_in.dart'; +import 'package:geolocator/geolocator.dart'; +import 'package:google_maps_flutter/google_maps_flutter.dart'; +import 'tabs.dart'; +import 'package:cloud_firestore/cloud_firestore.dart'; + +class SignUpPage extends StatelessWidget { + const SignUpPage({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return MaterialApp( + theme: ThemeData( + colorScheme: ColorScheme.fromSwatch(primarySwatch: Colors.cyan), + ), + home: const MyHomePage(title: 'DriveX'), + ); + } +} + +class MyHomePage extends StatefulWidget { + const MyHomePage({Key? key, required this.title}) : super(key: key); + final String title; + + @override + State createState() => _SignUpPageState(); +} + +class _SignUpPageState extends State { + final GlobalKey _formKey = GlobalKey(); + final TextEditingController _econtroller = TextEditingController(); + final TextEditingController _pcontroller = TextEditingController(); + final TextEditingController _usernameController = TextEditingController(); + late String _email, _password, _username; + bool password = true, _isLoading = true; + final auth = FirebaseAuth.instance; + bool _initialized = false; + GoogleSignInAccount? googleUser; + late LatLng _currentPosition; + + Future getLocation() async { + LocationPermission permission = await Geolocator.checkPermission(); + if (permission == LocationPermission.denied) { + permission = await Geolocator.requestPermission(); + if(permission == LocationPermission.denied) { + return; + } + } + + Position position = await Geolocator.getCurrentPosition( + desiredAccuracy: LocationAccuracy.high, + ); + + double lat = position.latitude; + double long = position.longitude; + LatLng location = LatLng(lat, long); + + setState(() { + _currentPosition = location; + _isLoading = false; + }); + if (kDebugMode) { + print("location codes: $_currentPosition"); + } + } + + String? _textValidator(String? value) { + if (value == null || value.isEmpty) { + return "Please enter some text"; + } + if (value.trim().isEmpty) { + return "Field left blank with white space"; + } + if (value.contains("@")) { + return "Do not use @"; + } + if (value.isEmpty) { + return "Please enter your password"; + } + return null; + } + + /* Took code from 467 - MW class*/ + Future initializeDefault() async { + FirebaseApp app = await Firebase.initializeApp( + options: DefaultFirebaseOptions.currentPlatform, + ); + _initialized = true; + if (kDebugMode) { + print("Initialized default Firebase app $app"); + } + } + + Future signInWithGoogle() async { + if (!_initialized) { + await initializeDefault(); + } + + googleUser = await GoogleSignIn().signIn(); + + setState(() { + Navigator.pushReplacement(context, MaterialPageRoute(builder: (context) => HomePage(loaded: _isLoading, position: _currentPosition,googleUser1:googleUser))); + }); + + if (kDebugMode) { + print(googleUser!.displayName); + } + + final GoogleSignInAuthentication? googleAuth = + await googleUser?.authentication; + + final credential = GoogleAuthProvider.credential( + accessToken: googleAuth?.accessToken, + idToken: googleAuth?.idToken, + ); + + return await FirebaseAuth.instance.signInWithCredential(credential); + } + + /*Referred github pages to understand how saving details to firebase works + and also from this website : https://www.loginradius.com/blog/engineering/guest-post/authenticating-flutter-apps/ */ + Future savinguserdetails(String firstName, String email) async{ + await FirebaseFirestore.instance.collection('users').add({ + 'first name': firstName, + 'email': email, + }); + } + + @override + void initState() { + super.initState(); + getLocation(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + resizeToAvoidBottomInset: false, + body: Center( + child: Container( + height: 600.0, + width: 600.0, + margin: const EdgeInsets.all(10.0), + decoration: BoxDecoration( + color: Colors.grey[200], + borderRadius: BorderRadius.circular(20), + ), + child: ListView( + children: [ + Column( + mainAxisAlignment: MainAxisAlignment.center, + children: getBodyWidgetList(), + ), + ], + ), + ), + ), + ); + } + + List getBodyWidgetList() { + return [ + Form( + key: _formKey, + child: SingleChildScrollView( + child: Column( + children: [ + Container( + margin: const EdgeInsets.all(11), + alignment: Alignment.topLeft, + child: const Text( + "Sign Up", + style: TextStyle(fontWeight: FontWeight.bold, fontSize: 25), + textAlign: TextAlign.left, + ), + ), + Container( + margin: const EdgeInsets.all(9), + child: const Align( + alignment: Alignment.centerLeft, + child: Padding( + padding: EdgeInsets.only(left: 10), + child: Text('Name:', + style: TextStyle( + fontWeight: FontWeight.bold, fontSize: 20)), + )), + ), + SizedBox( + width: 350, + child: TextFormField( + controller: _usernameController, + decoration: const InputDecoration( + border: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(15.0)), + ), + hintText: "Enter Your Name", + ), + ), + ), + Container( + margin: const EdgeInsets.all(9), + child: const Align( + alignment: Alignment.centerLeft, + child: Padding( + padding: EdgeInsets.only(left: 10), + child: Text('E-mail:', + style: TextStyle( + fontWeight: FontWeight.bold, fontSize: 20)), + )), + ), + SizedBox( + width: 350, + child: TextFormField( + controller: _econtroller, + validator: (String? value) { + if (value != null && + (value.contains('@gmail.com') || + value.contains('@outlook.com'))) { + if (value.contains(',')) { + return 'invalid email id'; + } else { + return null; + } + } else { + return (value != null && + (!value.contains('@gmail.com') || + !value.contains('@outlook.com'))) + ? 'invalid email id' + : null; + } + }, + decoration: const InputDecoration( + border: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(15.0)), + ), + hintText: "Enter email id", + ), + ), + ), + const Text(" "), + Container( + margin: const EdgeInsets.all(9), + child: const Align( + alignment: Alignment.centerLeft, + child: Padding( + padding: EdgeInsets.only(left: 10), + child: Text('Password:', + style: TextStyle( + fontWeight: FontWeight.bold, fontSize: 20)), + )), + ), + SizedBox( + width: 350, + child: TextFormField( + controller: _pcontroller, + validator: _textValidator, + obscureText: password, + obscuringCharacter: '*', + decoration: InputDecoration( + border: const OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(15.0)), + ), + hintText: "Enter password", + suffixIcon: IconButton( + icon: Icon( + password ? Icons.visibility : Icons.visibility_off, + ), + onPressed: () { + setState(() { + password = !password; + }); + }, + ), + ), + ), + ), + const Text(" "), + ElevatedButton( + child: + const Text('Signup', style: TextStyle(color: Colors.white)), + onPressed: () async { + _email = _econtroller.text; + _password = _pcontroller.text; + _username = _usernameController.text; + try { + await auth.createUserWithEmailAndPassword(email: _email, password: _password); + await FirebaseAuth.instance.currentUser!.updateDisplayName(_username); + savinguserdetails(_usernameController.text,_econtroller.text); + setState(() { + Navigator.push( + context, + PageRouteBuilder( + pageBuilder: + (context, animation, secondaryAnimation) { + return HomePage(loaded: _isLoading, position: _currentPosition); // Default to FirstRoute if the route is unknown. + }, + transitionsBuilder: + (context, animation, secondaryAnimation, child) { + const Offset begin = Offset(0.0, 0.0); + const Offset end = Offset(0.0, 0.0); + // const Offset end = Offset(0.0,0.0); + const Curve curve = Curves.ease; + var tween = Tween(begin: begin, end: end) + .chain(CurveTween(curve: curve)); + var offsetAnimation = animation.drive(tween); + return SlideTransition( + position: offsetAnimation, + child: child, + ); + }, + ), + ); + }); + _usernameController.clear(); + _econtroller.clear(); + _pcontroller.clear(); + } catch (e) { + if (e is FirebaseAuthException) { + if (e.code == 'email-already-in-use') { + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar( + content: Text('Email already in use'), + duration: Duration(seconds: 2), + ), + ); + } else if (e.code == 'invalid-password') { + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar( + content: Text( + 'Password should be at least 6 characters'), + duration: Duration(seconds: 2), + ), + ); + } + } + } + }, + ), + const Text(" "), + const Padding( + padding: EdgeInsets.symmetric(horizontal: 25.0), + child: Row( + children: [ + Expanded( + child: Divider(thickness: 0.5, color: Colors.grey), + ), + Text('Or continue With'), + Expanded( + child: Divider(thickness: 0.5, color: Colors.grey), + ), + ], + ), + ), + const Text(" "), + IconButton( + icon: Image.asset('assets/google.png'), + iconSize: 40, + onPressed: () async { + await signInWithGoogle(); + // adduserdetails(_usernameController.text.trim(),_econtroller.text.trim()); + }, + ), + ], + ), + ), + ), + GestureDetector( + onTap: () { + Navigator.push( + context, + PageRouteBuilder( + pageBuilder: (context, animation, secondaryAnimation) { + return const login(); // Default to FirstRoute if the route is unknown. + }, + transitionsBuilder: + (context, animation, secondaryAnimation, child) { + const Offset begin = Offset(0.0, 0.0); + const Offset end = Offset(0.0, 0.0); + // const Offset end = Offset(0.0,0.0); + const Curve curve = Curves.ease; + var tween = Tween(begin: begin, end: end) + .chain(CurveTween(curve: curve)); + var offsetAnimation = animation.drive(tween); + return SlideTransition( + position: offsetAnimation, + child: child, + ); + }, + ), + ); + }, + child: const Text( + 'Already User? SignIn Here', + style: TextStyle( + decoration: TextDecoration.underline, + fontWeight: FontWeight.bold), + ), + ), + ]; + } +} \ No newline at end of file diff --git a/finalproject/lib/splash.dart b/finalproject/lib/splash.dart new file mode 100755 index 0000000..2d61d29 --- /dev/null +++ b/finalproject/lib/splash.dart @@ -0,0 +1,70 @@ +/* + Took reference from Geekforgeeks https://www.geeksforgeeks.org/splash-screen-in-flutter/ +*/ + + +import 'dart:async'; +import 'package:finalproject/login.dart'; +import 'package:flutter/material.dart'; + +// ignore: camel_case_types +class SplashScreen extends StatelessWidget { + const SplashScreen({super.key}); + + @override + Widget build(BuildContext context) { + return MaterialApp( + title: 'Splash Screen', + theme: ThemeData( + primarySwatch: Colors.green, + ), + home: const MyHomePage(), + debugShowCheckedModeBanner: false, + ); + } +} + +class MyHomePage extends StatefulWidget { + const MyHomePage({Key? key}) : super(key: key); + @override + State createState() => _MyHomePageState(); +} +class _MyHomePageState extends State { + @override + void initState() { + super.initState(); + Timer(const Duration(seconds: 3), + ()=>Navigator.push( + context, + PageRouteBuilder( + pageBuilder: (context, animation, secondaryAnimation) { + return const login(); // Default to FirstRoute if the route is unknown. + }, + transitionsBuilder: (context, animation, secondaryAnimation, child) { + const Offset begin = Offset(0.0, 0.0); + const Offset end = Offset(0.0,0.0); + // const Offset end = Offset(0.0,0.0); + const Curve curve = Curves.ease; + var tween = Tween(begin: begin, end: end).chain(CurveTween(curve: curve)); + var offsetAnimation = animation.drive(tween); + return SlideTransition( + position: offsetAnimation, + child: child, + ); + }, + ), + ) + ); + } + + @override + Widget build(BuildContext context) { + return Container( + color: Colors.white, + child : Center( + child: Image.asset( + 'assets/dx logo.png', + height:MediaQuery.of(context).size.height) + )); + } +} \ No newline at end of file diff --git a/finalproject/lib/storage.dart b/finalproject/lib/storage.dart new file mode 100755 index 0000000..da79aac --- /dev/null +++ b/finalproject/lib/storage.dart @@ -0,0 +1,84 @@ +import 'firebase_options.dart'; +import 'package:flutter/foundation.dart'; +import 'package:cloud_firestore/cloud_firestore.dart'; +import 'package:firebase_core/firebase_core.dart'; + +class TextStorage { + bool _initialized = false; + + Future initializeDefault() async { + FirebaseApp app = await Firebase.initializeApp( + options: DefaultFirebaseOptions.currentPlatform, + ); + _initialized = true; + if (kDebugMode) { + print("Initialized default Firebase app $app"); + } + } + + TextStorage(); + + bool get isInitialized => _initialized; + + Future> getStream() async { + if (!isInitialized) { + await initializeDefault(); + } + FirebaseFirestore firestore = FirebaseFirestore.instance; + return firestore.collection("rider").doc("ride_id").snapshots(); + } + + Future writeText(String text) async { + try { + if (!isInitialized) { + await initializeDefault(); + } + FirebaseFirestore firestore = FirebaseFirestore.instance; + await firestore + .collection("rider") + .doc("ride_id") + .set({"Credentials": text}).then((value) { + if (kDebugMode) { + print("Entered Credentials are $text"); + } + return true; + }).catchError((error) { + if (kDebugMode) { + print("Failed to set Credentials: $error"); + } + return false; + }); + } catch (e) { + if (kDebugMode) { + print(e); + } + } + return false; + } + + Future readText() async { + try { + if (!isInitialized) { + await initializeDefault(); + } + FirebaseFirestore firestore = FirebaseFirestore.instance; + DocumentSnapshot ds = + await firestore.collection("rider").doc("ride_id").get(); + if (ds.exists && ds.data() != null) { + Map data = (ds.data() as Map); + if (data.containsKey("Credentials")) { + return data["Credentials"]; + } + } + bool writeSuccess = await writeText("google"); + if (writeSuccess) { + return "written google"; + } + } catch (e) { + if (kDebugMode) { + print(e); + } + } + return "nothing"; + } +} \ No newline at end of file diff --git a/finalproject/lib/tabnavigation.dart b/finalproject/lib/tabnavigation.dart new file mode 100755 index 0000000..80f2653 --- /dev/null +++ b/finalproject/lib/tabnavigation.dart @@ -0,0 +1,150 @@ +import 'package:flutter/material.dart'; +import 'package:google_maps_flutter/google_maps_flutter.dart'; +import 'search.dart'; +import 'drive.dart'; +import 'trips.dart'; +import 'profile.dart'; +//https://github.com/Kickbykick/Persistent-Bottom-Navigation-Bar/blob/master/lib/app.dart +class TabNavigator extends StatelessWidget { + const TabNavigator({ + Key? key, + required this.navigatorKey, + required this.tabItem, + required this.loaded, + required this.position + }) : super(key: key); + + final GlobalKey navigatorKey; + final String tabItem; + final bool loaded; + final LatLng position; + + @override + Widget build(BuildContext context) { + + late Widget child ; + if(tabItem == "Search") { + //https://docs.flutter.dev/cookbook/effects/nested-nav + child = Search(setupPageRoute: '/', loaded: loaded, position: position);} + else if(tabItem == "Drive"){ + child = const Drivepage();} + else if(tabItem == "Inbox"){ + child = const Inbox();} + else if(tabItem == "Trips"){ + child = const Tripspage();} + else if(tabItem == "Profile"){ + child = const Profilepage();} + + return Navigator( + key: navigatorKey, + onGenerateRoute: (routeSettings) { + return MaterialPageRoute( + builder: (context) => child, + ); + }, + ); + } +} + +class Drive extends StatelessWidget { + const Drive({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return const Scaffold( + body: Center( + child: Text("DriveX Drive Tab",style:TextStyle(fontWeight: FontWeight.bold)), + ), + ); + } +} + +class Inbox extends StatelessWidget { + const Inbox({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return MaterialApp( + theme: ThemeData( + colorScheme: ColorScheme.fromSwatch(primarySwatch: Colors.cyan), + ), + home: const MyHomePage(title: 'DriveX'), + ); + } +} + +class MyHomePage extends StatefulWidget { + const MyHomePage({Key? key, required this.title}) : super(key: key); + final String title; + + @override + State createState() => _MyHomePageState(); +} + +class _MyHomePageState extends State { + String input = ""; + bool password = false; + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: const Text( + "Inbox", + style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold), + ), + centerTitle: true, + backgroundColor: Colors.white, + ), + body: Padding( + padding: const EdgeInsets.only(left: 16, right: 16, top: 16), + child: Column( + children: [ + TextField( + decoration: InputDecoration( + hintText: "Search", + hintStyle: const TextStyle(color: Colors.grey), + prefixIcon: const Icon(Icons.search, color: Colors.grey, size: 20), + contentPadding: const EdgeInsets.all(8), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(20), + borderSide: const BorderSide( + color: Colors.grey, + ), + ), + ), + ), + const SizedBox(height: 50), + Image.asset('assets/Inboxpage.png'), + ], + ), + ), + ); + } +} + +class Trips extends StatelessWidget { + const Trips({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return const Scaffold( + body: Center( + child: Text("DriveX Trips Tab",style:TextStyle(fontWeight: FontWeight.bold)), + ), + ); + } +} + +// class Profile extends StatelessWidget { +// const Profile({Key? key}) : super(key: key); +// +// @override +// Widget build(BuildContext context) { +// return const Scaffold( +// body: Center( +// child: Text("DriveX Profile Tab",style:TextStyle(fontWeight: FontWeight.bold)), +// ), +// ); +// } +// } \ No newline at end of file diff --git a/finalproject/lib/tabs.dart b/finalproject/lib/tabs.dart new file mode 100755 index 0000000..27ea440 --- /dev/null +++ b/finalproject/lib/tabs.dart @@ -0,0 +1,108 @@ +import 'package:flutter/material.dart'; +import 'package:google_maps_flutter/google_maps_flutter.dart'; +import 'tabnavigation.dart'; +import 'package:google_sign_in/google_sign_in.dart'; + +//https://github.com/Kickbykick/Persistent-Bottom-Navigation-Bar/blob/master/lib/app.dart +class HomePage extends StatefulWidget { + HomePage({super.key, required this.loaded, required this.position, this.googleUser1}); + GoogleSignInAccount? googleUser1; + + final bool loaded; + final LatLng position; + + @override + State createState() => _HomePage(); +} + +class _HomePage extends State { + bool typing = false; + String _currentPage = "Search"; + List pageKeys = ["Search", "Drive", "Inbox", "Trips", "Profile"]; + final Map> _navigatorKeys = { + "Search": GlobalKey(), + "Drive": GlobalKey(), + "Inbox": GlobalKey(), + "Trips": GlobalKey(), + "Profile": GlobalKey(), + }; + int _selectedIndex = 0; + + void _selectTab(String tabItem, int index){ + if(tabItem == _currentPage ){ + _navigatorKeys[tabItem]?.currentState?.popUntil((route) => route.isFirst); + }else { + setState(() { + _currentPage = pageKeys[index]; + _selectedIndex = index; + }); + } + } + + @override + Widget build(BuildContext context) { + return MaterialApp( + theme: ThemeData( + useMaterial3: true, + colorSchemeSeed: Colors.grey[200], + ), + home: Scaffold( + body: Center( + child: Stack( + children: [ + _buildOffstageNavigator("Search"), + _buildOffstageNavigator("Drive"), + _buildOffstageNavigator("Inbox"), + _buildOffstageNavigator("Trips"), + _buildOffstageNavigator("Profile") + ], + ), + ), + bottomNavigationBar: BottomNavigationBar( + type: BottomNavigationBarType.fixed, + onTap: (int index) { _selectTab(pageKeys[index], index); }, + currentIndex: _selectedIndex, + items: const [ + BottomNavigationBarItem( + icon: Icon(Icons.search), + label: 'Search', + ), + BottomNavigationBarItem( + icon: Icon(Icons.key), + label: 'Drive', + ), + BottomNavigationBarItem( + icon: Icon(Icons.chat), + label: 'Inbox', + ), + BottomNavigationBarItem( + icon: Icon(Icons.calendar_today), + label: 'Trips', + ), + BottomNavigationBarItem( + icon: Icon(Icons.account_circle_outlined), + label: 'Profile', + ), + ], + selectedItemColor: Colors.pink, + unselectedItemColor : Colors.blueGrey, + showUnselectedLabels: true, + elevation: 0.5, + // onTap: _onItemTapped, + ) + ), + ); + } + + Widget _buildOffstageNavigator(String tabItem) { + return Offstage( + offstage: _currentPage != tabItem, + child: TabNavigator( + navigatorKey: _navigatorKeys[tabItem]!, + tabItem: tabItem, + loaded: widget.loaded, + position: widget.position + ), + ); + } +} \ No newline at end of file diff --git a/finalproject/lib/trips.dart b/finalproject/lib/trips.dart new file mode 100755 index 0000000..4797482 --- /dev/null +++ b/finalproject/lib/trips.dart @@ -0,0 +1,69 @@ +import 'package:flutter/material.dart'; + +// ignore: camel_case_types +class Tripspage extends StatelessWidget { + const Tripspage({super.key}); + + @override + Widget build(BuildContext context) { + return MaterialApp( + title: 'Splash Screen', + theme: ThemeData( + primarySwatch: Colors.green, + ), + home: const MyHomePage(), + debugShowCheckedModeBanner: false, + ); + } +} + +class MyHomePage extends StatefulWidget { + const MyHomePage({Key? key}) : super(key: key); + @override + State createState() => _MyHomePageState(); +} + +class _MyHomePageState extends State { + @override + void initState() { + super.initState(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: const Text( + "History", + style: TextStyle( + fontSize: 24, fontWeight: FontWeight.bold, color: Colors.black), + ), + centerTitle: true, + backgroundColor: Colors.white, + ), + body: Padding( + padding: const EdgeInsets.only(left: 16, right: 16, top: 16), + child: Column( + children: [ + TextField( + decoration: InputDecoration( + hintText: "Search", + hintStyle: const TextStyle(color: Colors.grey), + prefixIcon: const Icon(Icons.search, color: Colors.grey, size: 20), + contentPadding: const EdgeInsets.all(8), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(20), + borderSide: const BorderSide( + color: Colors.grey, + ), + ), + ), + ), + const SizedBox(height: 50), + Image.asset('assets/trips.png'), + ], + ), + ), + ); + } +} \ No newline at end of file diff --git a/finalproject/lib/user_profile.dart b/finalproject/lib/user_profile.dart new file mode 100755 index 0000000..1c673b0 --- /dev/null +++ b/finalproject/lib/user_profile.dart @@ -0,0 +1,9 @@ +class Userdetails +{ + String user_name; + String user_email; + + Userdetails({ + required this.user_name, + required this.user_email}); +} \ No newline at end of file diff --git a/finalproject/linux/.gitignore b/finalproject/linux/.gitignore new file mode 100755 index 0000000..c7ea17f --- /dev/null +++ b/finalproject/linux/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/finalproject/linux/CMakeLists.txt b/finalproject/linux/CMakeLists.txt new file mode 100755 index 0000000..2650db4 --- /dev/null +++ b/finalproject/linux/CMakeLists.txt @@ -0,0 +1,139 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.10) +project(runner LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "finalproject") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID +set(APPLICATION_ID "com.example.finalproject") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Load bundled libraries from the lib/ directory relative to the binary. +set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") + +# Root filesystem for cross-building. +if(FLUTTER_TARGET_PLATFORM_SYSROOT) + set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() + +# Define build configuration options. +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") +endif() + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_14) + target_compile_options(${TARGET} PRIVATE -Wall -Werror) + target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") + target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) + +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) + +# Only the install-generated bundle's copy of the executable will launch +# correctly, since the resources must in the right relative locations. To avoid +# people trying to run the unbundled copy, put it in a subdirectory instead of +# the default top-level location. +set_target_properties(${BINARY_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" +) + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# By default, "installing" just makes a relocatable bundle in the build +# directory. +set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +# Start with a clean build bundle directory every time. +install(CODE " + file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") + " COMPONENT Runtime) + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) + install(FILES "${bundled_library}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endforeach(bundled_library) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") + install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() diff --git a/finalproject/linux/flutter/CMakeLists.txt b/finalproject/linux/flutter/CMakeLists.txt new file mode 100755 index 0000000..27860e8 --- /dev/null +++ b/finalproject/linux/flutter/CMakeLists.txt @@ -0,0 +1,88 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.10) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. + +# Serves the same purpose as list(TRANSFORM ... PREPEND ...), +# which isn't available in 3.10. +function(list_prepend LIST_NAME PREFIX) + set(NEW_LIST "") + foreach(element ${${LIST_NAME}}) + list(APPEND NEW_LIST "${PREFIX}${element}") + endforeach(element) + set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) +endfunction() + +# === Flutter Library === +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) +pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) +pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) + +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "fl_basic_message_channel.h" + "fl_binary_codec.h" + "fl_binary_messenger.h" + "fl_dart_project.h" + "fl_engine.h" + "fl_json_message_codec.h" + "fl_json_method_codec.h" + "fl_message_codec.h" + "fl_method_call.h" + "fl_method_channel.h" + "fl_method_codec.h" + "fl_method_response.h" + "fl_plugin_registrar.h" + "fl_plugin_registry.h" + "fl_standard_message_codec.h" + "fl_standard_method_codec.h" + "fl_string_codec.h" + "fl_value.h" + "fl_view.h" + "flutter_linux.h" +) +list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") +target_link_libraries(flutter INTERFACE + PkgConfig::GTK + PkgConfig::GLIB + PkgConfig::GIO +) +add_dependencies(flutter flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CMAKE_CURRENT_BINARY_DIR}/_phony_ + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" + ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} +) diff --git a/finalproject/linux/flutter/generated_plugin_registrant.cc b/finalproject/linux/flutter/generated_plugin_registrant.cc new file mode 100755 index 0000000..64a0ece --- /dev/null +++ b/finalproject/linux/flutter/generated_plugin_registrant.cc @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + +#include + +void fl_register_plugins(FlPluginRegistry* registry) { + g_autoptr(FlPluginRegistrar) file_selector_linux_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "FileSelectorPlugin"); + file_selector_plugin_register_with_registrar(file_selector_linux_registrar); +} diff --git a/finalproject/linux/flutter/generated_plugin_registrant.h b/finalproject/linux/flutter/generated_plugin_registrant.h new file mode 100755 index 0000000..e0f0a47 --- /dev/null +++ b/finalproject/linux/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void fl_register_plugins(FlPluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/finalproject/linux/flutter/generated_plugins.cmake b/finalproject/linux/flutter/generated_plugins.cmake new file mode 100755 index 0000000..2db3c22 --- /dev/null +++ b/finalproject/linux/flutter/generated_plugins.cmake @@ -0,0 +1,24 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST + file_selector_linux +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/finalproject/linux/main.cc b/finalproject/linux/main.cc new file mode 100755 index 0000000..4340ffc --- /dev/null +++ b/finalproject/linux/main.cc @@ -0,0 +1,6 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/finalproject/linux/my_application.cc b/finalproject/linux/my_application.cc new file mode 100755 index 0000000..9abcb5a --- /dev/null +++ b/finalproject/linux/my_application.cc @@ -0,0 +1,104 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "finalproject"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "finalproject"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/finalproject/linux/my_application.h b/finalproject/linux/my_application.h new file mode 100755 index 0000000..8f20fb5 --- /dev/null +++ b/finalproject/linux/my_application.h @@ -0,0 +1,18 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, + GtkApplication) + +/** + * my_application_new: + * + * Creates a new Flutter-based application. + * + * Returns: a new #MyApplication. + */ +MyApplication* my_application_new(); + +#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/finalproject/macos/.gitignore b/finalproject/macos/.gitignore new file mode 100755 index 0000000..d4e0569 --- /dev/null +++ b/finalproject/macos/.gitignore @@ -0,0 +1,7 @@ +# Flutter-related +**/Flutter/ephemeral/ +**/Pods/ + +# Xcode-related +**/dgph +**/xcuserdata/ diff --git a/finalproject/macos/Flutter/Flutter-Debug.xcconfig b/finalproject/macos/Flutter/Flutter-Debug.xcconfig new file mode 100755 index 0000000..f022c34 --- /dev/null +++ b/finalproject/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/finalproject/macos/Flutter/Flutter-Release.xcconfig b/finalproject/macos/Flutter/Flutter-Release.xcconfig new file mode 100755 index 0000000..f022c34 --- /dev/null +++ b/finalproject/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/finalproject/macos/Flutter/GeneratedPluginRegistrant.swift b/finalproject/macos/Flutter/GeneratedPluginRegistrant.swift new file mode 100755 index 0000000..6b4a51c --- /dev/null +++ b/finalproject/macos/Flutter/GeneratedPluginRegistrant.swift @@ -0,0 +1,20 @@ +// +// Generated file. Do not edit. +// + +import FlutterMacOS +import Foundation + +import cloud_firestore +import file_selector_macos +import firebase_auth +import firebase_core +import geolocator_apple + +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + FLTFirebaseFirestorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseFirestorePlugin")) + FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin")) + FLTFirebaseAuthPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseAuthPlugin")) + FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin")) + GeolocatorPlugin.register(with: registry.registrar(forPlugin: "GeolocatorPlugin")) +} diff --git a/finalproject/macos/Runner.xcodeproj/project.pbxproj b/finalproject/macos/Runner.xcodeproj/project.pbxproj new file mode 100755 index 0000000..6050961 --- /dev/null +++ b/finalproject/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,695 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Flutter Assemble"; + productName = FLX; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC111A2044C6BA0003C045; + remoteInfo = FLX; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 33CC110E2044A8840003C045 /* Bundle Framework */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Bundle Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* finalproject.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "finalproject.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, + 33CC10EE2044A3C60003C045 /* Products */, + D73912EC22F37F3D000D13A0 /* Frameworks */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* finalproject.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + D73912EC22F37F3D000D13A0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* finalproject.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1430; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10E92044A3C60003C045 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + path = Runner; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.finalproject.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/finalproject.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/finalproject"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.finalproject.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/finalproject.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/finalproject"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.finalproject.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/finalproject.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/finalproject"; + }; + name = Profile; + }; + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Profile; + }; + 338D0CEA231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Profile; + }; + 338D0CEB231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Profile; + }; + 33CC10F92044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 33CC10FA2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 33CC10FC2044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 33CC10FD2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 33CC111C2044C6BA0003C045 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 33CC111D2044C6BA0003C045 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10F92044A3C60003C045 /* Debug */, + 33CC10FA2044A3C60003C045 /* Release */, + 338D0CE9231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + 338D0CEA231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + 338D0CEB231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/finalproject/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/finalproject/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100755 index 0000000..fc6bf80 --- /dev/null +++ b/finalproject/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/finalproject/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/finalproject/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100755 index 0000000..f056a4e --- /dev/null +++ b/finalproject/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/finalproject/macos/Runner.xcworkspace/contents.xcworkspacedata b/finalproject/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100755 index 0000000..59c6d39 --- /dev/null +++ b/finalproject/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/finalproject/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/finalproject/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100755 index 0000000..fc6bf80 --- /dev/null +++ b/finalproject/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/finalproject/macos/Runner/AppDelegate.swift b/finalproject/macos/Runner/AppDelegate.swift new file mode 100755 index 0000000..553a135 --- /dev/null +++ b/finalproject/macos/Runner/AppDelegate.swift @@ -0,0 +1,9 @@ +import Cocoa +import FlutterMacOS + +@NSApplicationMain +class AppDelegate: FlutterAppDelegate { + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } +} diff --git a/finalproject/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/finalproject/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100755 index 0000000..8d4e7cb --- /dev/null +++ b/finalproject/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_64.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_1024.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/finalproject/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/finalproject/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png new file mode 100755 index 0000000..82b6f9d Binary files /dev/null and b/finalproject/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png differ diff --git a/finalproject/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/finalproject/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png new file mode 100755 index 0000000..13b35eb Binary files /dev/null and b/finalproject/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png differ diff --git a/finalproject/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/finalproject/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png new file mode 100755 index 0000000..0a3f5fa Binary files /dev/null and b/finalproject/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png differ diff --git a/finalproject/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/finalproject/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png new file mode 100755 index 0000000..bdb5722 Binary files /dev/null and b/finalproject/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png differ diff --git a/finalproject/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png b/finalproject/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png new file mode 100755 index 0000000..f083318 Binary files /dev/null and b/finalproject/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png differ diff --git a/finalproject/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/finalproject/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png new file mode 100755 index 0000000..326c0e7 Binary files /dev/null and b/finalproject/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png differ diff --git a/finalproject/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/finalproject/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png new file mode 100755 index 0000000..2f1632c Binary files /dev/null and b/finalproject/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png differ diff --git a/finalproject/macos/Runner/Base.lproj/MainMenu.xib b/finalproject/macos/Runner/Base.lproj/MainMenu.xib new file mode 100755 index 0000000..4632c69 --- /dev/null +++ b/finalproject/macos/Runner/Base.lproj/MainMenu.xib @@ -0,0 +1,343 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/finalproject/macos/Runner/Configs/AppInfo.xcconfig b/finalproject/macos/Runner/Configs/AppInfo.xcconfig new file mode 100755 index 0000000..891e72a --- /dev/null +++ b/finalproject/macos/Runner/Configs/AppInfo.xcconfig @@ -0,0 +1,14 @@ +// Application-level settings for the Runner target. +// +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the +// future. If not, the values below would default to using the project name when this becomes a +// 'flutter create' template. + +// The application's name. By default this is also the title of the Flutter window. +PRODUCT_NAME = finalproject + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = com.example.finalproject + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2023 com.example. All rights reserved. diff --git a/finalproject/macos/Runner/Configs/Debug.xcconfig b/finalproject/macos/Runner/Configs/Debug.xcconfig new file mode 100755 index 0000000..b398823 --- /dev/null +++ b/finalproject/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/finalproject/macos/Runner/Configs/Release.xcconfig b/finalproject/macos/Runner/Configs/Release.xcconfig new file mode 100755 index 0000000..d93e5dc --- /dev/null +++ b/finalproject/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/finalproject/macos/Runner/Configs/Warnings.xcconfig b/finalproject/macos/Runner/Configs/Warnings.xcconfig new file mode 100755 index 0000000..fb4d7d3 --- /dev/null +++ b/finalproject/macos/Runner/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings +GCC_WARN_UNDECLARED_SELECTOR = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES +CLANG_WARN_PRAGMA_PACK = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +GCC_WARN_STRICT_SELECTOR_MATCH = YES +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES +GCC_WARN_SHADOW = YES +CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/finalproject/macos/Runner/DebugProfile.entitlements b/finalproject/macos/Runner/DebugProfile.entitlements new file mode 100755 index 0000000..51d0967 --- /dev/null +++ b/finalproject/macos/Runner/DebugProfile.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.network.server + + + diff --git a/finalproject/macos/Runner/GoogleService-Info.plist b/finalproject/macos/Runner/GoogleService-Info.plist new file mode 100755 index 0000000..d28df21 --- /dev/null +++ b/finalproject/macos/Runner/GoogleService-Info.plist @@ -0,0 +1,30 @@ + + + + + API_KEY + AIzaSyAPdxrWpt2ua6W9wb8m4qygOrTfxt5tWh4 + GCM_SENDER_ID + 612408492430 + PLIST_VERSION + 1 + BUNDLE_ID + com.example.finalproject.RunnerTests + PROJECT_ID + fp-467 + STORAGE_BUCKET + fp-467.appspot.com + IS_ADS_ENABLED + + IS_ANALYTICS_ENABLED + + IS_APPINVITE_ENABLED + + IS_GCM_ENABLED + + IS_SIGNIN_ENABLED + + GOOGLE_APP_ID + 1:612408492430:ios:4a064360bbb68e453b24df + + \ No newline at end of file diff --git a/finalproject/macos/Runner/Info.plist b/finalproject/macos/Runner/Info.plist new file mode 100755 index 0000000..3733c1a --- /dev/null +++ b/finalproject/macos/Runner/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/finalproject/macos/Runner/MainFlutterWindow.swift b/finalproject/macos/Runner/MainFlutterWindow.swift new file mode 100755 index 0000000..ab30cba --- /dev/null +++ b/finalproject/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/finalproject/macos/Runner/Release.entitlements b/finalproject/macos/Runner/Release.entitlements new file mode 100755 index 0000000..04336df --- /dev/null +++ b/finalproject/macos/Runner/Release.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + diff --git a/finalproject/macos/RunnerTests/RunnerTests.swift b/finalproject/macos/RunnerTests/RunnerTests.swift new file mode 100755 index 0000000..ba12981 --- /dev/null +++ b/finalproject/macos/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import FlutterMacOS +import Cocoa +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/finalproject/macos/firebase_app_id_file.json b/finalproject/macos/firebase_app_id_file.json new file mode 100755 index 0000000..7f7fa06 --- /dev/null +++ b/finalproject/macos/firebase_app_id_file.json @@ -0,0 +1,7 @@ +{ + "file_generated_by": "FlutterFire CLI", + "purpose": "FirebaseAppID & ProjectID for this Firebase app in this directory", + "GOOGLE_APP_ID": "1:612408492430:ios:4a064360bbb68e453b24df", + "FIREBASE_PROJECT_ID": "fp-467", + "GCM_SENDER_ID": "612408492430" +} \ No newline at end of file diff --git a/finalproject/pubspec.lock b/finalproject/pubspec.lock new file mode 100755 index 0000000..b6280c8 --- /dev/null +++ b/finalproject/pubspec.lock @@ -0,0 +1,778 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + _fe_analyzer_shared: + dependency: transitive + description: + name: _fe_analyzer_shared + sha256: ae92f5d747aee634b87f89d9946000c2de774be1d6ac3e58268224348cd0101a + url: "https://pub.dev" + source: hosted + version: "61.0.0" + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + sha256: eb0ac20f704799b986049fbb3c1c16421eca319a1b872378d669513e12452ba5 + url: "https://pub.dev" + source: hosted + version: "1.3.14" + analyzer: + dependency: transitive + description: + name: analyzer + sha256: ea3d8652bda62982addfd92fdc2d0214e5f82e43325104990d4f4c4a2a313562 + url: "https://pub.dev" + source: hosted + version: "5.13.0" + args: + dependency: transitive + description: + name: args + sha256: eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596 + url: "https://pub.dev" + source: hosted + version: "2.4.2" + async: + dependency: transitive + description: + name: async + sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" + url: "https://pub.dev" + source: hosted + version: "2.11.0" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + characters: + dependency: transitive + description: + name: characters + sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" + url: "https://pub.dev" + source: hosted + version: "1.3.0" + clock: + dependency: transitive + description: + name: clock + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.dev" + source: hosted + version: "1.1.1" + cloud_firestore: + dependency: "direct main" + description: + name: cloud_firestore + sha256: "8fa76be13bf33c7e1521794d8f43e94abb83515201667d00a1e0063351867200" + url: "https://pub.dev" + source: hosted + version: "4.13.3" + cloud_firestore_platform_interface: + dependency: transitive + description: + name: cloud_firestore_platform_interface + sha256: "5683de3ed02dded4857882493a7f359dff8cb9941ef36fa707f1b1cbde054838" + url: "https://pub.dev" + source: hosted + version: "6.0.7" + cloud_firestore_web: + dependency: transitive + description: + name: cloud_firestore_web + sha256: "29ed06af42c224e2ada69344b6d42e3d4c5e37f3931ea790733e859c0e5bfbf8" + url: "https://pub.dev" + source: hosted + version: "3.8.7" + collection: + dependency: transitive + description: + name: collection + sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 + url: "https://pub.dev" + source: hosted + version: "1.17.2" + convert: + dependency: transitive + description: + name: convert + sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" + url: "https://pub.dev" + source: hosted + version: "3.1.1" + cross_file: + dependency: transitive + description: + name: cross_file + sha256: "2f9d2cbccb76127ba28528cb3ae2c2326a122446a83de5a056aaa3880d3882c5" + url: "https://pub.dev" + source: hosted + version: "0.3.3+7" + crypto: + dependency: transitive + description: + name: crypto + sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab + url: "https://pub.dev" + source: hosted + version: "3.0.3" + csslib: + dependency: transitive + description: + name: csslib + sha256: "706b5707578e0c1b4b7550f64078f0a0f19dec3f50a178ffae7006b0a9ca58fb" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + cupertino_icons: + dependency: "direct main" + description: + name: cupertino_icons + sha256: d57953e10f9f8327ce64a508a355f0b1ec902193f66288e8cb5070e7c47eeb2d + url: "https://pub.dev" + source: hosted + version: "1.0.6" + dio: + dependency: transitive + description: + name: dio + sha256: "7d328c4d898a61efc3cd93655a0955858e29a0aa647f0f9e02d59b3bb275e2e8" + url: "https://pub.dev" + source: hosted + version: "4.0.6" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" + source: hosted + version: "1.3.1" + file: + dependency: transitive + description: + name: file + sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" + url: "https://pub.dev" + source: hosted + version: "7.0.0" + file_selector_linux: + dependency: transitive + description: + name: file_selector_linux + sha256: "045d372bf19b02aeb69cacf8b4009555fb5f6f0b7ad8016e5f46dd1387ddd492" + url: "https://pub.dev" + source: hosted + version: "0.9.2+1" + file_selector_macos: + dependency: transitive + description: + name: file_selector_macos + sha256: b15c3da8bd4908b9918111fa486903f5808e388b8d1c559949f584725a6594d6 + url: "https://pub.dev" + source: hosted + version: "0.9.3+3" + file_selector_platform_interface: + dependency: transitive + description: + name: file_selector_platform_interface + sha256: "0aa47a725c346825a2bd396343ce63ac00bda6eff2fbc43eabe99737dede8262" + url: "https://pub.dev" + source: hosted + version: "2.6.1" + file_selector_windows: + dependency: transitive + description: + name: file_selector_windows + sha256: d3547240c20cabf205c7c7f01a50ecdbc413755814d6677f3cb366f04abcead0 + url: "https://pub.dev" + source: hosted + version: "0.9.3+1" + firebase_auth: + dependency: "direct main" + description: + name: firebase_auth + sha256: "869ff488c7b467e273d7be223f52d3d026576b6e1da92dcd136ff627ae0a8c67" + url: "https://pub.dev" + source: hosted + version: "4.15.0" + firebase_auth_platform_interface: + dependency: transitive + description: + name: firebase_auth_platform_interface + sha256: ecf9f78ae1a7a1297de01ec975e9e2cfe5b543589b27cc5969849d9a8dc46999 + url: "https://pub.dev" + source: hosted + version: "7.0.6" + firebase_auth_web: + dependency: transitive + description: + name: firebase_auth_web + sha256: "96f89e2340cdf373109cb29afec401c170aa2d98fb0833687793c8017e36f435" + url: "https://pub.dev" + source: hosted + version: "5.8.9" + firebase_core: + dependency: "direct main" + description: + name: firebase_core + sha256: d301561d614487688d797717bef013a264c517d1d09e4c5c1325c3a64c835efb + url: "https://pub.dev" + source: hosted + version: "2.24.0" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + sha256: c437ae5d17e6b5cc7981cf6fd458a5db4d12979905f9aafd1fea930428a9fe63 + url: "https://pub.dev" + source: hosted + version: "5.0.0" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + sha256: "10159d9ee42c79f4548971d92f3f0fcd5791f6738cda3583a4e3b2c8b244c018" + url: "https://pub.dev" + source: hosted + version: "2.9.0" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + sha256: e2a421b7e59244faef694ba7b30562e489c2b489866e505074eb005cd7060db7 + url: "https://pub.dev" + source: hosted + version: "3.0.1" + flutter_plugin_android_lifecycle: + dependency: transitive + description: + name: flutter_plugin_android_lifecycle + sha256: b068ffc46f82a55844acfa4fdbb61fad72fa2aef0905548419d97f0f95c456da + url: "https://pub.dev" + source: hosted + version: "2.0.17" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + geoflutterfire2: + dependency: "direct main" + description: + name: geoflutterfire2 + sha256: "343a3ef87f81f39e64a2b82ee392efa93fa646475564853daca565afc38096bb" + url: "https://pub.dev" + source: hosted + version: "2.3.15" + geolocator: + dependency: "direct main" + description: + name: geolocator + sha256: e946395fc608842bb2f6c914807e9183f86f3cb787f6b8f832753e5251036f02 + url: "https://pub.dev" + source: hosted + version: "10.1.0" + geolocator_android: + dependency: transitive + description: + name: geolocator_android + sha256: "741579fa6c9e412984d2bdb2fbaa54e3c3f7587c60aeacfe6e058358a11f40f8" + url: "https://pub.dev" + source: hosted + version: "4.4.0" + geolocator_apple: + dependency: transitive + description: + name: geolocator_apple + sha256: ab90ae811c42ec2f6021e01eca71df00dee6ff1e69d2c2dafd4daeb0b793f73d + url: "https://pub.dev" + source: hosted + version: "2.3.2" + geolocator_platform_interface: + dependency: transitive + description: + name: geolocator_platform_interface + sha256: "6c8d494d6948757c56720b778af742f6973f31fca1f702a7539b8917e4a2468a" + url: "https://pub.dev" + source: hosted + version: "4.2.0" + geolocator_web: + dependency: transitive + description: + name: geolocator_web + sha256: "59083f7e0871b78299918d92bf930a14377f711d2d1156c558cd5ebae6c20d58" + url: "https://pub.dev" + source: hosted + version: "2.2.0" + geolocator_windows: + dependency: transitive + description: + name: geolocator_windows + sha256: a92fae29779d5c6dc60e8411302f5221ade464968fe80a36d330e80a71f087af + url: "https://pub.dev" + source: hosted + version: "0.2.2" + glob: + dependency: transitive + description: + name: glob + sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + google_identity_services_web: + dependency: transitive + description: + name: google_identity_services_web + sha256: "000b7a31e1fa17ee04b6c0553a2b2ea18f9f9352e4dcc0c9fcc785cf10f2484e" + url: "https://pub.dev" + source: hosted + version: "0.2.2" + google_maps: + dependency: transitive + description: + name: google_maps + sha256: "555d5d736339b0478e821167ac521c810d7b51c3b2734e6802a9f046b64ea37a" + url: "https://pub.dev" + source: hosted + version: "6.3.0" + google_maps_flutter: + dependency: "direct main" + description: + name: google_maps_flutter + sha256: d4914cb38b3dcb62c39c085d968d434de0f8050f00f4d9f5ba4a7c7e004934cb + url: "https://pub.dev" + source: hosted + version: "2.5.0" + google_maps_flutter_android: + dependency: transitive + description: + name: google_maps_flutter_android + sha256: "4279a338b79288fad5c8b03e5ae6ec30888bff210e0bab10b1f31f31e5a90558" + url: "https://pub.dev" + source: hosted + version: "2.6.0" + google_maps_flutter_ios: + dependency: transitive + description: + name: google_maps_flutter_ios + sha256: "6ad65362aeeeda44b7c2c807e36bf578ef4b1c163882e085bdb040bf2934b246" + url: "https://pub.dev" + source: hosted + version: "2.3.3" + google_maps_flutter_platform_interface: + dependency: transitive + description: + name: google_maps_flutter_platform_interface + sha256: a3e9e6896501e566d902c6c69f010834d410ef4b7b5c18b90c77e871c86b7907 + url: "https://pub.dev" + source: hosted + version: "2.4.1" + google_maps_flutter_web: + dependency: "direct main" + description: + name: google_maps_flutter_web + sha256: f893d1542c6562bc8299ef768fbbe92ade83c220ab3209b9477ec9f81ad585e4 + url: "https://pub.dev" + source: hosted + version: "0.5.4+2" + google_places_flutter: + dependency: "direct main" + description: + name: google_places_flutter + sha256: "02b81fee590a694a096ea5a7882b31b7cef69994a88833ed02318cadb3343a20" + url: "https://pub.dev" + source: hosted + version: "2.0.6" + google_sign_in: + dependency: "direct main" + description: + name: google_sign_in + sha256: "8f8b94880f2753ccb796744259da529674e49b9af2e372abf6978c590c0ebfef" + url: "https://pub.dev" + source: hosted + version: "6.1.6" + google_sign_in_android: + dependency: transitive + description: + name: google_sign_in_android + sha256: "6031f59074a337fdd81be821aba84cee3a41338c6e958499a5cd34d3e1db80ef" + url: "https://pub.dev" + source: hosted + version: "6.1.20" + google_sign_in_ios: + dependency: transitive + description: + name: google_sign_in_ios + sha256: "81495441405c138e3c638f5097bebaa0db644567b3976e08944cfb8926ff2e6d" + url: "https://pub.dev" + source: hosted + version: "5.6.5" + google_sign_in_platform_interface: + dependency: transitive + description: + name: google_sign_in_platform_interface + sha256: "35ceee5f0eadc1c07b0b4af7553246e315c901facbb7d3dadf734ba2693ceec4" + url: "https://pub.dev" + source: hosted + version: "2.4.2" + google_sign_in_web: + dependency: transitive + description: + name: google_sign_in_web + sha256: "794f5494a945d6dd2654c52f979594ecd2558e5c82ce8272295ba371c93015e6" + url: "https://pub.dev" + source: hosted + version: "0.12.2+1" + html: + dependency: transitive + description: + name: html + sha256: "3a7812d5bcd2894edf53dfaf8cd640876cf6cef50a8f238745c8b8120ea74d3a" + url: "https://pub.dev" + source: hosted + version: "0.15.4" + http: + dependency: transitive + description: + name: http + sha256: "5895291c13fa8a3bd82e76d5627f69e0d85ca6a30dcac95c4ea19a5d555879c2" + url: "https://pub.dev" + source: hosted + version: "0.13.6" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + url: "https://pub.dev" + source: hosted + version: "4.0.2" + image_picker: + dependency: "direct main" + description: + name: image_picker + sha256: "7d7f2768df2a8b0a3cefa5ef4f84636121987d403130e70b17ef7e2cf650ba84" + url: "https://pub.dev" + source: hosted + version: "1.0.4" + image_picker_android: + dependency: transitive + description: + name: image_picker_android + sha256: d6a6e78821086b0b737009b09363018309bbc6de3fd88cc5c26bc2bb44a4957f + url: "https://pub.dev" + source: hosted + version: "0.8.8+2" + image_picker_for_web: + dependency: transitive + description: + name: image_picker_for_web + sha256: "50bc9ae6a77eea3a8b11af5eb6c661eeb858fdd2f734c2a4fd17086922347ef7" + url: "https://pub.dev" + source: hosted + version: "3.0.1" + image_picker_ios: + dependency: transitive + description: + name: image_picker_ios + sha256: "76ec722aeea419d03aa915c2c96bf5b47214b053899088c9abb4086ceecf97a7" + url: "https://pub.dev" + source: hosted + version: "0.8.8+4" + image_picker_linux: + dependency: transitive + description: + name: image_picker_linux + sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_macos: + dependency: transitive + description: + name: image_picker_macos + sha256: "3f5ad1e8112a9a6111c46d0b57a7be2286a9a07fc6e1976fdf5be2bd31d4ff62" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_platform_interface: + dependency: transitive + description: + name: image_picker_platform_interface + sha256: ed9b00e63977c93b0d2d2b343685bed9c324534ba5abafbb3dfbd6a780b1b514 + url: "https://pub.dev" + source: hosted + version: "2.9.1" + image_picker_windows: + dependency: transitive + description: + name: image_picker_windows + sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + js: + dependency: transitive + description: + name: js + sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 + url: "https://pub.dev" + source: hosted + version: "0.6.7" + js_wrapping: + dependency: transitive + description: + name: js_wrapping + sha256: e385980f7c76a8c1c9a560dfb623b890975841542471eade630b2871d243851c + url: "https://pub.dev" + source: hosted + version: "0.7.4" + lints: + dependency: transitive + description: + name: lints + sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290 + url: "https://pub.dev" + source: hosted + version: "3.0.0" + matcher: + dependency: transitive + description: + name: matcher + sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + url: "https://pub.dev" + source: hosted + version: "0.12.16" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + url: "https://pub.dev" + source: hosted + version: "0.5.0" + meta: + dependency: transitive + description: + name: meta + sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" + url: "https://pub.dev" + source: hosted + version: "1.9.1" + mime: + dependency: transitive + description: + name: mime + sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e + url: "https://pub.dev" + source: hosted + version: "1.0.4" + package_config: + dependency: transitive + description: + name: package_config + sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + path: + dependency: transitive + description: + name: path + sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + url: "https://pub.dev" + source: hosted + version: "1.8.3" + pigeon: + dependency: transitive + description: + name: pigeon + sha256: "5a79fd0b10423f6b5705525e32015597f861c31220b522a67d1e6b580da96719" + url: "https://pub.dev" + source: hosted + version: "11.0.1" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + sha256: f4f88d4a900933e7267e2b353594774fc0d07fb072b47eedcd5b54e1ea3269f8 + url: "https://pub.dev" + source: hosted + version: "2.1.7" + pub_semver: + dependency: transitive + description: + name: pub_semver + sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + quiver: + dependency: transitive + description: + name: quiver + sha256: b1c1ac5ce6688d77f65f3375a9abb9319b3cb32486bdc7a1e0fdf004d7ba4e47 + url: "https://pub.dev" + source: hosted + version: "3.2.1" + rxdart: + dependency: transitive + description: + name: rxdart + sha256: "0c7c0cedd93788d996e33041ffecda924cc54389199cde4e6a34b440f50044cb" + url: "https://pub.dev" + source: hosted + version: "0.27.7" + sanitize_html: + dependency: transitive + description: + name: sanitize_html + sha256: "12669c4a913688a26555323fb9cec373d8f9fbe091f2d01c40c723b33caa8989" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + search_map_place_updated: + dependency: "direct main" + description: + name: search_map_place_updated + sha256: "3b1e5cb6ce0bfba3395d9020246af93c6209966cda4594f25e031918b9f22cdf" + url: "https://pub.dev" + source: hosted + version: "0.0.4" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_span: + dependency: transitive + description: + name: source_span + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + url: "https://pub.dev" + source: hosted + version: "1.10.0" + sprintf: + dependency: transitive + description: + name: sprintf + sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" + url: "https://pub.dev" + source: hosted + version: "7.0.0" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + url: "https://pub.dev" + source: hosted + version: "1.11.0" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + stream_transform: + dependency: transitive + description: + name: stream_transform + sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" + source: hosted + version: "1.2.1" + test_api: + dependency: transitive + description: + name: test_api + sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8" + url: "https://pub.dev" + source: hosted + version: "0.6.0" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c + url: "https://pub.dev" + source: hosted + version: "1.3.2" + uuid: + dependency: transitive + description: + name: uuid + sha256: df5a4d8f22ee4ccd77f8839ac7cb274ebc11ef9adcce8b92be14b797fe889921 + url: "https://pub.dev" + source: hosted + version: "4.2.1" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + watcher: + dependency: transitive + description: + name: watcher + sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + web: + dependency: transitive + description: + name: web + sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10 + url: "https://pub.dev" + source: hosted + version: "0.1.4-beta" + yaml: + dependency: transitive + description: + name: yaml + sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" + url: "https://pub.dev" + source: hosted + version: "3.1.2" +sdks: + dart: ">=3.1.0 <4.0.0" + flutter: ">=3.13.0" diff --git a/finalproject/pubspec.yaml b/finalproject/pubspec.yaml new file mode 100755 index 0000000..8fb4e96 --- /dev/null +++ b/finalproject/pubspec.yaml @@ -0,0 +1,113 @@ +name: finalproject +description: A new Flutter project. +# The following line prevents the package from being accidentally published to +# pub.dev using `flutter pub publish`. This is preferred for private packages. +publish_to: 'none' # Remove this line if you wish to publish to pub.dev + +# The following defines the version and build number for your application. +# A version number is three numbers separated by dots, like 1.2.43 +# followed by an optional build number separated by a +. +# Both the version and the builder number may be overridden in flutter +# build by specifying --build-name and --build-number, respectively. +# In Android, build-name is used as versionName while build-number used as versionCode. +# Read more about Android versioning at https://developer.android.com/studio/publish/versioning +# In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion. +# Read more about iOS versioning at +# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html +# In Windows, build-name is used as the major, minor, and patch parts +# of the product and file versions while build-number is used as the build suffix. +version: 1.0.0+1 + +environment: + sdk: '>=3.1.0 <4.0.0' + +# Dependencies specify other packages that your package needs in order to work. +# To automatically upgrade your package dependencies to the latest versions +# consider running `flutter pub upgrade --major-versions`. Alternatively, +# dependencies can be manually updated by changing the version numbers below to +# the latest version available on pub.dev. To see which dependencies have newer +# versions available, run `flutter pub outdated`. +dependencies: + flutter: + sdk: flutter + + + # The following adds the Cupertino Icons font to your application. + # Use with the CupertinoIcons class for iOS style icons. + cupertino_icons: ^1.0.2 + firebase_core: ^2.24.0 + firebase_auth: ^4.15.0 + google_sign_in: ^6.1.5 + cloud_firestore: ^4.13.3 + google_maps_flutter: ^2.5.0 + google_maps_flutter_web: ^0.5.4+2 + geolocator: ^10.1.0 + image_picker: ^1.0.4 + search_map_place_updated: ^0.0.4 + google_places_flutter: ^2.0.6 + geoflutterfire2: ^2.3.15 + +dev_dependencies: + flutter_test: + sdk: flutter + + # The "flutter_lints" package below contains a set of recommended lints to + # encourage good coding practices. The lint set provided by the package is + # activated in the `analysis_options.yaml` file located at the root of your + # package. See that file for information about deactivating specific lint + # rules and activating additional ones. + flutter_lints: ^3.0.1 + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec + +flutter: + assets: + - assets/google.png + - assets/dx logo.png + - assets/profile.jpg + - assets/camera.png + - assets/drivecar.png + - assets/inbox.png + - assets/Inboxpage.png + - assets/authantication.png + - assets/email.png + - assets/trips.png + +# The following section is specific to Flutter packages. + + # The following line ensures that the Material Icons font is + # included with your application, so that you can use the icons in + # the material Icons class. + uses-material-design: true + + # To add assets to your application, add an assets section, like this: + # assets: + # - images/a_dot_burr.jpeg + # - images/a_dot_ham.jpeg + + # An image asset can refer to one or more resolution-specific "variants", see + # https://flutter.dev/assets-and-images/#resolution-aware + + # For details regarding adding assets from package dependencies, see + # https://flutter.dev/assets-and-images/#from-packages + + # To add custom fonts to your application, add a fonts section here, + # in this "flutter" section. Each entry in this list should have a + # "family" key with the font family name, and a "fonts" key with a + # list giving the asset and other descriptors for the font. For + # example: + # fonts: + # - family: Schyler + # fonts: + # - asset: fonts/Schyler-Regular.ttf + # - asset: fonts/Schyler-Italic.ttf + # style: italic + # - family: Trajan Pro + # fonts: + # - asset: fonts/TrajanPro.ttf + # - asset: fonts/TrajanPro_Bold.ttf + # weight: 700 + # + # For details regarding fonts from package dependencies, + # see https://flutter.dev/custom-fonts/#from-packages \ No newline at end of file diff --git a/finalproject/test/widget_test.dart b/finalproject/test/widget_test.dart new file mode 100755 index 0000000..5208f72 --- /dev/null +++ b/finalproject/test/widget_test.dart @@ -0,0 +1,30 @@ +// This is a basic Flutter widget test. +// +// To perform an interaction with a widget in your test, use the WidgetTester +// utility in the flutter_test package. For example, you can send tap and scroll +// gestures. You can also use WidgetTester to find child widgets in the widget +// tree, read text, and verify that the values of widget properties are correct. + +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import 'package:finalproject/main.dart'; + +void main() { + testWidgets('Counter increments smoke test', (WidgetTester tester) async { + // Build our app and trigger a frame. + await tester.pumpWidget(const MyApp()); + + // Verify that our counter starts at 0. + expect(find.text('0'), findsOneWidget); + expect(find.text('1'), findsNothing); + + // Tap the '+' icon and trigger a frame. + await tester.tap(find.byIcon(Icons.add)); + await tester.pump(); + + // Verify that our counter has incremented. + expect(find.text('0'), findsNothing); + expect(find.text('1'), findsOneWidget); + }); +} diff --git a/finalproject/web/favicon.png b/finalproject/web/favicon.png new file mode 100755 index 0000000..8aaa46a Binary files /dev/null and b/finalproject/web/favicon.png differ diff --git a/finalproject/web/icons/Icon-192.png b/finalproject/web/icons/Icon-192.png new file mode 100755 index 0000000..b749bfe Binary files /dev/null and b/finalproject/web/icons/Icon-192.png differ diff --git a/finalproject/web/icons/Icon-512.png b/finalproject/web/icons/Icon-512.png new file mode 100755 index 0000000..88cfd48 Binary files /dev/null and b/finalproject/web/icons/Icon-512.png differ diff --git a/finalproject/web/icons/Icon-maskable-192.png b/finalproject/web/icons/Icon-maskable-192.png new file mode 100755 index 0000000..eb9b4d7 Binary files /dev/null and b/finalproject/web/icons/Icon-maskable-192.png differ diff --git a/finalproject/web/icons/Icon-maskable-512.png b/finalproject/web/icons/Icon-maskable-512.png new file mode 100755 index 0000000..d69c566 Binary files /dev/null and b/finalproject/web/icons/Icon-maskable-512.png differ diff --git a/finalproject/web/index.html b/finalproject/web/index.html new file mode 100755 index 0000000..57abece --- /dev/null +++ b/finalproject/web/index.html @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + finalproject + + + + + + + + + + diff --git a/finalproject/web/manifest.json b/finalproject/web/manifest.json new file mode 100755 index 0000000..5da6516 --- /dev/null +++ b/finalproject/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "finalproject", + "short_name": "finalproject", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} diff --git a/finalproject/windows/.gitignore b/finalproject/windows/.gitignore new file mode 100755 index 0000000..ec4098a --- /dev/null +++ b/finalproject/windows/.gitignore @@ -0,0 +1,17 @@ +flutter/ephemeral/ + +# Visual Studio user-specific files. +*.suo +*.user +*.userosscache +*.sln.docstates + +# Visual Studio build-related files. +x64/ +x86/ + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ diff --git a/finalproject/windows/CMakeLists.txt b/finalproject/windows/CMakeLists.txt new file mode 100755 index 0000000..300b2aa --- /dev/null +++ b/finalproject/windows/CMakeLists.txt @@ -0,0 +1,102 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.14) +project(finalproject LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "finalproject") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(VERSION 3.14...3.25) + +# Define build configuration option. +get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if(IS_MULTICONFIG) + set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" + CACHE STRING "" FORCE) +else() + if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") + endif() +endif() +# Define settings for the Profile build mode. +set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") +set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") +set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") +set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") + +# Use Unicode for all projects. +add_definitions(-DUNICODE -D_UNICODE) + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_17) + target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") + target_compile_options(${TARGET} PRIVATE /EHsc) + target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0") + target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# Support files are copied into place next to the executable, so that it can +# run in place. This is done instead of making a separate bundle (as on Linux) +# so that building and running from within Visual Studio will work. +set(BUILD_BUNDLE_DIR "$") +# Make the "install" step default, as it's required to run. +set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1) +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +if(PLUGIN_BUNDLED_LIBRARIES) + install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + CONFIGURATIONS Profile;Release + COMPONENT Runtime) diff --git a/finalproject/windows/flutter/CMakeLists.txt b/finalproject/windows/flutter/CMakeLists.txt new file mode 100755 index 0000000..3f71e17 --- /dev/null +++ b/finalproject/windows/flutter/CMakeLists.txt @@ -0,0 +1,104 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.14) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. +set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") + +# === Flutter Library === +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "flutter_export.h" + "flutter_windows.h" + "flutter_messenger.h" + "flutter_plugin_registrar.h" + "flutter_texture_registrar.h" +) +list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib") +add_dependencies(flutter flutter_assemble) + +# === Wrapper === +list(APPEND CPP_WRAPPER_SOURCES_CORE + "core_implementations.cc" + "standard_codec.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_PLUGIN + "plugin_registrar.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_APP + "flutter_engine.cc" + "flutter_view_controller.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/") + +# Wrapper sources needed for a plugin. +add_library(flutter_wrapper_plugin STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} +) +apply_standard_settings(flutter_wrapper_plugin) +set_target_properties(flutter_wrapper_plugin PROPERTIES + POSITION_INDEPENDENT_CODE ON) +set_target_properties(flutter_wrapper_plugin PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_link_libraries(flutter_wrapper_plugin PUBLIC flutter) +target_include_directories(flutter_wrapper_plugin PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_plugin flutter_assemble) + +# Wrapper sources needed for the runner. +add_library(flutter_wrapper_app STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_APP} +) +apply_standard_settings(flutter_wrapper_app) +target_link_libraries(flutter_wrapper_app PUBLIC flutter) +target_include_directories(flutter_wrapper_app PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_app flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_") +set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE) +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} + ${PHONY_OUTPUT} + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" + windows-x64 $ + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} +) diff --git a/finalproject/windows/flutter/generated_plugin_registrant.cc b/finalproject/windows/flutter/generated_plugin_registrant.cc new file mode 100755 index 0000000..8726002 --- /dev/null +++ b/finalproject/windows/flutter/generated_plugin_registrant.cc @@ -0,0 +1,26 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + +#include +#include +#include +#include +#include + +void RegisterPlugins(flutter::PluginRegistry* registry) { + CloudFirestorePluginCApiRegisterWithRegistrar( + registry->GetRegistrarForPlugin("CloudFirestorePluginCApi")); + FileSelectorWindowsRegisterWithRegistrar( + registry->GetRegistrarForPlugin("FileSelectorWindows")); + FirebaseAuthPluginCApiRegisterWithRegistrar( + registry->GetRegistrarForPlugin("FirebaseAuthPluginCApi")); + FirebaseCorePluginCApiRegisterWithRegistrar( + registry->GetRegistrarForPlugin("FirebaseCorePluginCApi")); + GeolocatorWindowsRegisterWithRegistrar( + registry->GetRegistrarForPlugin("GeolocatorWindows")); +} diff --git a/finalproject/windows/flutter/generated_plugin_registrant.h b/finalproject/windows/flutter/generated_plugin_registrant.h new file mode 100755 index 0000000..dc139d8 --- /dev/null +++ b/finalproject/windows/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void RegisterPlugins(flutter::PluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/finalproject/windows/flutter/generated_plugins.cmake b/finalproject/windows/flutter/generated_plugins.cmake new file mode 100755 index 0000000..55841aa --- /dev/null +++ b/finalproject/windows/flutter/generated_plugins.cmake @@ -0,0 +1,28 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST + cloud_firestore + file_selector_windows + firebase_auth + firebase_core + geolocator_windows +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/finalproject/windows/runner/CMakeLists.txt b/finalproject/windows/runner/CMakeLists.txt new file mode 100755 index 0000000..2041a04 --- /dev/null +++ b/finalproject/windows/runner/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.14) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} WIN32 + "flutter_window.cpp" + "main.cpp" + "utils.cpp" + "win32_window.cpp" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" + "Runner.rc" + "runner.exe.manifest" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + +# Disable Windows macros that collide with C++ standard library functions. +target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") + +# Add dependency libraries and include directories. Add any application-specific +# dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/finalproject/windows/runner/Runner.rc b/finalproject/windows/runner/Runner.rc new file mode 100755 index 0000000..e7cac42 --- /dev/null +++ b/finalproject/windows/runner/Runner.rc @@ -0,0 +1,121 @@ +// Microsoft Visual C++ generated resource script. +// +#pragma code_page(65001) +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_APP_ICON ICON "resources\\app_icon.ico" + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD +#else +#define VERSION_AS_NUMBER 1,0,0,0 +#endif + +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION +#else +#define VERSION_AS_STRING "1.0.0" +#endif + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VERSION_AS_NUMBER + PRODUCTVERSION VERSION_AS_NUMBER + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "com.example" "\0" + VALUE "FileDescription", "finalproject" "\0" + VALUE "FileVersion", VERSION_AS_STRING "\0" + VALUE "InternalName", "finalproject" "\0" + VALUE "LegalCopyright", "Copyright (C) 2023 com.example. All rights reserved." "\0" + VALUE "OriginalFilename", "finalproject.exe" "\0" + VALUE "ProductName", "finalproject" "\0" + VALUE "ProductVersion", VERSION_AS_STRING "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED diff --git a/finalproject/windows/runner/flutter_window.cpp b/finalproject/windows/runner/flutter_window.cpp new file mode 100755 index 0000000..c819cb0 --- /dev/null +++ b/finalproject/windows/runner/flutter_window.cpp @@ -0,0 +1,71 @@ +#include "flutter_window.h" + +#include + +#include "flutter/generated_plugin_registrant.h" + +FlutterWindow::FlutterWindow(const flutter::DartProject& project) + : project_(project) {} + +FlutterWindow::~FlutterWindow() {} + +bool FlutterWindow::OnCreate() { + if (!Win32Window::OnCreate()) { + return false; + } + + RECT frame = GetClientArea(); + + // The size here must match the window dimensions to avoid unnecessary surface + // creation / destruction in the startup path. + flutter_controller_ = std::make_unique( + frame.right - frame.left, frame.bottom - frame.top, project_); + // Ensure that basic setup of the controller was successful. + if (!flutter_controller_->engine() || !flutter_controller_->view()) { + return false; + } + RegisterPlugins(flutter_controller_->engine()); + SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + + // Flutter can complete the first frame before the "show window" callback is + // registered. The following call ensures a frame is pending to ensure the + // window is shown. It is a no-op if the first frame hasn't completed yet. + flutter_controller_->ForceRedraw(); + + return true; +} + +void FlutterWindow::OnDestroy() { + if (flutter_controller_) { + flutter_controller_ = nullptr; + } + + Win32Window::OnDestroy(); +} + +LRESULT +FlutterWindow::MessageHandler(HWND hwnd, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + // Give Flutter, including plugins, an opportunity to handle window messages. + if (flutter_controller_) { + std::optional result = + flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam, + lparam); + if (result) { + return *result; + } + } + + switch (message) { + case WM_FONTCHANGE: + flutter_controller_->engine()->ReloadSystemFonts(); + break; + } + + return Win32Window::MessageHandler(hwnd, message, wparam, lparam); +} diff --git a/finalproject/windows/runner/flutter_window.h b/finalproject/windows/runner/flutter_window.h new file mode 100755 index 0000000..28c2383 --- /dev/null +++ b/finalproject/windows/runner/flutter_window.h @@ -0,0 +1,33 @@ +#ifndef RUNNER_FLUTTER_WINDOW_H_ +#define RUNNER_FLUTTER_WINDOW_H_ + +#include +#include + +#include + +#include "win32_window.h" + +// A window that does nothing but host a Flutter view. +class FlutterWindow : public Win32Window { + public: + // Creates a new FlutterWindow hosting a Flutter view running |project|. + explicit FlutterWindow(const flutter::DartProject& project); + virtual ~FlutterWindow(); + + protected: + // Win32Window: + bool OnCreate() override; + void OnDestroy() override; + LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, + LPARAM const lparam) noexcept override; + + private: + // The project to run. + flutter::DartProject project_; + + // The Flutter instance hosted by this window. + std::unique_ptr flutter_controller_; +}; + +#endif // RUNNER_FLUTTER_WINDOW_H_ diff --git a/finalproject/windows/runner/main.cpp b/finalproject/windows/runner/main.cpp new file mode 100755 index 0000000..ca08648 --- /dev/null +++ b/finalproject/windows/runner/main.cpp @@ -0,0 +1,43 @@ +#include +#include +#include + +#include "flutter_window.h" +#include "utils.h" + +int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, + _In_ wchar_t *command_line, _In_ int show_command) { + // Attach to console when present (e.g., 'flutter run') or create a + // new console when running with a debugger. + if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { + CreateAndAttachConsole(); + } + + // Initialize COM, so that it is available for use in the library and/or + // plugins. + ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); + + flutter::DartProject project(L"data"); + + std::vector command_line_arguments = + GetCommandLineArguments(); + + project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); + + FlutterWindow window(project); + Win32Window::Point origin(10, 10); + Win32Window::Size size(1280, 720); + if (!window.Create(L"finalproject", origin, size)) { + return EXIT_FAILURE; + } + window.SetQuitOnClose(true); + + ::MSG msg; + while (::GetMessage(&msg, nullptr, 0, 0)) { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + + ::CoUninitialize(); + return EXIT_SUCCESS; +} diff --git a/finalproject/windows/runner/resource.h b/finalproject/windows/runner/resource.h new file mode 100755 index 0000000..ddc7f3e --- /dev/null +++ b/finalproject/windows/runner/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Runner.rc +// +#define IDI_APP_ICON 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/finalproject/windows/runner/resources/app_icon.ico b/finalproject/windows/runner/resources/app_icon.ico new file mode 100755 index 0000000..c04e20c Binary files /dev/null and b/finalproject/windows/runner/resources/app_icon.ico differ diff --git a/finalproject/windows/runner/runner.exe.manifest b/finalproject/windows/runner/runner.exe.manifest new file mode 100755 index 0000000..157e871 --- /dev/null +++ b/finalproject/windows/runner/runner.exe.manifest @@ -0,0 +1,20 @@ + + + + + PerMonitorV2 + + + + + + + + + + + + + + + diff --git a/finalproject/windows/runner/utils.cpp b/finalproject/windows/runner/utils.cpp new file mode 100755 index 0000000..fc55c57 --- /dev/null +++ b/finalproject/windows/runner/utils.cpp @@ -0,0 +1,65 @@ +#include "utils.h" + +#include +#include +#include +#include + +#include + +void CreateAndAttachConsole() { + if (::AllocConsole()) { + FILE *unused; + if (freopen_s(&unused, "CONOUT$", "w", stdout)) { + _dup2(_fileno(stdout), 1); + } + if (freopen_s(&unused, "CONOUT$", "w", stderr)) { + _dup2(_fileno(stdout), 2); + } + std::ios::sync_with_stdio(); + FlutterDesktopResyncOutputStreams(); + } +} + +std::vector GetCommandLineArguments() { + // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. + int argc; + wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); + if (argv == nullptr) { + return std::vector(); + } + + std::vector command_line_arguments; + + // Skip the first argument as it's the binary name. + for (int i = 1; i < argc; i++) { + command_line_arguments.push_back(Utf8FromUtf16(argv[i])); + } + + ::LocalFree(argv); + + return command_line_arguments; +} + +std::string Utf8FromUtf16(const wchar_t* utf16_string) { + if (utf16_string == nullptr) { + return std::string(); + } + int target_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); + std::string utf8_string; + if (target_length <= 0 || target_length > utf8_string.max_size()) { + return utf8_string; + } + utf8_string.resize(target_length); + int converted_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + input_length, utf8_string.data(), target_length, nullptr, nullptr); + if (converted_length == 0) { + return std::string(); + } + return utf8_string; +} diff --git a/finalproject/windows/runner/utils.h b/finalproject/windows/runner/utils.h new file mode 100755 index 0000000..3f0e05c --- /dev/null +++ b/finalproject/windows/runner/utils.h @@ -0,0 +1,19 @@ +#ifndef RUNNER_UTILS_H_ +#define RUNNER_UTILS_H_ + +#include +#include + +// Creates a console for the process, and redirects stdout and stderr to +// it for both the runner and the Flutter library. +void CreateAndAttachConsole(); + +// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string +// encoded in UTF-8. Returns an empty std::string on failure. +std::string Utf8FromUtf16(const wchar_t* utf16_string); + +// Gets the command line arguments passed in as a std::vector, +// encoded in UTF-8. Returns an empty std::vector on failure. +std::vector GetCommandLineArguments(); + +#endif // RUNNER_UTILS_H_ diff --git a/finalproject/windows/runner/win32_window.cpp b/finalproject/windows/runner/win32_window.cpp new file mode 100755 index 0000000..b5ba2a0 --- /dev/null +++ b/finalproject/windows/runner/win32_window.cpp @@ -0,0 +1,288 @@ +#include "win32_window.h" + +#include +#include + +#include "resource.h" + +namespace { + +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + +constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; + +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + +// The number of Win32Window objects that currently exist. +static int g_active_window_count = 0; + +using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd); + +// Scale helper to convert logical scaler values to physical using passed in +// scale factor +int Scale(int source, double scale_factor) { + return static_cast(source * scale_factor); +} + +// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module. +// This API is only needed for PerMonitor V1 awareness mode. +void EnableFullDpiSupportIfAvailable(HWND hwnd) { + HMODULE user32_module = LoadLibraryA("User32.dll"); + if (!user32_module) { + return; + } + auto enable_non_client_dpi_scaling = + reinterpret_cast( + GetProcAddress(user32_module, "EnableNonClientDpiScaling")); + if (enable_non_client_dpi_scaling != nullptr) { + enable_non_client_dpi_scaling(hwnd); + } + FreeLibrary(user32_module); +} + +} // namespace + +// Manages the Win32Window's window class registration. +class WindowClassRegistrar { + public: + ~WindowClassRegistrar() = default; + + // Returns the singleton registrar instance. + static WindowClassRegistrar* GetInstance() { + if (!instance_) { + instance_ = new WindowClassRegistrar(); + } + return instance_; + } + + // Returns the name of the window class, registering the class if it hasn't + // previously been registered. + const wchar_t* GetWindowClass(); + + // Unregisters the window class. Should only be called if there are no + // instances of the window. + void UnregisterWindowClass(); + + private: + WindowClassRegistrar() = default; + + static WindowClassRegistrar* instance_; + + bool class_registered_ = false; +}; + +WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr; + +const wchar_t* WindowClassRegistrar::GetWindowClass() { + if (!class_registered_) { + WNDCLASS window_class{}; + window_class.hCursor = LoadCursor(nullptr, IDC_ARROW); + window_class.lpszClassName = kWindowClassName; + window_class.style = CS_HREDRAW | CS_VREDRAW; + window_class.cbClsExtra = 0; + window_class.cbWndExtra = 0; + window_class.hInstance = GetModuleHandle(nullptr); + window_class.hIcon = + LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON)); + window_class.hbrBackground = 0; + window_class.lpszMenuName = nullptr; + window_class.lpfnWndProc = Win32Window::WndProc; + RegisterClass(&window_class); + class_registered_ = true; + } + return kWindowClassName; +} + +void WindowClassRegistrar::UnregisterWindowClass() { + UnregisterClass(kWindowClassName, nullptr); + class_registered_ = false; +} + +Win32Window::Win32Window() { + ++g_active_window_count; +} + +Win32Window::~Win32Window() { + --g_active_window_count; + Destroy(); +} + +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { + Destroy(); + + const wchar_t* window_class = + WindowClassRegistrar::GetInstance()->GetWindowClass(); + + const POINT target_point = {static_cast(origin.x), + static_cast(origin.y)}; + HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST); + UINT dpi = FlutterDesktopGetDpiForMonitor(monitor); + double scale_factor = dpi / 96.0; + + HWND window = CreateWindow( + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, + Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), + Scale(size.width, scale_factor), Scale(size.height, scale_factor), + nullptr, nullptr, GetModuleHandle(nullptr), this); + + if (!window) { + return false; + } + + UpdateTheme(window); + + return OnCreate(); +} + +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + +// static +LRESULT CALLBACK Win32Window::WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + if (message == WM_NCCREATE) { + auto window_struct = reinterpret_cast(lparam); + SetWindowLongPtr(window, GWLP_USERDATA, + reinterpret_cast(window_struct->lpCreateParams)); + + auto that = static_cast(window_struct->lpCreateParams); + EnableFullDpiSupportIfAvailable(window); + that->window_handle_ = window; + } else if (Win32Window* that = GetThisFromHandle(window)) { + return that->MessageHandler(window, message, wparam, lparam); + } + + return DefWindowProc(window, message, wparam, lparam); +} + +LRESULT +Win32Window::MessageHandler(HWND hwnd, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + switch (message) { + case WM_DESTROY: + window_handle_ = nullptr; + Destroy(); + if (quit_on_close_) { + PostQuitMessage(0); + } + return 0; + + case WM_DPICHANGED: { + auto newRectSize = reinterpret_cast(lparam); + LONG newWidth = newRectSize->right - newRectSize->left; + LONG newHeight = newRectSize->bottom - newRectSize->top; + + SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth, + newHeight, SWP_NOZORDER | SWP_NOACTIVATE); + + return 0; + } + case WM_SIZE: { + RECT rect = GetClientArea(); + if (child_content_ != nullptr) { + // Size and position the child window. + MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left, + rect.bottom - rect.top, TRUE); + } + return 0; + } + + case WM_ACTIVATE: + if (child_content_ != nullptr) { + SetFocus(child_content_); + } + return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; + } + + return DefWindowProc(window_handle_, message, wparam, lparam); +} + +void Win32Window::Destroy() { + OnDestroy(); + + if (window_handle_) { + DestroyWindow(window_handle_); + window_handle_ = nullptr; + } + if (g_active_window_count == 0) { + WindowClassRegistrar::GetInstance()->UnregisterWindowClass(); + } +} + +Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept { + return reinterpret_cast( + GetWindowLongPtr(window, GWLP_USERDATA)); +} + +void Win32Window::SetChildContent(HWND content) { + child_content_ = content; + SetParent(content, window_handle_); + RECT frame = GetClientArea(); + + MoveWindow(content, frame.left, frame.top, frame.right - frame.left, + frame.bottom - frame.top, true); + + SetFocus(child_content_); +} + +RECT Win32Window::GetClientArea() { + RECT frame; + GetClientRect(window_handle_, &frame); + return frame; +} + +HWND Win32Window::GetHandle() { + return window_handle_; +} + +void Win32Window::SetQuitOnClose(bool quit_on_close) { + quit_on_close_ = quit_on_close; +} + +bool Win32Window::OnCreate() { + // No-op; provided for subclasses. + return true; +} + +void Win32Window::OnDestroy() { + // No-op; provided for subclasses. +} + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/finalproject/windows/runner/win32_window.h b/finalproject/windows/runner/win32_window.h new file mode 100755 index 0000000..49b847f --- /dev/null +++ b/finalproject/windows/runner/win32_window.h @@ -0,0 +1,102 @@ +#ifndef RUNNER_WIN32_WINDOW_H_ +#define RUNNER_WIN32_WINDOW_H_ + +#include + +#include +#include +#include + +// A class abstraction for a high DPI-aware Win32 Window. Intended to be +// inherited from by classes that wish to specialize with custom +// rendering and input handling +class Win32Window { + public: + struct Point { + unsigned int x; + unsigned int y; + Point(unsigned int x, unsigned int y) : x(x), y(y) {} + }; + + struct Size { + unsigned int width; + unsigned int height; + Size(unsigned int width, unsigned int height) + : width(width), height(height) {} + }; + + Win32Window(); + virtual ~Win32Window(); + + // Creates a win32 window with |title| that is positioned and sized using + // |origin| and |size|. New windows are created on the default monitor. Window + // sizes are specified to the OS in physical pixels, hence to ensure a + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); + + // Release OS resources associated with window. + void Destroy(); + + // Inserts |content| into the window tree. + void SetChildContent(HWND content); + + // Returns the backing Window handle to enable clients to set icon and other + // window properties. Returns nullptr if the window has been destroyed. + HWND GetHandle(); + + // If true, closing this window will quit the application. + void SetQuitOnClose(bool quit_on_close); + + // Return a RECT representing the bounds of the current client area. + RECT GetClientArea(); + + protected: + // Processes and route salient window messages for mouse handling, + // size change and DPI. Delegates handling of these to member overloads that + // inheriting classes can handle. + virtual LRESULT MessageHandler(HWND window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Called when CreateAndShow is called, allowing subclass window-related + // setup. Subclasses should return false if setup fails. + virtual bool OnCreate(); + + // Called when Destroy is called. + virtual void OnDestroy(); + + private: + friend class WindowClassRegistrar; + + // OS callback called by message pump. Handles the WM_NCCREATE message which + // is passed when the non-client area is being created and enables automatic + // non-client DPI scaling so that the non-client area automatically + // responds to changes in DPI. All other messages are handled by + // MessageHandler. + static LRESULT CALLBACK WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Retrieves a class instance pointer for |window| + static Win32Window* GetThisFromHandle(HWND const window) noexcept; + + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + + bool quit_on_close_ = false; + + // window handle for top level window. + HWND window_handle_ = nullptr; + + // window handle for hosted content. + HWND child_content_ = nullptr; +}; + +#endif // RUNNER_WIN32_WINDOW_H_