From 0ecc3056931e35d8408f2d700c770178c52a0bf9 Mon Sep 17 00:00:00 2001 From: drsk Date: Thu, 31 Mar 2022 22:07:00 +0200 Subject: [PATCH] initial commit --- .envrc | 8 + .git-crypt/.gitattributes | 4 + ...F013828C4B1CAA4D49F3DBBE609F66144CE9BF.gpg | Bin 0 -> 725 bytes .gitattributes | 3 + .gitignore | 10 + LICENSE | 22 + README.md | 4 + TODO.md | 1 + .../admin+acme@swarmapp.org/account.json | Bin 0 -> 249 bytes .../keys/admin+acme@swarmapp.org.key | Bin 0 -> 249 bytes .../admin+acme@swarmapp.org/account.json | Bin 0 -> 249 bytes .../keys/admin+acme@swarmapp.org.key | Bin 0 -> 249 bytes deployment/backend.nix | 122 ++ deployment/config.nix | 6 + deployment/swarm-service.nix | 94 + flake.lock | 123 ++ flake.nix | 129 ++ nix/flutter/patches/disable-auto-update.patch | 36 + nix/flutter/patches/move-cache.patch | 62 + .../monad_base_control.patch | 146 ++ secrets/do-api-token | Bin 0 -> 94 bytes secrets/godaddy-api-creds | Bin 0 -> 58 bytes secrets/key.jks | Bin 0 -> 2264 bytes ...59-firebase-adminsdk-s0gjo-d9f876cb1e.json | Bin 0 -> 2352 bytes site/.gitignore | 1 + site/README.md | 51 + site/default.nix | 17 + site/node-env.nix | 588 ++++++ site/node-packages.nix | 1675 +++++++++++++++++ site/package.json | 24 + site/postcss.config.js | 6 + site/public/.gitignore | 1 + site/public/dist/assets/Highlight1.svg | 5 + site/public/dist/assets/Highlight2.svg | 5 + site/public/dist/assets/Highlight3.svg | 3 + site/public/dist/assets/Logo_black.svg | 4 + site/public/dist/assets/Logo_white.svg | 4 + site/public/dist/assets/MacBook Pro.png | Bin 0 -> 122144 bytes site/public/dist/assets/Underline1.svg | 3 + site/public/dist/assets/Underline2.svg | 3 + site/public/dist/assets/Underline3.svg | 3 + site/public/dist/assets/Underline4.svg | 3 + .../public/dist/assets/ballots_screenshot.png | Bin 0 -> 276823 bytes site/public/dist/assets/favicon.svg | 3 + site/public/dist/assets/logo_black.svg | 79 + site/public/dist/assets/logos/CaretRight.svg | 3 + site/public/dist/assets/logos/CheckedBox.svg | 4 + site/public/dist/assets/logos/Cross.svg | 4 + site/public/dist/assets/logos/Facebook.svg | 3 + site/public/dist/assets/logos/Heart.svg | 3 + site/public/dist/assets/logos/Instagram.svg | 5 + site/public/dist/assets/logos/Lightning.svg | 3 + site/public/dist/assets/logos/Menu.svg | 5 + site/public/dist/assets/logos/Star.svg | 3 + site/public/dist/assets/logos/Sun.svg | 11 + site/public/dist/assets/logos/Twitter.svg | 3 + site/public/dist/assets/logos/Youtube.svg | 4 + site/public/dist/assets/swarm_icon.svg | 103 + .../dist/assets/swarm_icon_negative.svg | 112 ++ site/public/dist/assets/swarms_screenshot.png | Bin 0 -> 92637 bytes site/public/dist/assets/vote_screenshot.png | Bin 0 -> 194863 bytes site/public/dist/script.js | 30 + site/public/index.html | 387 ++++ site/site.nix | 19 + site/src/styles.css | 39 + site/tailwind.config.js | 51 + src/Auth/Common.hs | 74 + src/Auth/Google.hs | 72 + src/Firebase/CloudMessaging.hs | 145 ++ src/Main.hs | 1660 ++++++++++++++++ swarm.cabal | 55 + ui/.firebaserc | 5 + ui/.gitignore | 76 + ui/.metadata | 10 + ui/README.md | 9 + ui/analysis_options.yaml | 29 + ui/android/.gitignore | 12 + ui/android/app/build.gradle | 79 + ui/android/app/google-services.json | 47 + ui/android/app/src/debug/AndroidManifest.xml | 8 + ui/android/app/src/main/AndroidManifest.xml | 41 + .../kotlin/com/example/ui/MainActivity.kt | 6 + .../kotlin/com/swarmapp/ui/MainActivity.kt | 6 + .../res/drawable-v21/launch_background.xml | 12 + .../main/res/drawable/launch_background.xml | 12 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 544 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 442 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 721 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 1031 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 1443 bytes .../app/src/main/res/values-night/styles.xml | 18 + ui/android/app/src/main/res/values/styles.xml | 18 + .../app/src/profile/AndroidManifest.xml | 7 + ui/android/build.gradle | 32 + ui/android/gradle.properties | 4 + .../gradle/wrapper/gradle-wrapper.properties | 6 + ui/android/key.properties | Bin 0 -> 140 bytes ui/android/settings.gradle | 11 + ui/firebase.json | 16 + ui/ios/.gitignore | 32 + ui/ios/Flutter/AppFrameworkInfo.plist | 26 + ui/ios/Flutter/Debug.xcconfig | 1 + ui/ios/Flutter/Release.xcconfig | 1 + ui/ios/Runner.xcodeproj/project.pbxproj | 495 +++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 91 + .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + ui/ios/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 122 ++ .../Icon-App-1024x1024@1x.png | Bin 0 -> 10932 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 0 -> 564 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 0 -> 1283 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 0 -> 1588 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 0 -> 1025 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 0 -> 1716 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 0 -> 1920 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 0 -> 1283 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 0 -> 1895 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 0 -> 2665 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 0 -> 2665 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 0 -> 3831 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 0 -> 1888 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 0 -> 3294 bytes .../Icon-App-83.5x83.5@2x.png | Bin 0 -> 3612 bytes .../LaunchImage.imageset/Contents.json | 23 + .../LaunchImage.imageset/LaunchImage.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/README.md | 5 + .../Runner/Base.lproj/LaunchScreen.storyboard | 37 + ui/ios/Runner/Base.lproj/Main.storyboard | 26 + ui/ios/Runner/Info.plist | 45 + ui/ios/Runner/Runner-Bridging-Header.h | 1 + ui/lib/components/arguments_card.dart | 108 ++ ui/lib/components/auth_gate.dart | 28 + ui/lib/components/ballot_card.dart | 155 ++ ui/lib/components/fish_menu.dart | 84 + ui/lib/components/menu.dart | 71 + ui/lib/components/options_card.dart | 252 +++ ui/lib/components/statistic_card.dart | 120 ++ ui/lib/components/utils.dart | 100 + ui/lib/config/client.dart | 71 + ui/lib/data/gql_api.dart | 312 +++ ui/lib/firebase_options.dart | 73 + ui/lib/generated_plugin_registrant.dart | 32 + ui/lib/main.dart | 35 + ui/lib/screens/dashboard.dart | 151 ++ ui/lib/screens/editProfile.dart | 82 + ui/lib/screens/joinSwarm.dart | 70 + ui/lib/screens/login.dart | 177 ++ ui/lib/screens/markdown_preview.dart | 14 + ui/lib/screens/newArgument.dart | 93 + ui/lib/screens/newBallot.dart | 111 ++ ui/lib/screens/newDelegation.dart | 55 + ui/lib/screens/newOption.dart | 115 ++ ui/lib/screens/newSwarm.dart | 70 + ui/lib/screens/signup.dart | 122 ++ ui/lib/screens/tabs/dashboard/ballots.dart | 67 + ui/lib/screens/viewArguments.dart | 108 ++ ui/lib/screens/viewBallot.dart | 87 + ui/lib/screens/viewProfile.dart | 16 + ui/linux/.gitignore | 1 + ui/linux/CMakeLists.txt | 95 + ui/linux/flutter/CMakeLists.txt | 86 + .../flutter/generated_plugin_registrant.cc | 15 + .../flutter/generated_plugin_registrant.h | 15 + ui/linux/flutter/generated_plugins.cmake | 16 + ui/linux/main.cc | 10 + ui/linux/my_application.cc | 44 + ui/linux/my_application.h | 18 + ui/pubspec.lock | 775 ++++++++ ui/pubspec.yaml | 87 + ui/test/widget_test.dart | 30 + ui/web/favicon.png | Bin 0 -> 917 bytes ui/web/firebase-messaging-sw.js | 29 + ui/web/icons/Icon-192.png | Bin 0 -> 5292 bytes ui/web/icons/Icon-512.png | Bin 0 -> 8252 bytes ui/web/icons/Icon-maskable-192.png | Bin 0 -> 5594 bytes ui/web/icons/Icon-maskable-512.png | Bin 0 -> 20998 bytes ui/web/index.html | 105 ++ ui/web/manifest.json | 35 + 185 files changed, 11614 insertions(+) create mode 100644 .envrc create mode 100644 .git-crypt/.gitattributes create mode 100644 .git-crypt/keys/default/0/2BF013828C4B1CAA4D49F3DBBE609F66144CE9BF.gpg create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 TODO.md create mode 100644 deployment/.lego/accounts/acme-v02.api.letsencrypt.org/admin+acme@swarmapp.org/account.json create mode 100644 deployment/.lego/accounts/acme-v02.api.letsencrypt.org/admin+acme@swarmapp.org/keys/admin+acme@swarmapp.org.key create mode 100644 deployment/.lego/certificates/.lego/accounts/acme-v02.api.letsencrypt.org/admin+acme@swarmapp.org/account.json create mode 100644 deployment/.lego/certificates/.lego/accounts/acme-v02.api.letsencrypt.org/admin+acme@swarmapp.org/keys/admin+acme@swarmapp.org.key create mode 100644 deployment/backend.nix create mode 100644 deployment/config.nix create mode 100644 deployment/swarm-service.nix create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 nix/flutter/patches/disable-auto-update.patch create mode 100644 nix/flutter/patches/move-cache.patch create mode 100644 nix/morpheus-graphql-subscriptions/monad_base_control.patch create mode 100644 secrets/do-api-token create mode 100644 secrets/godaddy-api-creds create mode 100644 secrets/key.jks create mode 100644 secrets/swarm-90059-firebase-adminsdk-s0gjo-d9f876cb1e.json create mode 100644 site/.gitignore create mode 100644 site/README.md create mode 100644 site/default.nix create mode 100644 site/node-env.nix create mode 100644 site/node-packages.nix create mode 100644 site/package.json create mode 100644 site/postcss.config.js create mode 100644 site/public/.gitignore create mode 100644 site/public/dist/assets/Highlight1.svg create mode 100644 site/public/dist/assets/Highlight2.svg create mode 100644 site/public/dist/assets/Highlight3.svg create mode 100644 site/public/dist/assets/Logo_black.svg create mode 100644 site/public/dist/assets/Logo_white.svg create mode 100644 site/public/dist/assets/MacBook Pro.png create mode 100644 site/public/dist/assets/Underline1.svg create mode 100644 site/public/dist/assets/Underline2.svg create mode 100644 site/public/dist/assets/Underline3.svg create mode 100644 site/public/dist/assets/Underline4.svg create mode 100644 site/public/dist/assets/ballots_screenshot.png create mode 100644 site/public/dist/assets/favicon.svg create mode 100644 site/public/dist/assets/logo_black.svg create mode 100644 site/public/dist/assets/logos/CaretRight.svg create mode 100644 site/public/dist/assets/logos/CheckedBox.svg create mode 100644 site/public/dist/assets/logos/Cross.svg create mode 100644 site/public/dist/assets/logos/Facebook.svg create mode 100644 site/public/dist/assets/logos/Heart.svg create mode 100644 site/public/dist/assets/logos/Instagram.svg create mode 100644 site/public/dist/assets/logos/Lightning.svg create mode 100644 site/public/dist/assets/logos/Menu.svg create mode 100644 site/public/dist/assets/logos/Star.svg create mode 100644 site/public/dist/assets/logos/Sun.svg create mode 100644 site/public/dist/assets/logos/Twitter.svg create mode 100644 site/public/dist/assets/logos/Youtube.svg create mode 100644 site/public/dist/assets/swarm_icon.svg create mode 100644 site/public/dist/assets/swarm_icon_negative.svg create mode 100644 site/public/dist/assets/swarms_screenshot.png create mode 100644 site/public/dist/assets/vote_screenshot.png create mode 100644 site/public/dist/script.js create mode 100644 site/public/index.html create mode 100644 site/site.nix create mode 100644 site/src/styles.css create mode 100644 site/tailwind.config.js create mode 100644 src/Auth/Common.hs create mode 100644 src/Auth/Google.hs create mode 100644 src/Firebase/CloudMessaging.hs create mode 100644 src/Main.hs create mode 100644 swarm.cabal create mode 100644 ui/.firebaserc create mode 100644 ui/.gitignore create mode 100644 ui/.metadata create mode 100644 ui/README.md create mode 100644 ui/analysis_options.yaml create mode 100644 ui/android/.gitignore create mode 100644 ui/android/app/build.gradle create mode 100644 ui/android/app/google-services.json create mode 100644 ui/android/app/src/debug/AndroidManifest.xml create mode 100644 ui/android/app/src/main/AndroidManifest.xml create mode 100644 ui/android/app/src/main/kotlin/com/example/ui/MainActivity.kt create mode 100644 ui/android/app/src/main/kotlin/com/swarmapp/ui/MainActivity.kt create mode 100644 ui/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 ui/android/app/src/main/res/drawable/launch_background.xml create mode 100644 ui/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 ui/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 ui/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 ui/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 ui/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 ui/android/app/src/main/res/values-night/styles.xml create mode 100644 ui/android/app/src/main/res/values/styles.xml create mode 100644 ui/android/app/src/profile/AndroidManifest.xml create mode 100644 ui/android/build.gradle create mode 100644 ui/android/gradle.properties create mode 100644 ui/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 ui/android/key.properties create mode 100644 ui/android/settings.gradle create mode 100644 ui/firebase.json create mode 100644 ui/ios/.gitignore create mode 100644 ui/ios/Flutter/AppFrameworkInfo.plist create mode 100644 ui/ios/Flutter/Debug.xcconfig create mode 100644 ui/ios/Flutter/Release.xcconfig create mode 100644 ui/ios/Runner.xcodeproj/project.pbxproj create mode 100644 ui/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 ui/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 ui/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 ui/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 ui/ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 ui/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 ui/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 ui/ios/Runner/AppDelegate.swift create mode 100644 ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png create mode 100644 ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 ui/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json create mode 100644 ui/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png create mode 100644 ui/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png create mode 100644 ui/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png create mode 100644 ui/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md create mode 100644 ui/ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 ui/ios/Runner/Base.lproj/Main.storyboard create mode 100644 ui/ios/Runner/Info.plist create mode 100644 ui/ios/Runner/Runner-Bridging-Header.h create mode 100644 ui/lib/components/arguments_card.dart create mode 100644 ui/lib/components/auth_gate.dart create mode 100644 ui/lib/components/ballot_card.dart create mode 100644 ui/lib/components/fish_menu.dart create mode 100644 ui/lib/components/menu.dart create mode 100644 ui/lib/components/options_card.dart create mode 100644 ui/lib/components/statistic_card.dart create mode 100644 ui/lib/components/utils.dart create mode 100644 ui/lib/config/client.dart create mode 100644 ui/lib/data/gql_api.dart create mode 100644 ui/lib/firebase_options.dart create mode 100644 ui/lib/generated_plugin_registrant.dart create mode 100644 ui/lib/main.dart create mode 100644 ui/lib/screens/dashboard.dart create mode 100644 ui/lib/screens/editProfile.dart create mode 100644 ui/lib/screens/joinSwarm.dart create mode 100644 ui/lib/screens/login.dart create mode 100644 ui/lib/screens/markdown_preview.dart create mode 100644 ui/lib/screens/newArgument.dart create mode 100644 ui/lib/screens/newBallot.dart create mode 100644 ui/lib/screens/newDelegation.dart create mode 100644 ui/lib/screens/newOption.dart create mode 100644 ui/lib/screens/newSwarm.dart create mode 100644 ui/lib/screens/signup.dart create mode 100644 ui/lib/screens/tabs/dashboard/ballots.dart create mode 100644 ui/lib/screens/viewArguments.dart create mode 100644 ui/lib/screens/viewBallot.dart create mode 100644 ui/lib/screens/viewProfile.dart create mode 100644 ui/linux/.gitignore create mode 100644 ui/linux/CMakeLists.txt create mode 100644 ui/linux/flutter/CMakeLists.txt create mode 100644 ui/linux/flutter/generated_plugin_registrant.cc create mode 100644 ui/linux/flutter/generated_plugin_registrant.h create mode 100644 ui/linux/flutter/generated_plugins.cmake create mode 100644 ui/linux/main.cc create mode 100644 ui/linux/my_application.cc create mode 100644 ui/linux/my_application.h create mode 100644 ui/pubspec.lock create mode 100644 ui/pubspec.yaml create mode 100644 ui/test/widget_test.dart create mode 100644 ui/web/favicon.png create mode 100644 ui/web/firebase-messaging-sw.js create mode 100644 ui/web/icons/Icon-192.png create mode 100644 ui/web/icons/Icon-512.png create mode 100644 ui/web/icons/Icon-maskable-192.png create mode 100644 ui/web/icons/Icon-maskable-512.png create mode 100644 ui/web/index.html create mode 100644 ui/web/manifest.json diff --git a/.envrc b/.envrc new file mode 100644 index 0000000..ae2a962 --- /dev/null +++ b/.envrc @@ -0,0 +1,8 @@ +use_flake() { + ulimit -s 50000 + watch_file flake.nix + watch_file flake.lock + eval "$(nix -L print-dev-env --profile "$(direnv_layout_dir)/flake-profile")" +} + +use flake diff --git a/.git-crypt/.gitattributes b/.git-crypt/.gitattributes new file mode 100644 index 0000000..665b10e --- /dev/null +++ b/.git-crypt/.gitattributes @@ -0,0 +1,4 @@ +# Do not edit this file. To specify the files to encrypt, create your own +# .gitattributes file in the directory where your files are. +* !filter !diff +*.gpg binary diff --git a/.git-crypt/keys/default/0/2BF013828C4B1CAA4D49F3DBBE609F66144CE9BF.gpg b/.git-crypt/keys/default/0/2BF013828C4B1CAA4D49F3DBBE609F66144CE9BF.gpg new file mode 100644 index 0000000000000000000000000000000000000000..a26505ab5b3fcb28d3d3504b342ef5cca0d876a7 GIT binary patch literal 725 zcmV;`0xJE50t^H5a`mOwu_K+FJL_Ea7hQDJkz-?5Y{0{)J> zV4PrYu$+ae(X&3*r=Srz__(Vt-1tb=~O7gc*&kJU73H!8Unl27;>8i6(z zCftEE9Ft3J^Q*XQS=ElOnsMlv>`Zr*FemG$Ff;Gf(u0N@~vQK_v8190nW6 zZ&KP&bc)GKi;S>o-IWX*P`uJukYFG{r*dUT;4!Xi$r}UvSzFsJQ*@+(CQv;I8C;O| zF}Cc`FHb(F`N%>$69$3#mYF~Hp%0wCIecFeV3=2mD4}(QPj$#zeA8R$EuX=Ti~%95 z7#9ZY%Ao_!gt02ZP8yB8;c>Y<2FhbL(S3e-GeSG67&3Z)TEFC9y+2$`)p7BToOZF5 z`czvV!#;R<34fD}VWl(t>b;-9+v73=#bFHovk3U_ziPftlpb!N!7@!)R7pDBJ7C+P zz>n()cGbCSS%_wn8xV$yR05g?+O4}ERCp%~yH>#WoHk4tiv!I$7X<)j1>(g^-y;DZ zq}ypVl4jpo!Y|V64<=5@R%Q|`uZqV&1MjNFbI~Nh^1@sLG9-L{w7=~ft2_`xfqyft zZ`j!!9Z#3+^I?2uIQU+EQLrA!yvyQ}M2Pqkg-J{t@2+eq+!flWwjR9V>zeMo)sl1cnGM#nH0U6A8 HQ@y9rG%#+% literal 0 HcmV?d00001 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..f6de586 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,3 @@ +secrets/** filter=git-crypt diff=git-crypt +ui/android/key.properties filter=git-crypt diff=git-crypt +deployment/.lego/** filter=git-crypt diff=git-crypt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ac98fa6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +/.daml +dist-newstyle +result +log/* +state/* +src/state/* +src/db/* +src/service-account.json +.direnv/* +result-doc diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..2757ef4 --- /dev/null +++ b/LICENSE @@ -0,0 +1,22 @@ +MIT License + +Copyright (c) 2015 Ian Hellström +Copyright (c) 2016 Harris Brakmic + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..a03bee5 --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +Swarm +===== + +A platform for making decissions together. See https://swarmapp.org. diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..efdc1f0 --- /dev/null +++ b/TODO.md @@ -0,0 +1 @@ +TODO remove firebase_options.dart from git index. diff --git a/deployment/.lego/accounts/acme-v02.api.letsencrypt.org/admin+acme@swarmapp.org/account.json b/deployment/.lego/accounts/acme-v02.api.letsencrypt.org/admin+acme@swarmapp.org/account.json new file mode 100644 index 0000000000000000000000000000000000000000..c35fc4f73d478c7f09a5fe0b9250db96d66eac1c GIT binary patch literal 249 zcmV36yNwezVja-I4BdZ7rc@aw4>Jh9a`kJ*57VT-)u@-ExtH zb$JTl&qK(mznB(c=xCeR@~tbZ~0^!wu9orIU`gCWT+8 z&8jxP7!^_;duG;c-i|vZVmk;*73&u`$a{q|Oz2*1PH>$>kG%LD2tX=!LV}D(hM~z0 z*n3;QszpC8GAP{{dD~?v$d0M_hQwVYTI-dH3E{IWi9V+97X^p%0f595cQsFqQPG-)KPQw literal 0 HcmV?d00001 diff --git a/deployment/.lego/certificates/.lego/accounts/acme-v02.api.letsencrypt.org/admin+acme@swarmapp.org/account.json b/deployment/.lego/certificates/.lego/accounts/acme-v02.api.letsencrypt.org/admin+acme@swarmapp.org/account.json new file mode 100644 index 0000000000000000000000000000000000000000..e6e0e288140d6490a644b7972fdd054b0be33ecf GIT binary patch literal 249 zcmVzt^QhIl0z?(7W(hR@0 zh-dMk8^>$-;I40>We?q|4$3872m+s|Mpp#yWP$Ka4d*dh7ccD2zJsBJ%%&!*6-pQ- zwaT;*FGRUxAc~M{2D3a-E5|N^_tk_}r?bbu7>uih6$0U}=aV<~+GxsP+~NM!zl?vh literal 0 HcmV?d00001 diff --git a/deployment/.lego/certificates/.lego/accounts/acme-v02.api.letsencrypt.org/admin+acme@swarmapp.org/keys/admin+acme@swarmapp.org.key b/deployment/.lego/certificates/.lego/accounts/acme-v02.api.letsencrypt.org/admin+acme@swarmapp.org/keys/admin+acme@swarmapp.org.key new file mode 100644 index 0000000000000000000000000000000000000000..720d28e35a9729ef773e4c81f5938a7b8dbfdad5 GIT binary patch literal 249 zcmVyr>`@vblL2k#+UaP@{@KztvrG2IhiS!OCG2aEX6 z2zSMDM2hzB=qtyKbkI0~gkM}-)RAPqXD#Bfr< zkvYyFw;P{lGLzX0a6nmR$3|&n#W7$m3ov15_T}N^fPx>$Z3>FZ60tpwIKRTh { + globals.flutterUsage.suppressAnalytics = true; + } + +- globals.flutterVersion.ensureVersionFile(); + final bool machineFlag = topLevelResults['machine'] as bool; + final bool ci = await globals.botDetector.isRunningOnBot; + final bool redirectedCompletion = !globals.stdio.hasTerminal && +@@ -253,10 +252,6 @@ class FlutterCommandRunner extends CommandRunner { + final bool versionCheckFlag = topLevelResults['version-check'] as bool; + final bool explicitVersionCheckPassed = topLevelResults.wasParsed('version-check') && versionCheckFlag; + +- if (topLevelResults.command?.name != 'upgrade' && +- (explicitVersionCheckPassed || (versionCheckFlag && !isMachine))) { +- await globals.flutterVersion.checkFlutterVersionFreshness(); +- } + + // See if the user specified a specific device. + globals.deviceManager.specifiedDeviceId = topLevelResults['device-id'] as String; diff --git a/nix/flutter/patches/move-cache.patch b/nix/flutter/patches/move-cache.patch new file mode 100644 index 0000000..701cab5 --- /dev/null +++ b/nix/flutter/patches/move-cache.patch @@ -0,0 +1,62 @@ +diff --git a/packages/flutter_tools/lib/src/asset.dart b/packages/flutter_tools/lib/src/asset.dart +index ed42baea29..fee2fb1d62 100644 +--- a/packages/flutter_tools/lib/src/asset.dart ++++ b/packages/flutter_tools/lib/src/asset.dart +@@ -11,11 +11,11 @@ import 'base/file_system.dart'; + import 'base/logger.dart'; + import 'base/platform.dart'; + import 'build_info.dart'; +-import 'cache.dart'; + import 'convert.dart'; + import 'dart/package_map.dart'; + import 'devfs.dart'; + import 'flutter_manifest.dart'; ++import 'globals.dart' as globals; + import 'license_collector.dart'; + import 'project.dart'; + +@@ -504,7 +504,7 @@ class ManifestAssetBundle implements AssetBundle { + } + final Uri entryUri = _fileSystem.path.toUri(asset); + result.add(_Asset( +- baseDir: _fileSystem.path.join(Cache.flutterRoot!, 'bin', 'cache', 'artifacts', 'material_fonts'), ++ baseDir: _fileSystem.path.join(globals.fsUtils.homeDirPath!, '.cache', 'flutter', 'artifacts', 'material_fonts'), + relativeUri: Uri(path: entryUri.pathSegments.last), + entryUri: entryUri, + package: null, +diff --git a/packages/flutter_tools/lib/src/cache.dart b/packages/flutter_tools/lib/src/cache.dart +index 7870c7807f..3fcf92f20d 100644 +--- a/packages/flutter_tools/lib/src/cache.dart ++++ b/packages/flutter_tools/lib/src/cache.dart +@@ -22,6 +22,7 @@ import 'base/user_messages.dart'; + import 'build_info.dart'; + import 'convert.dart'; + import 'features.dart'; ++import 'globals.dart' as globals; + + const String kFlutterRootEnvironmentVariableName = 'FLUTTER_ROOT'; // should point to //flutter/ (root of flutter/flutter repo) + const String kFlutterEngineEnvironmentVariableName = 'FLUTTER_ENGINE'; // should point to //engine/src/ (root of flutter/engine repo) +@@ -302,8 +303,13 @@ class Cache { + return; + } + assert(_lock == null); ++ final Directory dir = _fileSystem.directory(_fileSystem.path.join(globals.fsUtils.homeDirPath!, '.cache', 'flutter')); ++ if (!dir.existsSync()) { ++ dir.createSync(recursive: true); ++ globals.os.chmod(dir, '755'); ++ } + final File lockFile = +- _fileSystem.file(_fileSystem.path.join(flutterRoot!, 'bin', 'cache', 'lockfile')); ++ _fileSystem.file(_fileSystem.path.join(globals.fsUtils.homeDirPath!, '.cache', 'flutter', 'lockfile')); + try { + _lock = lockFile.openSync(mode: FileMode.write); + } on FileSystemException catch (e) { +@@ -453,7 +459,7 @@ class Cache { + if (_rootOverride != null) { + return _fileSystem.directory(_fileSystem.path.join(_rootOverride!.path, 'bin', 'cache')); + } else { +- return _fileSystem.directory(_fileSystem.path.join(flutterRoot!, 'bin', 'cache')); ++ return _fileSystem.directory(_fileSystem.path.join(globals.fsUtils.homeDirPath!, '.cache', 'flutter')); + } + } + diff --git a/nix/morpheus-graphql-subscriptions/monad_base_control.patch b/nix/morpheus-graphql-subscriptions/monad_base_control.patch new file mode 100644 index 0000000..4b87c2c --- /dev/null +++ b/nix/morpheus-graphql-subscriptions/monad_base_control.patch @@ -0,0 +1,146 @@ +diff --git a/morpheus-graphql-subscriptions.cabal b/morpheus-graphql-subscriptions.cabal +index cc6046a..9919d99 100644 +--- a/morpheus-graphql-subscriptions.cabal ++++ b/morpheus-graphql-subscriptions.cabal +@@ -55,6 +55,8 @@ library + , unordered-containers >=0.2.8.0 && <0.3 + , uuid >=1.0 && <=1.4 + , websockets >=0.11.0 && <=1.0 ++ , monad-control ++ , lifted-base + default-language: Haskell2010 + + test-suite morpheus-subscription-test + +diff --git a/src/Data/Morpheus/Subscriptions.hs b/src/Data/Morpheus/Subscriptions.hs +index c459c37..53b5cce 100644 +--- a/src/Data/Morpheus/Subscriptions.hs ++++ b/src/Data/Morpheus/Subscriptions.hs +@@ -21,8 +21,8 @@ module Data.Morpheus.Subscriptions + ) + where + +-import Control.Monad.IO.Unlift +- ( MonadUnliftIO, ++import Control.Monad.Trans.Control ++ ( MonadBaseControl, + ) + import Data.Morpheus.App + ( App, +@@ -63,7 +63,7 @@ httpPubApp = runPubApp + + -- | Wai WebSocket Server App for GraphQL subscriptions + webSocketsApp :: +- ( MonadUnliftIO m, ++ ( MonadBaseControl IO m, + MonadIO m, + SubApp ServerApp e + ) => +@@ -72,7 +72,7 @@ webSocketsApp :: + webSocketsApp = runSubApp + + class SubApp app e where +- runSubApp :: (MonadIO m, MonadUnliftIO m) => App e m -> m (app, e -> m ()) ++ runSubApp :: (MonadIO m, MonadBaseControl IO m) => App e m -> m (app, e -> m ()) + + class PubApp e where + runPubApp :: (MonadIO m, MapAPI a b) => [e -> m ()] -> App e m -> a -> m b +diff --git a/src/Data/Morpheus/Subscriptions/Internal.hs b/src/Data/Morpheus/Subscriptions/Internal.hs +index 2f7f60a..0ca1d23 100644 +--- a/src/Data/Morpheus/Subscriptions/Internal.hs ++++ b/src/Data/Morpheus/Subscriptions/Internal.hs +@@ -38,10 +38,9 @@ where + import Control.Concurrent + ( modifyMVar_, + ) +-import Control.Exception (finally) +-import Control.Monad.IO.Unlift +- ( MonadUnliftIO, +- withRunInIO, ++import Control.Exception.Lifted (finally) ++import Control.Monad.Trans.Control ++ ( MonadBaseControl, + ) + -- MORPHEUS + +@@ -124,11 +123,9 @@ initDefaultStore = do + writeStore = \changes -> liftIO $ modifyMVar_ store (return . changes) + } + +-finallyM :: MonadUnliftIO m => m () -> m () -> m () +-finallyM loop end = withRunInIO $ \runIO -> finally (runIO loop) (runIO end) +- + connectionThread :: +- ( MonadUnliftIO m, ++ ( MonadBaseControl IO m, ++ MonadIO m, + Eq ch, + Hashable ch + ) => +@@ -137,7 +134,7 @@ connectionThread :: + m () + connectionThread api scope = do + input <- connect +- finallyM ++ finally + (connectionLoop api scope input) + (disconnect scope input) + +diff --git a/src/Data/Morpheus/Subscriptions/WebSockets.hs b/src/Data/Morpheus/Subscriptions/WebSockets.hs +index c0c218b..4239576 100644 +--- a/src/Data/Morpheus/Subscriptions/WebSockets.hs ++++ b/src/Data/Morpheus/Subscriptions/WebSockets.hs +@@ -15,9 +15,9 @@ module Data.Morpheus.Subscriptions.WebSockets + ) + where + +-import Control.Monad.IO.Unlift +- ( MonadUnliftIO, +- withRunInIO, ++import Control.Monad.Trans.Control ++ ( MonadBaseControl, ++ embed_ + ) + import Data.Morpheus.Subscriptions.Internal + ( ApiContext (..), +@@ -34,15 +34,6 @@ import Network.WebSockets + import qualified Network.WebSockets as WS + import Relude + +--- support old version of Websockets +-pingThread :: Connection -> IO () -> IO () +- +-#if MIN_VERSION_websockets(0,12,6) +-pingThread connection = WS.withPingThread connection 30 (return ()) +-#else +-pingThread connection = (WS.forkPingThread connection 30 >>) +-#endif +- + defaultWSScope :: MonadIO m => Store e m -> Connection -> ApiContext SUB e m + defaultWSScope Store {writeStore} connection = + SubContext +@@ -52,16 +43,12 @@ defaultWSScope Store {writeStore} connection = + } + + webSocketsWrapper :: +- (MonadUnliftIO m, MonadIO m) => ++ (MonadBaseControl IO m, MonadIO m) => + Store e m -> + (ApiContext SUB e m -> m ()) -> + m ServerApp + webSocketsWrapper store handler = +- withRunInIO $ +- \runIO -> +- pure $ +- \pending -> do +- conn <- acceptApolloRequest pending +- pingThread +- conn +- $ runIO (handler (defaultWSScope store conn)) ++ embed_ $ ++ \pending -> do ++ conn <- liftIO $ acceptApolloRequest pending ++ handler (defaultWSScope store conn) +-- +2.30.0 + diff --git a/secrets/do-api-token b/secrets/do-api-token new file mode 100644 index 0000000000000000000000000000000000000000..bab43e695177a88ba9123bf1da6036f5529185d6 GIT binary patch literal 94 zcmV-k0HOZ?M@dveQdv+`0J_Wc+|b0N`={tJJhwhxmn8uTGnw5d2-DbGNk7I3_oQ5C zzTnn558T%Gev5heCtZ1Z@wum058hfj>J{ql`l66>#>sGI{5zOHmeVLz+c?3xESY97 AvH$=8 literal 0 HcmV?d00001 diff --git a/secrets/godaddy-api-creds b/secrets/godaddy-api-creds new file mode 100644 index 0000000000000000000000000000000000000000..3dc3195b0003776df43fde0ee55a45bac85d2353 GIT binary patch literal 58 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 W$U&S4Bo~XPrN9qNDL-Gt;3DxZ5}w@v literal 0 HcmV?d00001 diff --git a/site/.gitignore b/site/.gitignore new file mode 100644 index 0000000..8d87b1d --- /dev/null +++ b/site/.gitignore @@ -0,0 +1 @@ +node_modules/* diff --git a/site/README.md b/site/README.md new file mode 100644 index 0000000..748b9e2 --- /dev/null +++ b/site/README.md @@ -0,0 +1,51 @@ +# Startup Landing Page + +A starter template for very simple projects (no frameworks) with Tailwind CSS setup as a PostCSS plugin. You only need to install NPM. + +Follow the Getting Started guide and build websites with Tailwind CSS. Also, follow the steps to Optimize for Production to end up with a very tiny final CSS bundle. + +## Getting Started + +1. Download and install NPM - [A Beginner’s Guide to npm](https://www.sitepoint.com/npm-guide/) + +2. Install dependencies + + npm install + +3. Build using Tailwind CSS + + npm run build + +4. Open the `public > index.html` file in your browser and you should see a heading styled with a gradient. If you don't see a gradient on the text, something went wrong. + +## How to use + +- Go to `public > index.html` Remove the `

` element and start adding your own HTML. +- If you need to add more HTML pages, add them in the `public` folder. +- To extract classes and use the `@apply` directive, edit the custom CSS file in `src > styles.css`. Add any amount of custom CSS within this file. Refer [https://tailwindcss.com/docs/installation#using-a-custom-css-file](https://tailwindcss.com/docs/installation#using-a-custom-css-file) + +Watch HTML files for changes and build automatically everytime using + + npm run watch + +NOTE: Do NOT edit the file `public > dist > styles.css` directly - This is the distribution stylesheet. The CSS here is generated from `src > styles.css` using Tailwind when you build. + +## Optimize for production + +Before pushing your code (the `public` folder) for production, run the below command to reduce the size of `styles.css` within the public folder + + npm run prod + +NOTE: If you are using Windows and face an error `NODE ENV not recognised`, run the below command + + npm install win-node-env + +## Updating dependencies and the nix build + +Create a package-lock.json with `npm -i --package-lock-only`. Then run `node2nix`. Then remove the +created package-lock.json again. + +## Development dependencies + +The development dependencies have been moved to a separate stanza under "comment" in package.json to +avoid interfering with node2nix. For development, you need to uncomment these. diff --git a/site/default.nix b/site/default.nix new file mode 100644 index 0000000..53bdef1 --- /dev/null +++ b/site/default.nix @@ -0,0 +1,17 @@ +# This file has been generated by node2nix 1.9.0. Do not edit! + +{pkgs ? import { + inherit system; + }, system ? builtins.currentSystem, nodejs ? pkgs."nodejs-12_x"}: + +let + nodeEnv = import ./node-env.nix { + inherit (pkgs) stdenv lib python2 runCommand writeTextFile writeShellScript; + inherit pkgs nodejs; + libtool = if pkgs.stdenv.isDarwin then pkgs.darwin.cctools else null; + }; +in +import ./node-packages.nix { + inherit (pkgs) fetchurl nix-gitignore stdenv lib fetchgit; + inherit nodeEnv; +} diff --git a/site/node-env.nix b/site/node-env.nix new file mode 100644 index 0000000..5f05578 --- /dev/null +++ b/site/node-env.nix @@ -0,0 +1,588 @@ +# This file originates from node2nix + +{lib, stdenv, nodejs, python2, pkgs, libtool, runCommand, writeTextFile, writeShellScript}: + +let + # Workaround to cope with utillinux in Nixpkgs 20.09 and util-linux in Nixpkgs master + utillinux = if pkgs ? utillinux then pkgs.utillinux else pkgs.util-linux; + + python = if nodejs ? python then nodejs.python else python2; + + # Create a tar wrapper that filters all the 'Ignoring unknown extended header keyword' noise + tarWrapper = runCommand "tarWrapper" {} '' + mkdir -p $out/bin + + cat > $out/bin/tar <> $out/nix-support/hydra-build-products + ''; + }; + + # Common shell logic + installPackage = writeShellScript "install-package" '' + installPackage() { + local packageName=$1 src=$2 + + local strippedName + + local DIR=$PWD + cd $TMPDIR + + unpackFile $src + + # Make the base dir in which the target dependency resides first + mkdir -p "$(dirname "$DIR/$packageName")" + + if [ -f "$src" ] + then + # Figure out what directory has been unpacked + packageDir="$(find . -maxdepth 1 -type d | tail -1)" + + # Restore write permissions to make building work + find "$packageDir" -type d -exec chmod u+x {} \; + chmod -R u+w "$packageDir" + + # Move the extracted tarball into the output folder + mv "$packageDir" "$DIR/$packageName" + elif [ -d "$src" ] + then + # Get a stripped name (without hash) of the source directory. + # On old nixpkgs it's already set internally. + if [ -z "$strippedName" ] + then + strippedName="$(stripHash $src)" + fi + + # Restore write permissions to make building work + chmod -R u+w "$strippedName" + + # Move the extracted directory into the output folder + mv "$strippedName" "$DIR/$packageName" + fi + + # Change to the package directory to install dependencies + cd "$DIR/$packageName" + } + ''; + + # Bundle the dependencies of the package + # + # Only include dependencies if they don't exist. They may also be bundled in the package. + includeDependencies = {dependencies}: + lib.optionalString (dependencies != []) ( + '' + mkdir -p node_modules + cd node_modules + '' + + (lib.concatMapStrings (dependency: + '' + if [ ! -e "${dependency.name}" ]; then + ${composePackage dependency} + fi + '' + ) dependencies) + + '' + cd .. + '' + ); + + # Recursively composes the dependencies of a package + composePackage = { name, packageName, src, dependencies ? [], ... }@args: + builtins.addErrorContext "while evaluating node package '${packageName}'" '' + installPackage "${packageName}" "${src}" + ${includeDependencies { inherit dependencies; }} + cd .. + ${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."} + ''; + + pinpointDependencies = {dependencies, production}: + let + pinpointDependenciesFromPackageJSON = writeTextFile { + name = "pinpointDependencies.js"; + text = '' + var fs = require('fs'); + var path = require('path'); + + function resolveDependencyVersion(location, name) { + if(location == process.env['NIX_STORE']) { + return null; + } else { + var dependencyPackageJSON = path.join(location, "node_modules", name, "package.json"); + + if(fs.existsSync(dependencyPackageJSON)) { + var dependencyPackageObj = JSON.parse(fs.readFileSync(dependencyPackageJSON)); + + if(dependencyPackageObj.name == name) { + return dependencyPackageObj.version; + } + } else { + return resolveDependencyVersion(path.resolve(location, ".."), name); + } + } + } + + function replaceDependencies(dependencies) { + if(typeof dependencies == "object" && dependencies !== null) { + for(var dependency in dependencies) { + var resolvedVersion = resolveDependencyVersion(process.cwd(), dependency); + + if(resolvedVersion === null) { + process.stderr.write("WARNING: cannot pinpoint dependency: "+dependency+", context: "+process.cwd()+"\n"); + } else { + dependencies[dependency] = resolvedVersion; + } + } + } + } + + /* Read the package.json configuration */ + var packageObj = JSON.parse(fs.readFileSync('./package.json')); + + /* Pinpoint all dependencies */ + replaceDependencies(packageObj.dependencies); + if(process.argv[2] == "development") { + replaceDependencies(packageObj.devDependencies); + } + replaceDependencies(packageObj.optionalDependencies); + + /* Write the fixed package.json file */ + fs.writeFileSync("package.json", JSON.stringify(packageObj, null, 2)); + ''; + }; + in + '' + node ${pinpointDependenciesFromPackageJSON} ${if production then "production" else "development"} + + ${lib.optionalString (dependencies != []) + '' + if [ -d node_modules ] + then + cd node_modules + ${lib.concatMapStrings (dependency: pinpointDependenciesOfPackage dependency) dependencies} + cd .. + fi + ''} + ''; + + # Recursively traverses all dependencies of a package and pinpoints all + # dependencies in the package.json file to the versions that are actually + # being used. + + pinpointDependenciesOfPackage = { packageName, dependencies ? [], production ? true, ... }@args: + '' + if [ -d "${packageName}" ] + then + cd "${packageName}" + ${pinpointDependencies { inherit dependencies production; }} + cd .. + ${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."} + fi + ''; + + # Extract the Node.js source code which is used to compile packages with + # native bindings + nodeSources = runCommand "node-sources" {} '' + tar --no-same-owner --no-same-permissions -xf ${nodejs.src} + mv node-* $out + ''; + + # Script that adds _integrity fields to all package.json files to prevent NPM from consulting the cache (that is empty) + addIntegrityFieldsScript = writeTextFile { + name = "addintegrityfields.js"; + text = '' + var fs = require('fs'); + var path = require('path'); + + function augmentDependencies(baseDir, dependencies) { + for(var dependencyName in dependencies) { + var dependency = dependencies[dependencyName]; + + // Open package.json and augment metadata fields + var packageJSONDir = path.join(baseDir, "node_modules", dependencyName); + var packageJSONPath = path.join(packageJSONDir, "package.json"); + + if(fs.existsSync(packageJSONPath)) { // Only augment packages that exist. Sometimes we may have production installs in which development dependencies can be ignored + console.log("Adding metadata fields to: "+packageJSONPath); + var packageObj = JSON.parse(fs.readFileSync(packageJSONPath)); + + if(dependency.integrity) { + packageObj["_integrity"] = dependency.integrity; + } else { + packageObj["_integrity"] = "sha1-000000000000000000000000000="; // When no _integrity string has been provided (e.g. by Git dependencies), add a dummy one. It does not seem to harm and it bypasses downloads. + } + + if(dependency.resolved) { + packageObj["_resolved"] = dependency.resolved; // Adopt the resolved property if one has been provided + } else { + packageObj["_resolved"] = dependency.version; // Set the resolved version to the version identifier. This prevents NPM from cloning Git repositories. + } + + if(dependency.from !== undefined) { // Adopt from property if one has been provided + packageObj["_from"] = dependency.from; + } + + fs.writeFileSync(packageJSONPath, JSON.stringify(packageObj, null, 2)); + } + + // Augment transitive dependencies + if(dependency.dependencies !== undefined) { + augmentDependencies(packageJSONDir, dependency.dependencies); + } + } + } + + if(fs.existsSync("./package-lock.json")) { + var packageLock = JSON.parse(fs.readFileSync("./package-lock.json")); + + if(![1, 2].includes(packageLock.lockfileVersion)) { + process.stderr.write("Sorry, I only understand lock file versions 1 and 2!\n"); + process.exit(1); + } + + if(packageLock.dependencies !== undefined) { + augmentDependencies(".", packageLock.dependencies); + } + } + ''; + }; + + # Reconstructs a package-lock file from the node_modules/ folder structure and package.json files with dummy sha1 hashes + reconstructPackageLock = writeTextFile { + name = "addintegrityfields.js"; + text = '' + var fs = require('fs'); + var path = require('path'); + + var packageObj = JSON.parse(fs.readFileSync("package.json")); + + var lockObj = { + name: packageObj.name, + version: packageObj.version, + lockfileVersion: 1, + requires: true, + dependencies: {} + }; + + function augmentPackageJSON(filePath, dependencies) { + var packageJSON = path.join(filePath, "package.json"); + if(fs.existsSync(packageJSON)) { + var packageObj = JSON.parse(fs.readFileSync(packageJSON)); + dependencies[packageObj.name] = { + version: packageObj.version, + integrity: "sha1-000000000000000000000000000=", + dependencies: {} + }; + processDependencies(path.join(filePath, "node_modules"), dependencies[packageObj.name].dependencies); + } + } + + function processDependencies(dir, dependencies) { + if(fs.existsSync(dir)) { + var files = fs.readdirSync(dir); + + files.forEach(function(entry) { + var filePath = path.join(dir, entry); + var stats = fs.statSync(filePath); + + if(stats.isDirectory()) { + if(entry.substr(0, 1) == "@") { + // When we encounter a namespace folder, augment all packages belonging to the scope + var pkgFiles = fs.readdirSync(filePath); + + pkgFiles.forEach(function(entry) { + if(stats.isDirectory()) { + var pkgFilePath = path.join(filePath, entry); + augmentPackageJSON(pkgFilePath, dependencies); + } + }); + } else { + augmentPackageJSON(filePath, dependencies); + } + } + }); + } + } + + processDependencies("node_modules", lockObj.dependencies); + + fs.writeFileSync("package-lock.json", JSON.stringify(lockObj, null, 2)); + ''; + }; + + prepareAndInvokeNPM = {packageName, bypassCache, reconstructLock, npmFlags, production}: + let + forceOfflineFlag = if bypassCache then "--offline" else "--registry http://www.example.com"; + in + '' + # Pinpoint the versions of all dependencies to the ones that are actually being used + echo "pinpointing versions of dependencies..." + source $pinpointDependenciesScriptPath + + # Patch the shebangs of the bundled modules to prevent them from + # calling executables outside the Nix store as much as possible + patchShebangs . + + # Deploy the Node.js package by running npm install. Since the + # dependencies have been provided already by ourselves, it should not + # attempt to install them again, which is good, because we want to make + # it Nix's responsibility. If it needs to install any dependencies + # anyway (e.g. because the dependency parameters are + # incomplete/incorrect), it fails. + # + # The other responsibilities of NPM are kept -- version checks, build + # steps, postprocessing etc. + + export HOME=$TMPDIR + cd "${packageName}" + runHook preRebuild + + ${lib.optionalString bypassCache '' + ${lib.optionalString reconstructLock '' + if [ -f package-lock.json ] + then + echo "WARNING: Reconstruct lock option enabled, but a lock file already exists!" + echo "This will most likely result in version mismatches! We will remove the lock file and regenerate it!" + rm package-lock.json + else + echo "No package-lock.json file found, reconstructing..." + fi + + node ${reconstructPackageLock} + ''} + + node ${addIntegrityFieldsScript} + ''} + + npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${lib.optionalString production "--production"} rebuild + + if [ "''${dontNpmInstall-}" != "1" ] + then + # NPM tries to download packages even when they already exist if npm-shrinkwrap is used. + rm -f npm-shrinkwrap.json + + npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${lib.optionalString production "--production"} install + fi + ''; + + # Builds and composes an NPM package including all its dependencies + buildNodePackage = + { name + , packageName + , version + , dependencies ? [] + , buildInputs ? [] + , production ? true + , npmFlags ? "" + , dontNpmInstall ? false + , bypassCache ? false + , reconstructLock ? false + , preRebuild ? "" + , dontStrip ? true + , unpackPhase ? "true" + , buildPhase ? "true" + , meta ? {} + , ... }@args: + + let + extraArgs = removeAttrs args [ "name" "dependencies" "buildInputs" "dontStrip" "dontNpmInstall" "preRebuild" "unpackPhase" "buildPhase" "meta" ]; + in + stdenv.mkDerivation ({ + name = "${name}-${version}"; + buildInputs = [ tarWrapper python nodejs ] + ++ lib.optional (stdenv.isLinux) utillinux + ++ lib.optional (stdenv.isDarwin) libtool + ++ buildInputs; + + inherit nodejs; + + inherit dontStrip; # Stripping may fail a build for some package deployments + inherit dontNpmInstall preRebuild unpackPhase buildPhase; + + compositionScript = composePackage args; + pinpointDependenciesScript = pinpointDependenciesOfPackage args; + + passAsFile = [ "compositionScript" "pinpointDependenciesScript" ]; + + installPhase = '' + source ${installPackage} + + # Create and enter a root node_modules/ folder + mkdir -p $out/lib/node_modules + cd $out/lib/node_modules + + # Compose the package and all its dependencies + source $compositionScriptPath + + ${prepareAndInvokeNPM { inherit packageName bypassCache reconstructLock npmFlags production; }} + + # Create symlink to the deployed executable folder, if applicable + if [ -d "$out/lib/node_modules/.bin" ] + then + ln -s $out/lib/node_modules/.bin $out/bin + fi + + # Create symlinks to the deployed manual page folders, if applicable + if [ -d "$out/lib/node_modules/${packageName}/man" ] + then + mkdir -p $out/share + for dir in "$out/lib/node_modules/${packageName}/man/"* + do + mkdir -p $out/share/man/$(basename "$dir") + for page in "$dir"/* + do + ln -s $page $out/share/man/$(basename "$dir") + done + done + fi + + # Run post install hook, if provided + runHook postInstall + ''; + + meta = { + # default to Node.js' platforms + platforms = nodejs.meta.platforms; + } // meta; + } // extraArgs); + + # Builds a node environment (a node_modules folder and a set of binaries) + buildNodeDependencies = + { name + , packageName + , version + , src + , dependencies ? [] + , buildInputs ? [] + , production ? true + , npmFlags ? "" + , dontNpmInstall ? false + , bypassCache ? false + , reconstructLock ? false + , dontStrip ? true + , unpackPhase ? "true" + , buildPhase ? "true" + , ... }@args: + + let + extraArgs = removeAttrs args [ "name" "dependencies" "buildInputs" ]; + in + stdenv.mkDerivation ({ + name = "node-dependencies-${name}-${version}"; + + buildInputs = [ tarWrapper python nodejs ] + ++ lib.optional (stdenv.isLinux) utillinux + ++ lib.optional (stdenv.isDarwin) libtool + ++ buildInputs; + + inherit dontStrip; # Stripping may fail a build for some package deployments + inherit dontNpmInstall unpackPhase buildPhase; + + includeScript = includeDependencies { inherit dependencies; }; + pinpointDependenciesScript = pinpointDependenciesOfPackage args; + + passAsFile = [ "includeScript" "pinpointDependenciesScript" ]; + + installPhase = '' + source ${installPackage} + + mkdir -p $out/${packageName} + cd $out/${packageName} + + source $includeScriptPath + + # Create fake package.json to make the npm commands work properly + cp ${src}/package.json . + chmod 644 package.json + ${lib.optionalString bypassCache '' + if [ -f ${src}/package-lock.json ] + then + cp ${src}/package-lock.json . + fi + ''} + + # Go to the parent folder to make sure that all packages are pinpointed + cd .. + ${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."} + + ${prepareAndInvokeNPM { inherit packageName bypassCache reconstructLock npmFlags production; }} + + # Expose the executables that were installed + cd .. + ${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."} + + mv ${packageName} lib + ln -s $out/lib/node_modules/.bin $out/bin + ''; + } // extraArgs); + + # Builds a development shell + buildNodeShell = + { name + , packageName + , version + , src + , dependencies ? [] + , buildInputs ? [] + , production ? true + , npmFlags ? "" + , dontNpmInstall ? false + , bypassCache ? false + , reconstructLock ? false + , dontStrip ? true + , unpackPhase ? "true" + , buildPhase ? "true" + , ... }@args: + + let + nodeDependencies = buildNodeDependencies args; + in + stdenv.mkDerivation { + name = "node-shell-${name}-${version}"; + + buildInputs = [ python nodejs ] ++ lib.optional (stdenv.isLinux) utillinux ++ buildInputs; + buildCommand = '' + mkdir -p $out/bin + cat > $out/bin/shell < + + + + diff --git a/site/public/dist/assets/Highlight2.svg b/site/public/dist/assets/Highlight2.svg new file mode 100644 index 0000000..313404b --- /dev/null +++ b/site/public/dist/assets/Highlight2.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/site/public/dist/assets/Highlight3.svg b/site/public/dist/assets/Highlight3.svg new file mode 100644 index 0000000..299373c --- /dev/null +++ b/site/public/dist/assets/Highlight3.svg @@ -0,0 +1,3 @@ + + + diff --git a/site/public/dist/assets/Logo_black.svg b/site/public/dist/assets/Logo_black.svg new file mode 100644 index 0000000..74d5655 --- /dev/null +++ b/site/public/dist/assets/Logo_black.svg @@ -0,0 +1,4 @@ + + + + diff --git a/site/public/dist/assets/Logo_white.svg b/site/public/dist/assets/Logo_white.svg new file mode 100644 index 0000000..4683cfb --- /dev/null +++ b/site/public/dist/assets/Logo_white.svg @@ -0,0 +1,4 @@ + + + + diff --git a/site/public/dist/assets/MacBook Pro.png b/site/public/dist/assets/MacBook Pro.png new file mode 100644 index 0000000000000000000000000000000000000000..a72154b1f129043269220ff2814aee947370890b GIT binary patch literal 122144 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 L?QY;KJ>&il5EQuc literal 0 HcmV?d00001 diff --git a/site/public/dist/assets/Underline1.svg b/site/public/dist/assets/Underline1.svg new file mode 100644 index 0000000..332ceb6 --- /dev/null +++ b/site/public/dist/assets/Underline1.svg @@ -0,0 +1,3 @@ + + + diff --git a/site/public/dist/assets/Underline2.svg b/site/public/dist/assets/Underline2.svg new file mode 100644 index 0000000..8785135 --- /dev/null +++ b/site/public/dist/assets/Underline2.svg @@ -0,0 +1,3 @@ + + + diff --git a/site/public/dist/assets/Underline3.svg b/site/public/dist/assets/Underline3.svg new file mode 100644 index 0000000..cd25173 --- /dev/null +++ b/site/public/dist/assets/Underline3.svg @@ -0,0 +1,3 @@ + + + diff --git a/site/public/dist/assets/Underline4.svg b/site/public/dist/assets/Underline4.svg new file mode 100644 index 0000000..213d993 --- /dev/null +++ b/site/public/dist/assets/Underline4.svg @@ -0,0 +1,3 @@ + + + diff --git a/site/public/dist/assets/ballots_screenshot.png b/site/public/dist/assets/ballots_screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..a930ee89af65843efb6a42d3ba8afebd7b853462 GIT binary patch literal 276823 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

y)()U8q9HfPvEBCRC{u$D66-q{+LC6|M94( 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 z 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�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 + + diff --git a/site/public/dist/assets/logo_black.svg b/site/public/dist/assets/logo_black.svg new file mode 100644 index 0000000..dab665c --- /dev/null +++ b/site/public/dist/assets/logo_black.svg @@ -0,0 +1,79 @@ + + + + + + + + + + + image/svg+xml + + + + + + + + swarm + + diff --git a/site/public/dist/assets/logos/CaretRight.svg b/site/public/dist/assets/logos/CaretRight.svg new file mode 100644 index 0000000..5f0bf0a --- /dev/null +++ b/site/public/dist/assets/logos/CaretRight.svg @@ -0,0 +1,3 @@ + + + diff --git a/site/public/dist/assets/logos/CheckedBox.svg b/site/public/dist/assets/logos/CheckedBox.svg new file mode 100644 index 0000000..dda0e50 --- /dev/null +++ b/site/public/dist/assets/logos/CheckedBox.svg @@ -0,0 +1,4 @@ + + + + diff --git a/site/public/dist/assets/logos/Cross.svg b/site/public/dist/assets/logos/Cross.svg new file mode 100644 index 0000000..29b7496 --- /dev/null +++ b/site/public/dist/assets/logos/Cross.svg @@ -0,0 +1,4 @@ + + + + diff --git a/site/public/dist/assets/logos/Facebook.svg b/site/public/dist/assets/logos/Facebook.svg new file mode 100644 index 0000000..a2d144c --- /dev/null +++ b/site/public/dist/assets/logos/Facebook.svg @@ -0,0 +1,3 @@ + + + diff --git a/site/public/dist/assets/logos/Heart.svg b/site/public/dist/assets/logos/Heart.svg new file mode 100644 index 0000000..8a9bf53 --- /dev/null +++ b/site/public/dist/assets/logos/Heart.svg @@ -0,0 +1,3 @@ + + + diff --git a/site/public/dist/assets/logos/Instagram.svg b/site/public/dist/assets/logos/Instagram.svg new file mode 100644 index 0000000..db3f47d --- /dev/null +++ b/site/public/dist/assets/logos/Instagram.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/site/public/dist/assets/logos/Lightning.svg b/site/public/dist/assets/logos/Lightning.svg new file mode 100644 index 0000000..6e709d0 --- /dev/null +++ b/site/public/dist/assets/logos/Lightning.svg @@ -0,0 +1,3 @@ + + + diff --git a/site/public/dist/assets/logos/Menu.svg b/site/public/dist/assets/logos/Menu.svg new file mode 100644 index 0000000..5c34a13 --- /dev/null +++ b/site/public/dist/assets/logos/Menu.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/site/public/dist/assets/logos/Star.svg b/site/public/dist/assets/logos/Star.svg new file mode 100644 index 0000000..b81dc48 --- /dev/null +++ b/site/public/dist/assets/logos/Star.svg @@ -0,0 +1,3 @@ + + + diff --git a/site/public/dist/assets/logos/Sun.svg b/site/public/dist/assets/logos/Sun.svg new file mode 100644 index 0000000..9346762 --- /dev/null +++ b/site/public/dist/assets/logos/Sun.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/site/public/dist/assets/logos/Twitter.svg b/site/public/dist/assets/logos/Twitter.svg new file mode 100644 index 0000000..e050331 --- /dev/null +++ b/site/public/dist/assets/logos/Twitter.svg @@ -0,0 +1,3 @@ + + + diff --git a/site/public/dist/assets/logos/Youtube.svg b/site/public/dist/assets/logos/Youtube.svg new file mode 100644 index 0000000..1fec804 --- /dev/null +++ b/site/public/dist/assets/logos/Youtube.svg @@ -0,0 +1,4 @@ + + + + diff --git a/site/public/dist/assets/swarm_icon.svg b/site/public/dist/assets/swarm_icon.svg new file mode 100644 index 0000000..7e0dd81 --- /dev/null +++ b/site/public/dist/assets/swarm_icon.svg @@ -0,0 +1,103 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff --git a/site/public/dist/assets/swarm_icon_negative.svg b/site/public/dist/assets/swarm_icon_negative.svg new file mode 100644 index 0000000..5fc0dd4 --- /dev/null +++ b/site/public/dist/assets/swarm_icon_negative.svg @@ -0,0 +1,112 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + diff --git a/site/public/dist/assets/swarms_screenshot.png b/site/public/dist/assets/swarms_screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..4368770205a251745e32c17a4c4bc5ae8e20e228 GIT binary patch literal 92637 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 NG0SRZ>hz`I{{muGxZ1 z+E_^ z(N6XHpv3fu(x=ypj~|mp#UG#EJI5n+F5?`RWJ^uqa~~b9@iecN)=k7sGvi;+@A(q6Co zf4|<#oi8jRo%{Et^FS)}-?vk?c=OT!{kqCXVX*)2*IQ2N%73rBc4gWSuijI$uPxk9MT3lRwNk@k!K&E-LorRsz%P01% zR!`~v-y3qHmU5cwqJauZ1LnV9Z1#mXKye3;_$<;&K# zw)~R`O(xc3Ek{?E$J0-`F7YWVD?bhi@hvPAxgYcO`Y_Gr%@wykiTmE!NEwzIA{S>Y zS$B*#jwydNmJmamd_fS#P=x^nZ0j3*cNX^%Lj zKD}U&tV$w1jJYpU!bV}#?k1EtPDNS@KZL{Zb~|?Ren5brPc^HLL5XglKQr&(^gz}7 zPoK&xyi`xHva-(o>|-CQ4XoX`P0SM)#KEv-Cp88B`2UIfk{q3wl(acPDY7y|&;5b8 z%fen!QPzNffJj~4BS((ZM~X717ysJAuw@gu6yG0OnE)1_D&KA43nh!aE;9>VR#km{ z?0EJ03l}OXyeXfAgisQZ^iphBMMcFW4u-_kRB2UJhF`ya)u%D<*%R>NhY3FY_3PLD zElDbo?t#MlgXNA}_n$6a=rjvGb?Y!cKmT;U_qP3q4#k~KH%eF5H_u>ad$?8V@k%T6 z{wdB~%dOg`^P%z!y&O$Ce;zWcwHy4I5tvZ?B%34C6@7gpDOhe(jwTU;u}$|se*CE9 zHt_lqhyINlzW9ew*%CcDnQ0Eo!otEO&fv##aq-OjL{z4wO??SDzvqGA-_)a4`R*Ns zQSGCe?t)wNY;3eICf@07lD>RbCbq(3ZI-=wWvYmSn|sphX>aIWDnv|W;^kOAvo4qdsi@f{c1L-v zom!ae@?BnT3vb8`QRS@p_919yuKD8GIOToEj%`&^QnGe*%=@YyeM$e@`zLsVjiiab zGWM(+pM+f2b{tWvesd+6j*)Sbi;GLQ$NC?QOhccJ+uL{SnE7}tz5K(6&HhZ>V+(t^ zs5Vg0?!ND{m3gpH^r!i)1k_na`N(yj$JGP6f`t6sck>rU*rGU*;$D@!q?J(FT15b zaaUsE;x>ytjz*0Urx5=>75b;$-6fD(9<8q}mYu(NQC3NbmW72yq4vYDE#7jknAmP_ z%5CrN(;w&`8uEVq`XCBO=yIo;nwo=LK~-ht^shSJs=B(ZadB}=?PY5|Nh%43t4lLX zD~0*_<@i4K@yeAe8ijUAHCY#xlw>qDSz=;hNF*GHyptDi1>Cwp(HKrdGnZyI)q@8Q zB6SZRxlHM3R2AS@OsgKtl=kjX5)Cai^*KYs{ZpkYmetkOSi9CaYGoCbnbCwOhxhiL z$x-u(i5$2v{U4vBcS^XPJagvEt0t2S{R%Hu3WIIiwu!AR4TXxk2zhyXYq{POy8Y{# z*y?oE60+4y1tt4lZtm2ok9~~)$$oc{=*~oYp4%^V_UuMlHnIC>eQ9$#59VKtk_Z*M z&5sQtcXV{jFDS6Ld7$zq}w-JfuK%kfxj{gCE{_W|d%bW+dZx*ub{yHF7)gbuR#>VEe ziNMz!Gv-|L4zDK%WOMU9baWzbl8?^K*U4H=}~lh-KD&PE2M7bi#+eZgCj5bj+v>b z>|kMKjaKE{7xZE8lk@$PlL58t9=kb%x70o7K5J=dd80?u*XS?i7>h&X)9>6#B`Yhd zdgV%VVPR*sVsh&sj;uzWW#rY=(VWVvDtZQnyHeg1Qv08r#u>)JL7WS=mg^#BV_R>0Vq5+5(?izOlv99(W@2KZe|Xpj>A~stZQ?x`kUUlU=SG`3 zjvlS3@n_D&ZoH0<9}E!gEx)^Y2cLd9X%(?9d-durhpFz4Xt#SKpP~Y9Hpi2ZzI^#I zo$m2x>!wYcQl~sD=o%Xuq*YW@{8uJ>OIV8>e+vEC&B*Ap^0TaOZWbrvm2wh^H1sau z#HRiIrnkobtSt5|EB4&oclMrs>zgY(j~kMcOPzLe6UTYdG-vAF)!6F4^h0}dT1&Q= zcx%ox{#{}#zm1A-)!v=Y&p)|3pYBof`a+OG*;dq};$pD~QAb)IAD{R2_2!Od{s}Lg zw_LbzfeI%fO2X~cB@W9`u`J_;%Aku9o3Xm2(^sxAF8u5Zob1XQ`ZZjK99ZkN*yAhu zvv|k$2jmV84n(DRv`6&bC&~3<`Q=VW^1taLM)xC%(I>H4YE;F?PoH`efRx^_vA0Ka^_<1?GHT0y-{;8s$5+(vHt}`{vUvn+OuS#||9(;2CbD4(+kxO^- zU!wx_pxq;Kw_VR;&&``RAAh(;wPj1?!(Au%+?MSS`JcF`1q2176BDV5940HjH-tZV z^5o99Z`bO>g}1T0PLs(5vISr(i33X{BWGu4Uutr@KDWhzq=c7V+B~v1Zyr@k*9|}- z&;Gs1OD$P2xC*5QD`A?sYtFIHjj}-dQNgW|u(qQNTbfVo6f)n51ADDAzR9HUAl0^A z{Nz82XKC-zuu@3TUDDQmh_Ko@Gc$vOZJVH1COSXa#f-&xc$F$GF|l0Bs>H{t^f!UR zP@(WAwe+!Rvdz#tgNd)1#<78{Kz1BM7SWeD_^f)xRH)L@(`%RK$1_b^IT;ukqX7|+ z{ahBOYQhA~i2EmbCMO?z_h^qlyT>ZMw6yeOVPM)nNZumf(baX};6d`t%*@2}bl=oe zi=xIOK_7_26&kv;rM=zgXK#s4=VA+P7WsVV31e!Yy~apUU*TS-jR;_0RKorW@8ce8 zt_Kev4y)8NGCFYX^4+~u02I@|ex12??clv_?2n}VnFf$D-oJlees-Jq-2<|Z^vgZT z?gs|e;%HdU4AwaKu4ZKLacN|baFUU|h#b_GuIEt~yHR*sjG)VcxxWPpR~3#twTsJ& zT42dSO?hhD&fbSFPTVm3@bnPX=FP_iKST*zu@P5?4^k>~cYG=rw^Q6%V5(q*jU!l& zbQ-%z{QquA_u^K~HLcce?Oh}w)QnprO0VPM22ibJw6(Rv8;={;?4ke^eSI~s z)=i=NA-d_Z1_t|{^XfgSu0HpE*p|x6v%LH?u=790bGaRWB`qy&dVbzVF7AwtP3EY- z&8+RQ5%ZfpIU~2MtxqGhsd6&DNlw0e>5{(bm#!x`rGT|IfYjxvxrYuN(kOEm=Ra{` z-;?untgQZ5lGXM}NU%|OlQA+fzOSo0YixWNi3jVCnND<3uT!tvwB^Q{NY6n%HFcXSl? z(TG!iFcRfa+UmxB`y2hUXV3N?IYOC~ltkcEY#RNJ9UHBzte!o89+Q?vOVF|mhe=IR zIjdFiouaA2I=e^N*#iDeF22Y#AQRt4M#39Zy03n-J#|gk2O^yFYbsTEX4lox%Gb^Q&h?!9ndo2g~bG;8NUpd-Xj9}cQ85eSp9vPw;I z)zH{U>@Lf-38ZBi3k&XCt3J!zK7ZcQuTyKw1qB7zwjI~_cOlFWlWnFAIodqJf{PSs z3uZrmXiha&|5XE8ww^z@onW3=+&g#fOixdn*t{NiWNc*QO}3F@FUs-n-@lFZ9*QoD zfSv$PpS^zl5G}jJ!^+AtiK?6rcc0qs*kjL(55bAabp35>-dDN@>;`#M3X9U)1aBUQ;X+()(h1Vu*+6Evif<-wxE;{(kHSPsHy7}cG zmrfx=Q&SVkGa_O)k> ztA@vc>&>_h-`V&1&jGBq_twRNjEGy%k_Rl)7Kc*XGPI^MGE!apC5LBzFpQ?hbtSE>r6$(sA_9#!z;}c z6=?{L^CLEJKMzl%;pybTK|}MNLdKt^D?B{f`T7oNKs(oN+&F+(+v2kU+ur_1!G04^ zjo57ciTKeEoX3tKGtoZ_32`(lu%!5>fb}fk`jB?WyemAhV$Xtuv7RSIMUCD+-bW`* zPlSK21?$+@*k_~|v6YD|Cy=0li3#ce8E-IZA|e3uh&wl~54{7*b@1Rp9IxoiOnUGO zuvH(dUPMGhr%u(MKZ|{Ojw`5;3em?;o$5##wFNbhSe-tbUsyPZd{Xi3s0trK4p#^o zTG89v%aBd5a-3bQ2oF^5e7n)@3|pj&!aw$%pDovDUvQyFqs?#WrGMhW;&X-!^uPHN zNOqvuFDi3$bFSra`Geb$*!rSy?*<_ z@*jtVZF!+^5BiMZm)94p?d=8kM1_Xl2cR`Vtv@d>e-^)$0s{`)g$AlPN`81kyB7T{t%7jG{pi#C z_dlK<{sla%k!?Z`wkGmNb28IFj@*1$`Rm7n(^+N9Ppj(G9$Y`L;ZjIuQ_%3w=S2#dF}W{~9?42-3=0dh{_%Mq zWD}H|Sa8m>@$-dOwu#TteQ%63GyM_;t&WCONTcOi-_$?mmnf}sO7Kg-`8Z|dHAqtL z-pTx!cc$_p#VOz9OsLTJR7&s$F$9Lg!qqnd_5q&J^pABHx3}qn>yhP)2rA4Le-siD zicc~SIp#!wT1a!`Bm{R}{zaTyB4*6Ha%pI3Y2)Xy9iZxoiHWCiu=0FjDcPJzc)38h z!-#|Z2uc0q(FR$e+#vbmA8QNFrXP56o-6(s&j0SUrCP~B=l~`rCZ4LCf;2+Hz?Qgb z?6M)aoUv5?RdoT2vL}E?&35{vOINP=@RlxZ0I2wJdE@o}Cn$j9L6nHJkE^+q+-hQK zdPY~54JqfD+#y6^|J2kYKff*4u3sPc5+^@BGjm)}IyEIlKylO1=;-DfBgq4@4AKNi ziQzbts#XQ$74;G1i8q}Y?`QZaB1v#?uH=v+|qI_%q9B-Zdbe1 zb(eAy0}l_6wY9ZplgT**IwvP5qMA}tQj(BzS%odnLCcZL8y!t{Og*jo zrML^YF5QkDL{TK=cWURv#B3;UogV!5jT}ruOKWRn+7QL1F-4$4h)J1tqhGp8PtE0Q z&x<>Kn7-dAq4F0!+0K3w?@G-*&)1&%XI;;Ubm##_Kxk;K>iEUnhkCY;o12D=j0`{u zR|%A#r%1;{PKL;?#3~Yq}i7S|ud>)Aq+Uq5Qth%9C`o}N9xMuh(MY`mqdE#}oL65b!`6akSH4xhy;pkQegFAe&myjLNzGCkJa z!C(x)ZBN?$paVp_q@v=DI!f|HQk*KDRU)UPJj)<$-dns&CYBxq6DcqL^cS&CTgQdk z;yr?&b`;x;rDV{;@ z|HuuS5WL{KpcY1DKURgQ0E!mo> zHy^bDJa4Y4sUcv$abv^-3Ag1}9_wrOA3c&m8HApWI{zdp%F5v)GNLS)6to&btMpi3 z=|ic3fC>HNE{>vNoZaxpV5Nenmv3&r?C(>0($c*19Q_p$@s9!li7jJI*CxJ(>}g14 z3|n~(S)*C?Ecb5ygbbKoGnFYgICzip+IZ9W zJi%OKWGMC@IPm20V^5H50@R*3v4aTjs%?@FKS`{l)HDU9m-x<(d@`Es%mIQUB(f*L z!J9|~i_gBYu)dSmDOt=-hh^|PYM zR9UaK(bVuT3VAKlVopwuPgYje)uqXl=ZwNtfcLZC8>)I7`)J~nHzTN_hz)^LNTZA5 z$eiBuFC#lA#l-A)oox_4dHdHv9^K-vQ@riCr?S;wTM-mcp=>|`!fD&{KAH&NzBWRl zkwHb;uyLc!C-KF<8W1;k4JbJ{gkR8+i!r$i%WmT1V`CZi<7(Q)PV_hzL>3JQpm_=E zwY0n(1JX{pjqRMN>6;GMv^LA{^)JNVp0bmF!#cmTf5+RmI5&_sVE8spc(P{c`iV*;Zy|=K3f}c1RRnnyL3V{7%{ok~8t@ zKEyG$H|r4j*U-Dnd*#w4PsMN{DHJOtFmn-RAVJjHZu@qf)P+L}II4kxfulEoUWiO_ z=+LGZ4(xKYyqQ9}c7YelDwp%iBz!+G8m=yIU^&PEFfb%;=a?B>hA0Vt}W z3sEMi`qkGftU@>E;N|^!x9GZeS-Mn4BqB~k$;-Wf@v>ZkjnXoT49 z?Su+8Ir9DcJ<$EI5^WH%hc&0KZls_tUz!;jfEo&6_rR%B1KSU9a)tP zI18{5f7_u*6Vjv7OR)!$qK<^VuB)r-)PILE!=g**+wgGDuiN5cV$+pdc?lIChU|^1jR`3bxmF{~m*{9EZV8LuFm8gj(L10ag;{H10fAR< z-)@IiEUlnWZy(6b!}AU@(e;FWQ1c*dT`Fm)00#@_eK7*X%12+>inf7)%ZK3gs#l3 zl^Ys)1PVV$H3UQ7f2|obnM4m!iJm;!k53Tv(I;hOW>!Gb=5w0vXJw1RNlMkq5I+` zvYf$h6l;@P$Jk~o@BVGSzLx`TAd&$j6^{&~TH36z#5QDKLa@%xW&oAdQT;M*W@^fK zzQ*gnUVut;hW1jO@ue}oF2G{*>)VCqCz_txV>1?eV&kER|o>aN&M+ z#L5lQ7olqQCaP!OHoiy@`PNCK7-i+{MA9J+xb>}D-U^4kIsAxbkEJC~>C)g<^RF4v zHS}Ktp(YV&0SK$DjR|}($%ZCd&+iUjaOG){a^K}L0S}# zm%l?QFI@lf*A75c-rD&N61zb|m>^Qb_~ToqIi2H=cwT~0oVxX0gPN{YH|v1w^ynV? z$2+aWLw6lgt``q|;PJA4@-aVAB&Iz`@OBIftor1AgP?J&CQtn)vI1id}o--=1}d;e#VAZ#J;|K|!pFzny|KO@Xv zlhFUYnMlKp4vG6+)cWcTNGy(ym*4ws_Cj$n%(QD+yOtC;a)j!PBXhF)z{oSav!(jm zDW21gK+RP|3k3@CK2FXpM3WQWDk{>r<})}nG%z}Plc^f;mB40i-f(8Q4cndq_3IxW zH_I&r$|A~&Zu-xs{EOFs+Jg=&dYy^p(~1fYC(_N#E{DfN)0=`KEVbD*=cMg7Do8zr zNveduN&P`vKDq`E#@o}G1z7?({9+Q3Q0B+m{iUR&dUS<&+VUV$>a>i{59T}#3aW`d z>#I32{_WdA%dZ(ytEtGMO})LPT|eWFaDf^dUcLIF=7e^UL+XzoKfX>57ez7$%N@FR z@17sZrs4VX_Y;+qG#MjB)qwhm`ED84W9FEP=>MB{W9^{17=48t0ehW&^&R zBAKtxl?3_vQa*k9)S75mfZQRuR`iy*Kuy={hw$B_BZd%<5y~puyPJXG+Lj9JT>Lz$ zEx_)1C8c{!CKK-%6q-Edw;zoLq;{YytRcblAnis-xUmqeD`-NO^z`}) zd=8IELqxpydv=5X?|>@|(qLCHkju>4Qbwl+iJY7B;>xChQn!`CxDZ{U=?6TZpUW*S zz6V{j!vLW5ot3($>Bu3eK=i^Nf@3>7@8{#A!%~Lw8Ek-p{fMAx%)Gi2Q-j-k769|_ zQSaISsa-|SL5i+_V1SV7T&F82>7+BUXxQx*A+;TMBO@X*Oq%u|Janj{t*y;m3ql5= z^Y0dSe&+pc&K8%Os&)WD2sz6eiZX$}f!(KgG}E6(M3^6^YdsR>>VKM62W3&szu6Xa zEF*a8BTnr&di3b({u|QdQl8%48`+$H>_gLDe}1gh{BX}5Lqo$?s+w#_X5pBmKM;ui~6Jxat?KVRMpR^x2bcHk6X~2hh8Z1(4ZrkGG zqAbMCw{PEmm5lfyf)<)uipCurfb!m6Ht@q9or6T+YJD;5I*L{{J7FhKR({&yjDC1a zi)!)O^7u)o>Al{8!O-I2+u00{Q;> zcr1T?ZAEdGeB=7o3Ush)q3oM9J$vq4Mg-bL$v@fBdRMUK;bUc-a5D@J62XSnkyMf@ zoNs60R=}C!;N%>m-{(yEPv932T?pyvO!R5AXR!e2c^3ZpEx73Ovn!8x_wL<@3j+a`=;qN& zYHIhO$alFn+5x-r^76vmP=PidG9gYfWJBUZ;l6WZeu9MS{7RSkENR)b$i>4x3Zex&q=}PkrfL{hb%Rn0H`zo=mEm5x^=z8PO3fE-5jvvf742 z>0Lnr$wUW}Q2yZ5AabjpzrW~^TBkJp8T7=WxtHPbqQ&h}MOoPyVPr9$3 zgpsIsOy3Y~mrw~e5p5kE#qrn5Nj2`ES9j6bJL<&9#AJweP`>T3oNsqfYAW};09Ie* zU&GI@q^unr?tzIz!$DP0oW1J-fp3p(3EI&Lp?qXWFYx1f#>U1Tr6R~yMg|@7X8cII zGSxQt3n2y>EuZ4&|6-`>g0MypZY!Zl*>`kwfIitLUsvH^*a>S8Di8hk?S@;%uze6N z6PgD;1|I_>sm8&vS(-K=nB?@!TAULcxUl)0cGz%AT!ayi9#unD_i&ntGer1yPM+Ke z1`0w2lLNFZ2)_bc(SV`z(ed5?r>X-yT5^Z55AbNCJ7TBJoqi-aPLupTiL`WYu{2?2=JT?l-x1_66c;o?PR zGcz;k*rui*SFAu!Mj+4ik9v4X#5l!M>}`#?%o#_fMhZ=nb*hE{N>9zxFH7TA!ylMS(bN0lCPoJ3cEPFVWq9k-wlUv(M7D1P< zrX(iviONb#`<(PxTV-0*E3l2L5%l--tIo*C7}vdl#?WA){do1ngn4Fk^g!V!B>Vg5 z$qyz(xpN*qc<{b*Qg+vR`rv;mclVlndJ_G@uV0lh(*Ar#@2IiVSr#F@dhbve?n4%V z(3}}AcRtTsmffu-M(8UJ9MLhh+|fih!mK=2Skb%Vj^DJ*Ek%ceeH_LkD9S_?BDlIc z+EJEPJbNH1Z9) zuC6@ii?9U1CwX2@?##J!cdzC>$o+-X{Pd8#H3TsD0SgpA@xrIOwzdZ6Q1y6v*`t({ zl<-nZt$Y0>mwY6 zSG6{#wS`hrP*lPRO(2?~0O1U)K8Z)`rxEAvt;ZZc& z1y~*igzoE_LD<)kI(Zy^!1SvggW4cnfmkJAeYC@}%QqOIk5$z2^a0fsOYZS&gLa#P-(^YuXniDP#L7Njy zU73t%hxd1>=cl_bvU7M(IQl!cZ=a&webN&K))+&C38;p)*6m7Jq@=8?OUOC?J!{&|<6kt{2M`~buV0_z;^7g} zO4BabFC-wKG517(B>)*d)@h(}lMUP~Fcim8XSE6a-)}*m)gn}M`Lyah%u!Q`Iy{9f%Ki$R&US1tVy?L_wM>fnK?O(gt6%O zfdjEM64f4m#`UD7=rr9dHB;LLLt#aE0GIKeh1({RKjHTGgTsO@K{4F8Dd7|kk5V_r z2a^9NX^kHcvmaBP0iZBmL5YA-%zv=>_Ut)`+x|un$q&G-`C*U+jVDG_8qMMa$V&I& z2{v9)zjEaPZ^_&j`=}Z?4QjAqTH42s9FbK}P%xhfMYfqiJz%QE8SzJ!;$~}p;dU2A zz6M=E%~hUHFU611vI?ct%wBxKFU@uIXlA~Qn%eWPd9b?tS@-)(v8)GdU3kTFZ)SrQ z^}4TEbVK0o(P0=fMq`G6&x)B}ieaAse0mqN*=&|-5Ek!B5H0JTFkW0gIwlNEOkvL- zKBWGuxs|>}OH20A?h3-<7TaW!+fZAZpcNKLKvI=>g*&*on~@xTfP|HPjK?x8dqi4V zT0-}z=;;N5Vh;WESa;Hi zkU`#haHY~3qv%`#e=FuoK^u~7>dUg+Tqg8IfXt1X>tV?QY9k0icSCjsy#7d-hHVE6(OmJR z-BStwzE+7NKqiEI!|MC=PCuf3>zBM}^<CTTy$(3YyzZu+XtM1U~7{~d~e<0M-*`ci+d z%g-7lPAjL$ToLrpi8%4+*Zp~lRF3rZs@1e1%y28Da!*g%V_I4tuJQYSpNrw>wKn&~ zK_)DcOyeG`(}b9s)@tN!4HtW_>#QOW!NZ-$V~YIGiUT~HL#>7ro6mL0x)=r^;O6uG zccziTPP!~iC`Rh7mfhBbcdy=y&pPK`!7&)@(IBm8XlO8ZBh0(7vw<3ov+1F23wX2( z{VJjGTD3Uk7d}O4hl4)Qv9nvv>`#Ft9WG>1I4~2!qvNHNV5UMhg~jlfG6P!TZX?%A zMq?T>agLK3(q8F+z12Gi5g__L;Sx#-&CnFCQl|}1OmttCHp{|d`b(66Q=ocPp)lJZ zE}7P4(5pG_IHm1BKRN25M1+K1AWbF78WtSFXhL)&U?sK8EP+S^C+l%!@uJsaXsgzl ztxzptzJ+K*=bjw)S5CT%E(bInKFjWtgjACYm#fiW^#fSqot8%vo&*Io$B!pr5n6&Po)>wAgfOG0*I;@}`tmur&)hK_Bos;Hed!Aq9$ck+ zUN;PMa~H>7PF`NLxSJS|X>bo|fC05VdiZh@G0A6gd?yiK9!pj1mQJqnigrb&-zMRm z+`E7O2BO84m30E12l%QLqEvD;djEgnR*Ja4_Gg9Y3jA}1Zhugn;-E}-w=1Tj)ZgE~MpY6W!q>0K(L1pa z0lyc);_UN_85Q%|OPIXe;M;jlOoV`?akt&Le%;+A0&Trd&|?Ltq=bR-hcVOT|9X#c)_6%&Vi&qSA_ zZ$r<*;)ildnB35(C|g@T2DJ@l#x$n&g}+BBp_bC1e~fwl$V;aUh@{M`4H>X8zmoEv zCbTTL8mHcd85Ft^wn(+DscQaj-|~yiRPVruS;p0X2z&_PVGcf~p38FgXZ{dvigv+v zSQz6^H|@a5^fyk&0sy5n>`Q^05K}0?PsS><9Kj!%s!Y^PUUn_zp_eBrKy{2^OP18T zwBc{x?CM5><>F8@%x(6*UD$cb_8{RiM&|^@Bfi#E=}xknv*W~9vK-BT;W}a>uzjKi zQx`OZT?Wz=*brd^Mkk#Mi#>zxwgLL+=M@zvzZW6UVqV6KxXKsa0pJi@?7oEraleDv z6$lDd(DnCl2u9k zFv-zuX>EN`X*jD42g+rJqQU2B@;o8og8r8A&7+oMVrX75k*RP7=W29yFlr{>Y&8+s zv)nywd)xm`Q3<(}$;{%Hm$Qm6z9g%s6Ei+&=9n!_2Qbc$@Al5KNiA&MJ4uBK$N-bIO7CRJ-ZSdAV>WJt=$~c!g$|zXbfDTFkq4J%Ecp#;UJ0 zp0^#_h{=%_u33;gDYVC+Mkwwx$6;DpTluM#syM-k`{cf-8!XrQ{T9T#LbM^_lLP0E^aY*%=s@#9eZA_WhEH-PcDA)Jwo+BzL|d4}=-= zDd7%YLMitLStLBn6p_E?=LvH{$hJX;18^%7NRW=1+1HoNnF@M{PkK5p&I6VLwlFS< zK*E&?)*KbaQ|CCv~^bpPQ)ft4>h>gv9bBL`CRdf{)kNqC-Df)Nug3VMKA zU|?j|RHaBeZepTTL`0K(Tcna>$+APzswt!A0LocR8|ExO?jY7y6W4a?HCNXOm> z@*zC-Uvn&j(bPj6@EKN9WyOz^rXg((A)8yyp0>^lM@1q=cc5UEW7GgQa|ciueur3? zW#Ak-;j#;fm$1RPW| zvh5U8H-`{k6VcP~=b>m}pqbW#n6HC-b-<#S3^K&QG#;^m2)T%`5= z42G#=UdF0Z7?4gn&vEF&RlHlo?!9>lG<{+eF{EsD6DXCqDc>$rNw|>U;?BuW&B*vX zaRZaC5CFp6WX@eahYdA*rNl)X+vG{v)xqD&3-I(P|CWg3SFHg^6}iO424*pIM_ zW`fkbm}P+Q*P|*jMhl-jED~>OoPpnBWdp-fRgzS>Y2Vw$vdBVrD=#m%WIaEo36T<# zD95p5C$xUT6auemRaMncVeQKDvLOL7V$Yfhu)yC`+&U!U@+t$xbN4CR>Om0@bqwk) z&;$lPc#yeMvFH%6`0d-b;a$r5Dg;1DE4Yfr<2#+IDb*XJFtq0PnW%WK~ez2@v9c zd=m};F@IN<>O3?GGS-?#dEvo-)g;#HnAtvr&CTz7Iz= zm5mu)ClLL1aUDj{rq?@)W~VvpHmsRC~j5&z>uM;tt*U(^T>r+n+uTe(ZDi z+rew1r&fOdF$iLR>`4|R_Tkjec6)K=tBt>IpP~94vEn}EGTmRHUSd_%CKocatWP3Y z3rgtSjZ62qxsFlsMDRh~Uo%KJJ?JfTW*B%AnCy~>s}{mFjQ_e{{KY8u4*+!3J-99B z?=Nm-!$xA!Q+TC0UeSzy|A<3T4osQy@!RB;F-ZV_N|?4D;m|KZhk)gTu|g0RG5CeW zjmPc_XgNF#_0v;TeGN=A20<`@eJd5!r84(FbK!lfGQeM6&I=Q_Ke$0pj9*_0T>lKY zugf?+NjK9_I;;JMkcp+>C<293L}Xbj;zJxNRt~zBhlwhg4oH!PvXOXUrW6CgIWX?` z*w%4#>*^F17i+`dtE#Kpdx%~5g+k$EZr2=|I-@9aR>~Xz1KB7VZa}}z5NTR5b=UAx zTr0|L;f2hj-5nFRTHD%$j&>Uu7+~J)xn<#K{ITzKA3vHZziKef0$ph^PN0%p>i6!< zH1fr2_3kUZ2yygTXlNpAvhorV7{Vnc)I%m#+zNoLOFk^7R}FlIn9{YMlSG=Pf2Y^q zrUW-`a@6X#BgU> zrv$bDd(E%n>j6!>E!=nWf@YID5hM9>VJ}i>%u3004Gfvr{ zx+UOY>TZoVA&1);`yf~@V`>Dm8;1jHV=+5af(d%Rz`(M!S$L7#fv*Li#s#p67tZ`V zvUl%kq;XA*hZ9Tpt|kUU=x@Lkb4@-@59eBR#baW0RC0Y*vNcspcoR7}2Y$gg>nftH z8O#4HC@2;%A{kOT0=Mn`lLLab-`>mn#ecZ=CEsRf4wDu?P`*uniNRj;Rx|aNb4f_V zCmqM0IJ_Jea}hY!_T=uu;pbWh-AW#}!0>fNL&NEVklvSem2$_a?j+=1*u>6bx3SUT z0(kdi-M;SL*lMg5Y;2u*R#D$SMfGV^WAh1bAM%+zf~y6$pnB=jtH+P&6hrx>wn;3# z!t)7Qzh#1yCjh}Xh*OeCpMN|38O8LNpRkZnn^{&zG4rjHyL)jIoNFKL8K=r!Wo2d_iG*OwxZVhgKc)kk({7pPBF=WvpS=r!Gg9eB&?h&@WepOa z0OLmO3$#PJg^nKmAbRV2{o%aHrdVIc-@k?x*;YW9do6nkb!NteG57LQUC*u6JngwP zE&z4W2?JFN0Uqiw6PO0g7HB&-l<^4(aN*z)%!E1-V6I`-qO#60qqnuvmoTc znc7}J5aTE_(D+`AzjkZEFx#Lfn!Y&x(|>Ht^d}VEV$jb93EvL$1*|?Utitw&H7p|Ix*X%=iza*N=Q(J%xZ$4RmVOrhO$% zpm>F7ukT`Dcn$Bw6|@GX8Pi{!8yT5*9<~#)|6acs)VN`IP$9VX`wWYHcooyYtZvEV&5! zEr;3<<@rDj;MObECWsh-uI8MpTJjZ~S`p{DAA;iT$Yygm^J;`-1Y+%|IP%@LfQTeq z;-&SU>wn4)H&64H_Q2klep~Ae`iE{1VLIPl#}bce3MAK9<{d-j>tOsG(CKUfN!l5{ zUVET1v)+*&{Or&nX>>NiFlF-1p{R@F5HilD!xz>q?Cvk9X=o&NcWd`pSJANWU%Rhx zI4D9X0WNzYp&#Bl{mO{o7Hn>FO-y~g6ztm|i6c-;qhK@xmZh&#ut|U|eZQF22MrLq!C^G%J zjZFOa4726o*r8aPy-igyF-b%#=H=l)9UYxiR8ip$x$lN>V2S`qV7Lw9R1CPC&)vHM zE)vLrFob;0G^%CTu_G1UZ*+W<($bXBiyA{} z&kEGJd^wtc=OM0;omAl;L7E!t%t>}$oa&kAOYX5$hZc)riCBR8qheyk9|o<^+$Hi~ zSh2osmqp%9{4j(|>3UWN%FNemt@anfBt6`R7^WydA(vq+2v51jW_k9qA&GL{Nx|YT;P7g8C+4+)dCWK!ijpuh}p+|2ac14DA*IzhcDUB8JJo zV3fqRmD@l+1(X5I+pXP>J+F&9q4{WdLpuyvwGLp;&}1BZz;3 zws)8dA*Pj}U$+9Q+GB9&wip|Hmx=^>_;nJ!TPuD|SInW0-ea}Qf6ev$*)tQ&b#Wd& zTJS9w&^S!g(K4uM7$XNY)z#WLRC=pBp{X?^)!Q{I3LgaxL#*N6f*Oofu3QO*56T|m zF9h;Yv_p{p+kXu!TU%#fI6N83xe2HqtO3g4G!qU*5GjZYa)ZGKfs!9zThckJ2sM1i zVTI4!dEGI9`$>pxTaic+kF{d7;M34KBGHwWq)3Pj( z1_xBTcI`FJpt(>uL=OAuekpF<;{1-4g|Sw7{Im_}P7qJnfEIocNfp;XTos1GnwIP{ zI?Pd?i_tG={$_(>(Q<9h1GgH6fr~@OV!9?B_K4V>hl;GoHUt^b>g}7{R?}AaUCU-R z-O(*^z6k)qB53-|vUo-Yy*mv^!&_)+pEr*_Yc;)MU=R)390yl>-0Rocv*!^h(|YbY z0FZTr3mgrv`SfS{+2Z>(BpTKyzZiSUR2k(oyf35(Xed+%QoN&r%U(#Zp9v*vt&Xq6aoN6EX7#*zybme zE&ihKzeoA%-J6t`g)E3L-+KD?{a)9v44Lz@3Wb8e=eQLi`p0N^kdwurbADotL>7M)XUFIIE>|I{=&87Jy zJqf{Ox$B`vTZmut%x(E1(P>@u{iF5i)8*}5M+Ce32S-11AI+u7yZ-ubP<>`&DIBXg z5uW}!I$2jtu+XOU$34baakfu~wqDaoq88>#yDk*2HTR8pJ5n}NU~O}LT~n~gXiaS8 zm$>U+U4P3peF@%befBEtmMu@QT&{F~U)dQ{JM;wSq-)ZWt3ciMH^a@@V5WCZ!7 zx>CU(F=&wU;lbaRe%^jK=mJC{oLgj1MG8}1-goL;l?^wS^1CM0E?s&IlVs(=&md1a$rrQJ2{)Zwfw zGd1m0dMO6k(6Ka(vkE4k{(Yr&B-{pobcb|qOOM`bG%IyIlv*e2!>Trfqi$fsMSSRK z-)26iaqE)@1wGuRYwFdDq^cw;zzo!P>;66C<>#5Lp0qr5yBE$dP{*EPU}YfV^)HI9 zo}~vpt5@f)e5yIO_wNnZk<%QgFw6xvj5t~ z_5kwiU|;B%bReMCqi?#}o~*s4#Z-BR(%W4=n9SzkK~RYxJjVXhHSFU+kvTfy180PJF_?E9&awn3V_L zdW~oMfjaHQHexfelK`stZ(yyFooduKJCSg%?QQ)KlS8<^!xWwZ@L>X{Cd+ZdyLdiQ zDnzbCy)t+H7YY=wDM|ffD9xS@?U$~x5)-e(BO{0gc`yUa^(&)2+H~Az6I;{DMbDW4fUJQaPRFqPh^dro zG$a#Y0E^S%cxvKJ?aU4!E37m$ZQ>FEI4|<3`6S;GiTv2maK+Lx4fA-s7g!`*^WQz( z6^p1h^gsHZt8N7fjC#_!*nhqT9oLpS>Kk`W=b^<$TGeaB#VL&?& zvym4eDV4k?KQZWUc0I2vI3y$iEdGM2_FdvFh+P)I{3o%J2V@>zf`u)%hU7Wk7PG&e z_XLSFIv!)YFmd(zjT^^6aPVLuC_Czy&dN&Oy0Pyb(6+mKDX2gW#;xapAfeTcK_4XG zZ2-HZE-3pIJG<I2y1WKc>KFfK5Edl*IDeSv?z&hAEb_`O|JK#bU#&v;ZE z!cN`C*Vhcj3W6fxc{8uEh{@nlGPRpXcGkqQ?Ew8E6e7G+@bl;KIAI0aJopnEOZN2j z^0G53SaM2=0`C3FnKNDh`xMkWUlDo)rYEzEKfO!^tIajpKoTGpO!7Oli5VyK>{Zp( z6F>n>fvrI`_(WJf8?pt;()yl#%Ay{p3#N*mhCPPk%%F`I&bMiSAMelVNI@q2c$~C! z3aE5xABr@>n20wlKBOeH5T7Eu1U#b14ui5|hK8ypo*hT*9KlEOdYzLA)&xL}z)&>K zdZA2Ba=#Be>s~o(_vYejC2Bc z9?*Xh{tlUwOof2*aY@G;G?1HVWtsR`cppA_`Og#62s9`Yf*^?*H z0j$EN2w8~A4-YGZzQUH6f^j`FBu#HzeMU)Q4}S3?31%bc4V=Ql>L?As9x}BXM5vQn z-#mN90QzEr<}ZtgT_S82X|N%i{`&TTcsHPthmSUsOg3T*r}zE$@PY58q;N$_dgwx4 z;1gl`Jb+^;D9!o?X zBQrDMVCgJz$pamF_-ND8ri5mY;4K!I)IlGn9WEj}cv?*$IlY>?1Bk zAF`)Ikq#CG_G(o)rVsRXjgQ)RJ_XQkI^= zlNONu4azqW@iH>^;2L~|hclp-;Y8%02TLqn{Ur|xLJ>g0KWlNbcgrc8CyHR8_Cpago{+OG|YjyQ*L$-C^QuG*QXZgv3og?~NTI zBdt9^q*EZ%VbPRv*97}V%NnJIb2mx&hLHS|L1&u|8v-TKhJYN>t4gPu65nsc_}X^21T$f zPsYYhq(cMCQE)QI!{eo^K;WAz-)bS>YR^UloRpUZf0;ME=aZpS1 z4@-KZJcpf*-Jo_*mn!*S)2WHRgNdpFufhb3#TB(Ms%zD0!G~x4#JHe%Ws%7AW&$H0 z$mebTrSoV{r9`Q|o9Ar~$Hx{vyb8#lJb8|vu_D|F@6S{EF=#Jv4v^J(@fQFc21dGy z0CnEXmD=mm4$(*O!lPQidZCYmr)77f3`aOb;4wk0*tv@!3eLH`ql@5!T=$@Zmwm&p z{+H*5YbY$5;!+7(5&*@Hh?XtuujlPn9%m`Y7fN~Of(NwP7b^*YXeWWU%1_o_G;xCAc)ja7$tHFlmgbUz*OI0S?af3@eXI4`_U((F z=(21W>NS~-#|$`RU^eSGV3+rWT8e@oOz$psCKiK3W&oY)>mV>TF39RENb-*T`%jgv zC|f=`&TW+h3EB##GYu7|RbNES%aPauRI1u(Eftm4M8(Mob9ORYCkAwPkJ<3)=^^&u zaRShpPuQ`@D3(?R)ngVXQ~VFg>BWNDGen|5<*$6vbm% zi#E6BBy=@3wHG)RsQ+zgY3P<(irl+%65i6~m5_oZw+bj9EbYs8gLD)%4@e>^Iw%5m zX1pFpn*;jIaq0OSKD_#Jj#{P8=Ie)Pf{Y|1lR$o8>C3vjyIaLh3b(%2Yt<@aSO!An zD3D9w-!3@^)hbVc$@(kBx?&)~yxHwbbie3ZAK+QH*Kxwt6W@w78Q>n!ZrV+pR9?O;D^R-~9z zb!qaiXe{ILa(xx9RIbfb6i)g9oaTF-m5LEvd-QlDlch%e77QITuwn?ng5fsv$v`efm#Zqk+?c6MBdUsRLdk;yy#al4R`6`fP=8SMLjU>j0c&% z1Qf{V6xyL%YAcMkU!Rr*6@Ta6y(d?G-@P&msw|n)O!=ajeDTJskHx%Kadx;;xxM(H zjMv#DP?GxL)#Y+~;Xgq14B4Woh}qIkr}RPp=l|mZq!hvSa|F82qF<8NsIKDls@&3@ zToh*NqL?F_xzG;V_vxd4ii4AI^P4tq z%mN$FYgSibaU2mEP<;fHMxSQWpF6^UKhW_}~s0Wjt>;luBYi0CO5oUtNhf>Vs+ z`+{WGW}Ame`$SYzDfLxe$?0VStMzcjV`*EIE=m3oPAS;=DrwNt0j;DRAb%tz1XA)@ z&D4wklDFv2-;t)zp;;%f5*tzEmcW|#Cn19%7S+1CcsS`|=P4#?Dqmx}Bto4$U?7m>b! zsPNLSxq^VsY#xh6RXS3i0o)&@Lmz$aoETb=`CmJC9{X0X(v|*@|JxH$z5Ks;NQ_u0 zzwUb}Uot=jJr6NHkumG6fl*yWW-!@GJhIG~W(gYJkEn`gntzV&te75O95u$u%4$lH zqHwr#kKNQKO-TZ9K~kKwS5rJ$Mbn9rgm+u>&e&BmE$oW3x~Vjrv)-yeHgJpKIBgcUy)UxtooJzPzpFR1ObGsSoN z6pW{(E91jh|6T0UDld(&fT@!Imi>0l<%s$=jOte(lH+KR-(ENuo+ zp=eOe1y~wBek~Q2Ju*3=B;aql9MZD;@y?8wd$YvPP}Xu4jVe;j61i<>=ax0|e!IY! zd$i9iEnT2%(Lb6#(?emknM^yp@BBaKC4CGg-#Unq$a}K44b{wii~l|$CJCM+i{bYN zDHgezKe_76gvk~2YQD|`9NH`kt1W@TVH)+|@ z8-uZ2+fJu&%4Y)f$&=XyzrOZ)|Lj5zCZlNm!nf}iboKGk#jpz8dRa{I)l4FguDwQp8Q0BVwir)BEbwYGIE#>^n(f|wFf2=@PLjH zwR#0oK%Fftp73c4O3R?qmkTaH{fLBtDyz_H>y6?O+{zn>L0AEChSvN-q<2qoD}K|w zBWe}yqLwXQ6m`z^@=`9+c1R#6}5F z^u53QD5yEG&0UeZj$A7DU&M2>#jC^N8>v*J=-EX%tZ&fzk%U!7e(;G0WtD46dJezf(q6UxNq;>09y42B;k?HapdX++IdkBe~zY5u+ez39IQ2msq zAeKgbeXTH@uHC!$CJRtZ9FM;$`1z&}!L-jz{ggh$eh){Y)s?EZ-Gnj#q#;)>Yyt9D zjL!O4#=QC51R%m*?&qH_B3i{bU)cVzFG$8nI%m&U)~p~0&v@Z0&s>Mp+_x@0kiJG1 zJ$v4lJ99ouB2ofvHQ8jRzf%Jp~@{-8`xZMDvUThD=lks@dK(vGDfjY43+>~5){eV_m zL0c21U9Tr0WbvhZG1K^dTt(WtS%-)1a8J3<$_^5=RmdQe%||f1pPO<@9>CVBK=W8R z+OT|j6F%3sWqsjg5tnzk(bmI6B#k1#q^nO3ieNSAh|RowaaUrRv%>qsIJmPF&?^Vx`M zTaub>H(r^tQj2Ll2JFA_DvQFl0ueH0BOOIb)1Oog<0enun`NqqC&U+~@$7V;zdW8D zaRSDySc0FE_!P7=h!rz=Z|}+7E8`$+&Ow}uEOJL~smex;o&c15Nv`>keEZfdxuUr> zR~!!jDh~s5NaZido$B8&@tXsGp$dhAMSyc`C66I2Rh>yOj-(1*EG-XoZ>vxwYEobd z1;f@>XSt4sWeAtm2XJN{l?B}^x4#JNk(-GA!mt8#6WLNva7*Q;xbmvfcY@@nzs3FPy=$TaOOM0 z1vrqn@_um(BYMUW@qyL;!Y81CfZb)*>zr!U2|5ql)wWP3cTVW8#-fngP}4gSaIBid|0g@X_&djC} zA6EF8*9#Hg5N8mLfcD0YD(|jrr{njhpphIWK*g5WLmx1k28v*!V%z|Md`_Sut4^5)ks^t=*DfSSMu>doA3SO(jXH%Dc$NCX5?*m@!B4*gcOYsXVO3 zHhS!mbpudIv`Z-?pcXUp;^^XXAju_`K<=!uNttQWH{4Ecg0k66p0_dz@sXHGXM?NP zt+ET|&Kn7<5iTkQtVkI~c`Hv$GRxaZ)NJB@u(4hF!l<^D zw*A^w_3u%qkl2wC{UMh~1XocP8YZ7rV#dvQB%?5Rn24|J*t?hJ&vZhf!nY}Sj&Ofu z>tJ-n2U%Oe;jvE)S(ZC!o*M}cLJJ^h;mzY#)u&YPvm&fR>d1nEcLJ3c)#sX#mgFFb z7YU3gH(rk?R|CcoJkEP(Ed>i-;V&>To=@ls@;++waBJq1O)o7!NZk$gEBQEY9pFd> zm2u6CeL?j%aZM#$y2WNrlLD<$BKC1uCK%1X;ZDx)1^vf&(sZlQm91e6a`d5mXM z91MMze`z9c!|P%54z3|ODxIjr;gj9|D%OzrJC#V~rU=_QLhq4)@!sxlDgfUO^+)&P9(rc{n)^Y86D|L}gh zq7Life9+&^c)gu};eYX|<=%>bDZEUkqj#d^cbE~XKWQFasr%S+0^w(^l7zvCd;U0M6zt$vW*@lc<*6`c$S z$8F9&HlbUAm_)~jZ~m7<*WY;MIY8Q!(a}2(95{{5_LfZCHbGP8rJqFt$_PTw)^27p z)~!v(SH=6#b~^EA;hWAyWeQXc#}nW(WDjIe7CZ|!bFaXkOGk%WOgLg4It~h4=$5=W zLK@jz_4-IQ&@3p`4&rof_PH-0|=z=f@I7Z8(%sXg|xZ7skC(rQHN$CU;scWxZyQ3^YsbEL~6{MFeNw$v$EjBYn@* zyM&2ne19T^67VZt5WFr zT&{489H9|&@Yt}h6IoXM=UaqNKId)FLEob`ZFZQBVuRAVh1NG1^w@z_rtuxRrKmBS zDl`_32_noYlU4|#g}#fBaHS!A@L*8wnt)7-S6W%~y0C=AiJXsEU5+cJpy zi%5vN(vB2j5V&EcooD}K{4QM8;jHc>Kxit-N?kmz9r{?Oh|w*KG>YTtxKVURF)iZB zw2a)Mh)^7Ex_f>#CLvu=;i>@+(XI(4m5??${R+Za7e?#xw@?bLZw%|U4? z(_+(@Q6ooYiz~(3KPv7VR6uZfpF#j4jgcnQa5amaG~?Jwa@mV08#FaCilM#`j$m%W z=!RD=1EG3KFPe6gv~s9W0LDrYiWPiNSnA`)UmI~|tCHyjBtTRN#gq73#eFRqWbM+i zqcu|y52+BS>r#5+mlunA>+3gf40-Batb1>!lmvH`J+O3XqEJ?)mh9zh%<@uZJz&Lp zLkrJe{B$lZD4TqjfD%POJv(}TgW^Xq`vS@5g-lG8Gqu=qALmO77a~Ma9AV%p_TU*- zN~#Y5BWf3yOHWc7OY|f;ZDco&Q2+aTWB#AeaRslU5BpG{XU6lRi(U41IXW@VSA3f)-vy{8 zZ|8pp`hUsf$d^U%)uq8&RaWzBUh}K|)=ey$>ONCQs+W0^c*22jAQubn>>;y5d~$vMZpWTi{lo zfNeYxC~P8yiIB`WlZfqq;?$`S`~>G3hg-^YWlFNoy89U<(!t07wOk9_4t&Tu_TsZ?vr>M85v>1j0CFE1V^Ar8Yvxq z5Dm;DSeqaO;a14Hq~4y~GeNwdX`jUPW!m-XWeeMum^+ZU9%)S>^>u>H5PkIM+DW~P zGF@w`CQ7|ZYQ+i@yz#V=L}Eb1G+ask}NC*5^ z=(l}zr}%a(zKIE;ZU~t?erjYH;6$?&My{c`cNoi)^&~3u1ddQ{?_FQD__o$-S2;R@ zT%ZnDN{bBdrjsK^is1{5ftjfj^egG&895Q<<@f1`%wd5AB3@kfJceBQblVSB0x9

6x)ejA%{bLPCA(0UMUcaWU%Xj46ibxn4>``mz% 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

9?vIN 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

l(3$K1AXxdz=A`KFqaG3-4R(B% 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

MgsEYRT1P z{zRrDRzU7aBZAWCiEMeE<+?^hLF-|Jo2ByQxfS$t6o2WkzPTpitOl@T{4)yH^ufc2 z#oUzos5Er%=ez`%P}Hu>y?c-r$MN5I^4RxF*CYH7Lf0p@knst218TOoi`6`Kn!;tu zKzjh5vJU5SAD0ceTJR)hDW$wOX8h1&+}eGZ3f9-Kx>?V1-N%kFzKQl7%3hNmUgMhx zz9&5bO>lhDtXFuiK)G56^IGVg^e-+YFIz#-pvDoqSN@^SQ6MOUg)Qx_Yhhw?o4Q@B zg8=E)m46b8Y^7mp@TV}8#+pu7$)l;Dl^$4BKQ%oIgi-7-8Cj=l(gB&+aOh5NlZKd!4yYwP%C~~LQQvzu58NF zQ$I9p<(n(5b5br(!IS`kSqOAFd_V;K5_jGLMP$lANf(!As`Ki{;ug&_wu7^H+m#vm zQkecXUF)k@RP8msW)NYZSm5q+U&;1bc*xTS}K~c z`0E22jfBcT=~sTc#gMi=dk(I;Ntl-QmWX+E^~dJuH{K!x*^sa`kx~#4NbC?V#5X?W-KJGq7yoT5Qa z8vvB_(-Ay|i}?t5K9+wO6B8qAZh#fV z17mTt|A{aWumFG}mJy{eXSZY6bz!slVl|Ez zvSk{}Q@-#Apz=`*f+8a##3Tr&I>5$3*w~$zRCnKU|7pA(oS|8Hy=%H07!;bhd@R6I zlQuo|A~O{_bof`a1aLzG+s@$~+%~)VpGU^wXPzO; zOM(09QG3t!*S^2n7rqEP=@a17Cl;AvN7)5BJR=3-A=@Bhpkg!I=|b%$Pm}cq*7R$O zSH)et$b@VQAi;5pZE&PCTC)2OAGTK;pK&_Yt8ODDHv;H)=)*c2Ys7_2qAR+{bCfL; zaNmInk(kUnTleP;&d2YWG=HE7?Nq7X+($?6$#!HU z0xUR9S)3uUaBKjI*W}DI12ePZQ#}mb4W>=|0D@dka=K`PDCC+J;&ZLgrOQ3&OLg21L@}Cdo4$kk8KK2#)sm8G|l>07XD%V7Svi#7|^w zH)SFN;q^f4YxqyuRbEcz?I-*}L^s zcxD2iv1?EK`mhC^VsC%$N*1$i{6fVKn^JsemzH0$FF*V+eh$?PQvgbJh(qtd=4>&E zKJ7N^cr5mp^|&+1A;<54!qHBte4bYKZTkdSJ5z9xuPQ|rJosJF(a}wBQtrC`T*otD z)V%A6rN<8Fsh7S}v(f9SE^ibW8Hrb5lG2eT=7bT=%Ygl(m%7mwk&C{tR89@ z!J8w5eoDCUXAr|8C<&{N#EnffnW{ep zWMaonIS%j%71aC)f9+p4qu2)A!Uy|lY5tp@hYZtr<1!^C=J=0UMX3SeP>y72XZvlG zVLJ-dz)^3*76S-k|L9)k2FEy_N55>QakC~k(=R|_0NeoOdg$-f$p&f7YRAm~^&8H(>Z`^l6v=N{M&3r{|*&W6kH!Cp$f1W1F=4_>9YJ z4LIoJ8xt1hds3Ee|f*MQx8u~rGGBt z%ShW9OARoq$w_1kCSz*@_!s4Pn(lZzH16>sg6$7z$PFCp?_`X3u&^0U;8Q7p_>1%c z!eoD2T&(ubK>j-sU+P_8o5?g4=u^rn7Z&>>wh;eMkP0YD3Ttj`XnQL=`#44Uzke4n z4e|%k4r#f`HGRV!jg zqWCUaF`z^9gAImHbuaQDeE}QP7mo$JTc7mW{mAkC1!wPGTzVRN&EMucC0qk0(ftzc z@Ll@hA0oZFNiOwPQi1=4Kh=zk>-)Mq$wQf#)&o511Bd$7!-pl?91ecE?5_{$ie%{b z(~~FwLS0XJWW<@V1IC&rylc7$^&rhT0hdWO7UXd$S(wrKe%VWJ!p!1jK?x^oe*B6B zVef_>7;2@_g^AASp?35+KC8x~Ov2S9w_w>G5-@ikU9{2Jql=t28H(D3IPbbv0lObV z=J&h}=pz@`*ZgShBU3WeRmB>*|771uhiIOv_JJ1F>B>o@2B6QIiCq{YU%NC2}R=Eq8J)x zR2$I2#dzw}b|L2VKrAFuhyVd)$qiktY2l{t3JR2};;TyLFPb@T-V_9`0)!*sd8*sS z_0>xw?jsFDj}L?m@teiFN|N& z_37Nz*q__Slo`NwpZIE-VsT#s*H=&NbS)O?tH=NW>6T{4nFmuRguE?**F6321>Tdf zu__i&_U2wrQ)W*8^yy7UKj(SPkHE9w1_;TUK$tWw+|}9H>czQPExV2IB|M?!^m+a? zBjYytn5+St7e?UACF=W`fD@kdKw-M=4N~ErTD^DS+h+| z`}BBE;yP}-W#L}4s4~~-8yy@55Cv|3|N3C;miSiPvQHuvSiZgW0aJ%pT}ulCjl+iD z*Mt#x`qZh34NWy?cRzgki%H^ov^HU3y8Pe3C(lr~06%YzuYGgKEP@{zv(gCy>pR;% z9IgI)WJc3mWgQKMwqd)$aMQPmvxDBn7!^+B+S1EeKWp>rp5Se#)MJ)?zyKO|!KFbV z*cT-Ni;xifBZqw2;$mh!q8oT~+0&<6Mx|UGJ{{n0Go5|Y)*SyT%@hM(R^od<9(nIE zW9E;$QKj~U>j61mumU0ytzKZ&r8(iIAa=gmF|npU{bczvySKP?^oD?xUo|4{F!o^n z{O#xaz2*ETVE1DJ`KspH2&V^YwWdO(ie}N#*~^y?@$tLwF1dg|_LS(XU8ii87T+?7 zPcPN59E2tT#64^cBgTzt1T~FBs zggL2UyO2|!91JFO${I77{xF#2l`d9<+^I0iU{TQDd8VdlZMWaDl1J0#Oaj%7A`GwfR^K&B+6YPGql%9Nf%p$-@{PFae&4UK3F4;EB{czH0{VN0d z=mMDHVzy~;=BPu4eIc!K-DJpaZ5=#+x2tC0m}fM{{rO84EA6RAPWwe(zMT2N|MQX5 z%I0wjls7a(1!I0Q0eASKQId^On5{D+penSA1(1vx=~eaX68iSOSMvL;x#ccvw0y6O3XZ)IVRza z^b%d1E+r%^rP1eJW1|B_Vj#_F<80$zv=7Vd?I%XfbvLtl+4aEUeovPTa`Ei*{l*hu ze=$=Opp{~syE^Ol*A^XD-_-jacO$S9!z63__;gz?w1R^funJq3f`r_m`R4@BYk%wP zgR}dqH4yeYbHmj*NxrWQM+RJ{!;9t-Bkc;3T@kpEiV^~(!@2% z#}uwxe}wr9tz&r}2ZU=PZwVX5ZoU zWOzWK>1I)L-@~%xkweN1LyE|{3&s;6A(LJ1$@SS@9HYRxHer@I9$^m#yu6#V;S-lH zk0>%!&P^eF^Sx5P78&7YlDg2y&~P#SQWn{-NtHT^NgEQ^&ajVedrbb&|JbHBA{J|lbD&+_BI0UN4&gwUHRNIw1^c?PIXL8>j5%;dLSUc2x0{`nw=N?%dCbsq%&}; zPIMNQR=ukZm-%ZMO!@|d1z#YsbX?b#jlpX)y6w^Ft{eK5>ClK(pU<8T3SdcU_A<4Z zGf1B8JP(+JUke{3`>zqG<>j5^%F1cTW-m{lPY7MprpKBknr(+fQ9~F9W=?g~&OJiY z)2Vg^WPW}|u1C;|ZBawut`V_zdOn>M=(w~(^|^j_?WxB@u4KAd(8)*_L-}vAXi+*i zpwKExCxrNa1;?*4=xq|}b+tsXpsK=dlUqg4@VXUVUe)Qxs-79zN4giSEU%&Ibu-V5 z9ilk${xb^3PLAUew?;=h1!<18>NcoNix%xi#_*c6BQEe&g?T8gF<~C~X&pqSW7?ka zZC@PN{fzZR-`UR@em8%Wc19@E?mLhZ6CG{i=k2?8^6&BOr883NQ?NZR{o1@)v*Pl^ zN%!C4ttT_P7ZG_aVaWHqyry`_*~BXd$welQ@&}1`KL#f!ex?VE{^}PMiJVGyWWk++ z@09{%wg83}5GeP;*YXsV1{(UGehY1!iocwUpRi#S2==lhm*I&?@kUI;C~swWwhmb) ze3U*ABas~u=E%+BX&`hZA*tBlr532!K37qtbWv7r_3wpSdbw+r&WK`^JGpRA043|Q zC7M-HPXktE9xuZ=e`aRILUj^uRbfmZibe*zfF?nrNy%p-Bp#cf)*wqv4` z8#DQAy#0m^gG#Fl=$~EJW#^q_W^cJvu3z0GBbfrz273H8cCP=i+o#r{Ib9mHO;|+4gAWy<3A`hq$0vYB z%*JHX8A^SGVo1{1pn8adUHx+nmg|#eMkGYV^l@FSmRrqGSjHR^x~H5ag*ND&8<_^a5SS2yUVyH_#=a}J zQHiF2>PmBZHjHJ93pW}nlhVvr9W#~%+qxTS zp9p?DST0dl_2hN~o|jb0_ErYGEx{{ki3G1qJXD-<1W3$x19UQf%pL#uEzy@gUUxgN zM#b`=qQL;HUoHc$OYT$5FozY4j#y;TXAQJ8HFpm5G+*j9v#)b8#)>vjtUs;dLdUVCV;&p1qln{@VLh2HCmBbylF!kk!q>&vvU z)pOyn4sB41sUv*_vY#5KY znROChoWjlH%R(-Y7!HiO!?3)4^DGYemJ8bi3Oxv zosWZ+{L=Fo1wn!dM6e}>D|#3}Q96OIRX=#O+Qp^Awp}lD!UwQ7KJDkhEkT@G9q)G8 zW|RLcJYi)YdCT8$Q1(}`D7QtE?~fnon?i?EebndTtO})wwEwPaxT!h`3#WwEB5;pR zt~%bO5a7PUvNvRF+T)=;lZJQ3SV7M)3_i}@7&{O-y_qH%`}Y-_GvMzZV|Vu8rJOxF z!EGPBJaEoz9*rt9=d>$KQ7-;$1xe!cohuadp&`>50>Xz0_+riPWyS8!QIpszS(Ih9 zb}8p+=hx{*MkUqBq2f9RsI07Y_C~dJ_#fps?YlfL^SoNPCs*-Rnf&rS@mfwL2Sp&$ z^*_I9{W!5iv+#nu_g!3%a7ExuQ1~7-NdK4kO9jN2XNSw+)C;E^3z}m-mt=2hnA%~1^QFYDI1bH9e>nkiNqZ!#Lsfs#EwKRY||dAFHcZ#|95E)JMH zoL)k2S13nlyIrI|pC0rhq4sIYYOjp& zzie8WNq)+I@oWt2N0vc=OOs)e`lj|Dik_LKi&E$W$?>_X;p!h>8(T-zjlvgMRkIhy z(zw>W9{lypS=BdL)n=a;dvM>6Nhy^P7bi4f8UnJy3KRTy?lY>@vN&Jqp-ll+$hy$tOBrtgyCz5Ea4$4F zuCa%I!_fM9Ix{Q4$_{)CAUY@%B`zxGVM9SB;BG$EyPOy;!yHCIw`r1@17ENETWkCk zY~d|q4+Jc_aaW4fAY{Lb8;)15Zj;+q8f}@4^IKBuT&t4$ZhiafWUvDB6of@!xov3h z`7J7HYT>hOplbO-t!9?)_#+UeLZ_%v4Dx;b{K~!!r!4fg&hHMK%faZpIS_1d6))O2 za1-DD`kyLuCFhJRd@+VX4nH->Mohm0{q{oBkd^@vF8a^X%=w2*-JyvKCy+T)O8!cX zF7Sv=5^|m!d{kicKnrCucP?_a&VY2uhO2NBQN@-8{ugzn>`B*heL$-$^H^CQJ>gHq zL5=aCH`A^s#jZGvL%)2GgLO&I9o8b(;Bqk~$#ot?>;+K8QhXZ!792?@s(bdQ^Yoof zZwAt778Mm4-(3srCe;ZCFn4Y`NIOIu76IQEMJqC*BTw{eH<{JWUWc*_R)zo^P-p9Y z7fuN5#&(;l@5YYR)EtJAt7q5aG>phzx^BI76Rv^N{H=XZa#Q^3-Dq@U$4c)Z9 zW9bh(Cer@I#Kqa7Wdrh)5f2&0r^w8+PooN$W|trj)3m0Ina6g#f=Jk(XuG$qvm4P( zOF}D>LT_XFwVy26a_M{_OSk22H8wsGrV!*>L^(YfXI()Es+l zsMtT>SrgpGud*b|1_>}>r0#F^4Gu^zK^;6=HEzJ!UJtWJ{1C;%kjACz>badjU%>0_ z!d^fh{)pVIpO#jR?YNhjnX3p$V&}<%%~Xz>r|Tfr7q@p+6Ey%N4Okn&ar1H9LJ0p5 zz-36Ezm*;v!Wv&RonSs|)+8E#dRfBUDn}+~L?{tcBK0K$tY_yBgri#@hQlF*{q>fK zs%#Y`=HIf_UBktqK!Lw2>`$0Qe6Eh+A53bu(kjNlo9r3xv}gu!mKgUCXppCf#{lEa z#R`88dvBDF{FiSYi-xHCuMbs?I10eG2l_udmwOl zgMC-3Yp$fnVU#ji?E(3G+Dr9fQ=M*MxfUs677O`GO!Z5@^w}Sp_rl;6{mP}2f^qV5~F1-+Jnj`kG4 z9z$2nB}Y*biZ05E-|@R9-K$enUZO5pf6R{YkVEA>OwYb?xmN=8)-HSQboW@2lbs#2 z_WR=RUTiY3=Chx+=oMF5OMxS<>S(qo&ySAZkXZCR*FqR}khC_9+Wvu6qi-3cy*p{} z1d zLq!o93)G4vONaU{-rPDNtO4#}3xP0yk?bNrXk|y?Kfz0XA&cql z#2t0(t%(d)Wp5mpX7PI3DWS$78@P|E${S)Szo~OSA94>CjMhw9`H4ie0=@)ZFTNhG z#p4wr>Da1QRNlXcg#wSyhG9DO_9~&Hc-8&s-a`iy324;}?AwT?sjLEUI{q=UJH_t& zWRH#IVu)@2{*IKlmo7X7eMj7DE9*O`3N63PLJ)kb~}c z`}eH|HvGnae9KfUWQ@mKg&m--rPZBgipXV~9GtW-$#P(e?A_r@Pp;c0CzZ!2i@=Y7 zSRpyyPL$u*m%3BTvLOZ>{ZM3t+s{ROv_vIBI^ywx%e3#&V>cpWM)VXVzSFT2*$>&^ zQqIn(z~E>0(l$c^TFTr@cFlA8%zr&fs!s=ntPyukMX%bNd|a*Ms-od)he0UcuLn;z>8;=IlyPI&5Ag6aBIMcb%VFCYP)9n6G4ZC|Q%BS^Qz=`HoYxtW9 zXIGTIf1d)o_z8Al)9Li&O^L{w$4=9UdJtQajw3f6P>%CYqcM6y!6&sT=MtXeH|%WR zzI(TYi-l?$U|7~og@uJV{{xGbW8)rI>I3hI>W3mrfemR$LttM}<-qHnOauj8VJP#B zo0sPt#K}53+DQbJ+}`b=f}(2`${&G-+6U{Yec(%+dmwQu7!2>cL$#PBtjga|Er!R; zKA?Gj1QZu-G)#2J@}eTp{?~<#s$a;j)0f`~@pvNUz%+<^d0>)ZHvaxT1xSE(SPT+_ z7(UZ7JuRse%@}_&;%=oo&k`P+?DwX_q&5vbb*dhOF|qIqu_8_pLM@V0kdWWRi%#9zZ1CY3h~KLaAc2`bVA0Q?Rp0_MdgPfce)F-g5Rou$ z67v(ZrnxkMrOwr7Zfu3vN}?@ijHW)aFt)h+>UJ#WwyoB^#bw8)j zwEMD$8+s%86ieqVP?5=bu!&4qRDa8=X!bJ$s(JChLCbO#PW1NHiproOwttFUG`Smm zzq33k^tf=vGl!^M=Q&bSF_F3p+dEC^uE6?`eE6aC`%Gr0aRULQ;GI^R-Mvfw{Hlu> z=|TM!D_wpU^(Sv1!=NcI+C*l4UU{hTbowX89qp`EySp!ihcRJ*_RgRdbsha+e%L|( zBI1>c1`o#+7(rt=yPy?}=PaY|LSLa+j)kB{L|MJ{JKJ;Vulq};f@vW9dZMW;!sAGu z8%?f*OI%LIhd1@b{Bw9S$NiI*#g;8gf0d-jT@llC-o1zbB@*INz*9C=KU8$7xo{(8 zIXxN01rd6QGcRICmQn8D1ViD06}NaCn!l5>?u7eeIrcV> zACQ!g`15(tUp+Q)w9@GSD)Adpc^XcMi|T%5p^jiytcTA`EA7tkm7ah(Lsn2?qU+!8 z4f#?vzqqvYvAD-l+`cB{0vpirtU}sWZ>W37x~o>Vwsemf0`?#zaX@y0u6fgUkY5&$ z=tc*NC_a|u+p8k-%vrm_o~+Sq+O|QTOl2VL1Y>=gYa#OtP zBiw7?;QP>Wx|Q_dg`8lasceB|5X{(9)EOp8YG8f)?P>_uJGgA5He_)l*Xg5r5i%e( zXWqBn(9>%u$nJgJSgnP=kVunQ@L~YEkZ4>yddMRD+buo9 zr?mF;MDTf&o%LHmz(~s-HtY?#dE7F(A6{WJ8PW_JqqEem=y51vZ&55B~Kfz^#bSN5X; z-2^WlT&yOVcR>z1v(I}$SAuZD!V6hKOoYcKa|s+Gw~px}qi{cSn%%}*>!Y0&Uu8Ct zzHl-Q3=CAn$5&Y}hkoS{4(I~|UM(~E=8>D|db)9P7_~SjRO%yGOGptd8)oqg2Y&K` zb4QEvp2(e>U3>P?3kEgy9sMo_1ufbeJtMTPCfeD%@1a~4^Fh+=zzrPSX%+zofPsg! zgg{Jwav9r|3++1%PTo-(QGtgTl!1W)4`I*QQb;BxJ6yFP1N=rpY|HQ4t*8~hDCgyy zW;jiX)gX+M4pzeiIO(Fi=G>QTFY<{+(z~vFe(FCd;9TY8laH?sy@DkUeJw>jaj8E z9||0zj$m}Qt^aMNGWW)2#AoA3_=yRkeV9~#o~Gp^BsFk@k+~ei)5WTik1yph0yKvNes-F#1Dyvu{cd54G436csf{ zoTR0{z$jI0t0^?eRz8zH5iUXErsrjKH4ITe?#JU7i8Hhm#l~u$EZed}G$F-?fE*|h zpc#e z5LJD8dh|SpQz%b)Vd(N@Yn8Y!0f=y4z<*dZCc7rlG!(}i^5s{`dXgU>?)N~vLd&p^ zF$AqSuT`9_!JY7pax<#$pl0wF^7}>l(^ZRtr(apgoe;BbW}t#$SN!rUQxy&>_y}O8 zHNY{TLVcNFlAx>WbF z`vZL5ne;?K!d@>iWpQ{pPzZ}3$8CvUH68{y75EiwndOFz9eWH-E4Z_qa?HTKR`i(} zVj^l;(ZuuYpFjncQb&lh=(%{f!#LmIfz$`5>sF%*3DUg%G+vd1_3!opA>r{Tz(c3w z%EI5eJ?gOGfL}>}_EJsV_>~zw?d1NmF{K3slh&>sL(DF!ESTuYWCKX%J@N#h>h>7p zyoo6V5_i&@tvI0JbI0*wk7t@^BI-}^J?ECIR&?`Fe%EhJ?M#SKZbwa>NVp}H;-7(W z+Eu4xbr?!sQ!J`SNGoUYN`S)(sx3)-@}xCp`LEv|-d`-8fzHqK z!)ZYDu5JwpS#l)&Hfk3HFb^I+r1|OHr;pyrgSfB_8|L21#Ph)gZ&h%xnwpx^ao_E- zdmpHG+}}~TGVt)#+AAe<&MdJ#HQlrry0n7&8AaK8!&%-O@6mEy!T$ZlBD;!n~*GgM#ch${rzEX~@c^5Dg=dL<^-s#c5=(L`t%fP^73NBa})is}e#*84a5E^T>Jq z?)!1yf7~9|*|jt3(pxJpY15m%)E3hvTEHPFVanpHTobyG()>%N*ED4~Ra)F>E>jA1N15kIu4@ zn?SBS;V58<@c8}@*Hh|dnrAPR#EJGXmy2uPHoG(}JE z({OH-#Ncz9J*n|LF%2k;uRjpB?G&yPO;Wew}qR-ywC9 zKsXoCDo%g&(+W&q-a9)vG9h!vz@xo?naJ`PeD9$dx`Ofmkf zI2txFqdIwaOGX+_RaXl}ah_INS+Pm;AI8lnT$Q})yT|reJVT~H)W0@iy1O!|rgEP} z#7g%!-v84AoTc5sw+LVHKIDSyJqOC^vdu6>?6`LAM|xmcP(#bf>(L-VXani5UbE&O zQ;>{tB`@X)b;sKsTKh_nd-8MA*+<`XT8zIh?mLJ~*Hsi9%!^)ll%rIcf!0+UR6$B8 zbO0i4K^)0sgv|G_t4pP7Zu^fs3>tG|-qLx?CR9`dTtQ^c@7Uo?Y!YMqjEwNO_5-+M zl_eprxnMAI$^;9chXTaO)#&&4J0RGk)aUABv>+?3*jC;XXox@b+2Tj^{OnX(ce8ct zT-@i`BX+9(c`QcEb@9O9E}1hBtsdrkIKnx8?^Ovl|NE0LWY+|%)4k+P{?DIZwptDz ze-B0N$yl+%WzPTiudUO#r?-5^%KNns!~glO8vA%>kBS2z%}`oSaN{HhhD&bh1TOG? z6GxJtGIeS!P&8-}5Ze}`m>9+vs8}1jDWhU1f4x{!VimQ$`V82Ftf^qCfeX*@@{AD8 z0*W&}P;t2i^`RG_Ft%q>MQyOR|5kD%zIYDzvIp4 zhqQ5{WZY1azkqrkEMFO6zTs&^SZp5{N>hpl(|&4%_ej_t8CLvKq348JT|Ts3q2G^o$srJKU@fAt=6M|XDb%(y zUBM9M{;oN101A5GZsRm-e3%PSB@({y{qA6cNzeZcnZ_O#Vvl_ zD!rgYT;F&a8FrawYU=m3VK!({UD-**=!~(kaZJa_FHMK;_w^lIx)p+!Kwz^YWEw;A zpN>rr?~?PZ*ZGx^4=qOU{0g>Tb2P#hN()$skO@WkwzNoH$!pobDa~HH4i4*H0ILyR zyePc<TEH6K7KMc=3ruiHriL zDh>D{h;QBlfo5b+%ctK^(yf;Xdu&0N9(%|VDlz2y@f=a;*7?(}gd}%N7>Tn8QDvxgeB(VhlZe|Lv;hjrN1RW{erlt5YXXidG!8AEXtgm+q)(V(EM86B ztG_p3o+Xyi-at4A>@vR~fp)6CKb?;KvNZ(db68^M! zZ}oLg`iEO69Y9;mFdJ#zSF5FDkIyT z|3%bPOXw!1w;Q}(lWoH0DA{eZXF5$Rg%0ue>!~~X-bSnp>%xyfh}Lh|5HVm))HfC_ zBBZ)@?EoVwHEXBMSW)Og+d)|ZG%P#vWL*RwFl2ZaHe3G2UG^1QEl@3hg`<1Hqcsq- zC-ON0c_skg?dD%K5?m}rLUf8axh_t2b0c>VclcDASOGy3<?;h{Z*@@Mxgy(-0foeT|5S9_t+0%A3X!SDlz%lj%jF{6kgzDGNEXMi zaTNbm^1bNy(?63Dq!Oowq^R$!j8pavZ|%{_P>g*{eGE9MR`U_&Uj@5D!J{aDZPj7I&( zuU~PgslU$U&7q2P0HqQo^N+96(gAf5C2aBACa}q!y ze?gbo7HoO%ceB^j??eerh<=VJoIHO;29WhXU4AFW;o6v(aR17f(!w473u@jh0Ta5NB$i64ns z{!9etpP!v#19Ceq8&JVcP+GYh=g!S#DTJ-98c32{j+QOmZrmuDk?Mwan8`2ko^xmWC9_t1uLc0bG_8~w2^|!-;1Uk@g&}Tnv{ehyn zmXzP76kO`<+7DOq0wLHBmJfJANsQhQ`xmj?AvmKUwc9kFZ$s-M4~zl>6qE6qnwIPJ z?EwTB&r8hcKSmgRz~W?xRLISjUEVNHrU!0tanB__X%D_ zhL64nnN&5Vf+BCo7bLak#O+W+G;ye`vlo2AV##k@v)ZYEuB1rjm*3INvxRU>r4`Ln z%mwUfnBF0LDUznB7-O6Nq91OqvJiss z-*s;ld=cE`3?c$mt~dxG6XC2OAL>i>##v)4+FlMLSR3VO1B;-ZgNF=h@LJbZn$Obb zsB8bhv3;iNWJnRpYaRpy)cg4QkUnH?yTxTbd}Ycin1@H;8;A?CKNdksi%SV#T*fk4 z8HzTM8+`!rIQ2NxE?+|Ic)9G68&hjsVSvSv2YjbbUpJPVybqVvUredbv}){zI73W& z9zXVvjuzP@bKTR3ta$RMCtl^CLy6#tI1TQJwokiRCff?>ZA$u27nmI-#$3Q}@I8iw zTM#Ljo}*S&#YUboI6r?E5a0QVM>HTEQHuvs zTt+kY8sP$GgS{e0Tmz^fyo*^tis~mVm~PsJrO_e4+cW^J6+pF)4qWuyU)2~CNG^YF z?oQ_|X#6B_X12o`235X~6&?8I4v z$AIja2#T{0{YA4*Du{8QQY3ydyn)Ry0gh|Di`ynyetw+xr_WEj+Ivu**MZHSKqrcZ zY(FPU4BiS#mZ?e4BkO|r^*(TORI0LN17HwEBfLD0ApZiDiVr)`$LKL*9DYZkrNGb4 z1D6rnLe$F`>bC;N#0#TiWzDs+tRD-GeXgnbwdZS81CCiQk6sgdv^?4)e!tf{zg>${ zb_LkqOv^tXeA8hyHh=H^R2y!)FxC5?PG2Xsp3=kp>-d=m51l%B&Fd+Ce1tb zGW%oYJic3H>|>3h4f_hB9~MLowzfVK5CF*03`{Mm`94k=PmydHk#9ng4PAeLZIC=H z9Cd)uWy#yuBO|T#3c>l3$6KryoYz$oe^Fpl^tWEVVuaGQ&`{FSA)MhvTg_W|_J{_E z5_3Ulu&Bb-bB`YzWW*U!+rFY9%L5Ruiv|sxgQq+tJ)O}G@=6_^OzJZ6-o&xQCZue& zrR4{tQ-V;iR!Mdp&?R7)+wS2>)Qt`PEZvy-05oLRjvbR@lJMV?or)a04%@@X=42Y- zWC3p9&bFW1hFmT5HeJENg|1-eL~iA~hOB#IeZrNo=eTKdYiJH-{*2V40QpICFSsSh z;@gma@UE4eXF@82FVgfdeTD&{jNUNT2zp4#)*YNAs_oi)sa?NiB{nb!N!D1E0df2|x$ zIgFG@l)a_U+!K4K`M?yI-W;eJwF)O56>P5GVvze&e? zbR%399w{t>w~a2)AD#sjEo1{^_;A*DU|7b!&ojJJ21%jXZczkGune_S=x; zL^((!qbdGlBz_b%!1u!_O$m`HDT3*7|Lq(cej<-3Zf!veht$EHyz}qLy~r2Y9>H1_ zMf7D-%M!#n%7V)`L}F7m8?kjSI05ok$~j#5mSnUs*QQAkl_z3wcJR_0PeAGP!#Jym zk-sd*fIBQ6KN&4qmZRJ}mOgxOg0(^rg%RppF2XLeHCsG$f9qFhX5PNCm zu6y~vP!Gs_5XBfwrBDqF?@$G!US&z7*kseF3wg>+Ymwm>-t9VqB$0V+-W<_#+PQeS z$jF;v((!UGnGhn1aOulMl5A*rEIti$7uK=u0rIE9Uw3Q2h>Qe`1l|K|guq7@PD{NF z^ntPjUr9f3D!wDnMvluP-tees9VieeeYa7JQj#-JHjqVj^Xi_uTly`Ls1e zRFSU;s+zV2X`{%^(f0A>AQAdN>Z0`!7dBenLW_bEZ${4Q18?yQO3w#!8{m^zfvrRn zoaT6Ogr68`5VmEzYWau>&?N{6K43^3;O}22V#zah>@prGNCV*&ZHkDG(dvD?a=TEe zw4(`Y2*6pG$Y&DX9L)%klYv44Extrc+AfdaX=-pMi4m-OL~E4VEl=a5uC|C_mi^!iMBNtyj&t;-++l(r^ z!s}l|HV`^0A7dW7Sy)*G`ulI?IB}~8N-`04X88BnY#@?NS5i=*=R-c3vuO>^t-zHu zHPrr~)+@o>-SZ97xEz-V_7F4Br=Elovz&9A0#vSLk51^pp<3?~vw{9V8POUA8f zGiRFPpD0@kG77}^j82nONY^I!k;AE3{bL`5K*{q-+zA-11|*I)wqpS?mDTmH=P?t+ z<)8={`SpjTg~dBi$i5T-pd}|yo$|b50Oi6-qvvE_uRPy8K&MV6%I)W}A*rL1rzz1U zPC^M2{A@vKDRDO=XsH{(y7z0K!$4qYb*ps%SfK!9($d^!C>lmVkQw=Vg?=JvMRN)yg^xMJDRC(8;*g5WKawE}=1IX~;< z=sI>W*~kDAx{M}Lh{h3F!#4OqmSr$tLLZ?-?L$w%A8~Mc`7)jrd8q}?QnV1rM%#Rp zF-Io;WyuX!ibK(^0FBiS9x@rtGyZwGFPw^iTvKPwQn#F({wtaPON8Snh{Rt%#y3thr z7G=w(FaA5kg4ALJ1cmVCNN*?-b`cE$?$#J21ORYSLWl%c{9{m5Fs_Ka5WsvV#$sTz z@bHI`(K1ETNz>(yU&m5ULP%s}r0@=i;;2u=42}?SrQ#Xo>m8nUp}rWMpmUdjLdQwh zM=CWFjt(&sAprv z#)>;I+(9Offx70}B4l*?Y$A#E%u7?fS~! z8)(xcT76d+)UgmNnQ%%cCoLuz4!O>Y_kzCAIT3Ppx+ z5phoV{Z3Jqk)ynKp4@*%)|JiqJ8#|`B|faXcJbGITke`k@h2{~=t1Pu1EC{&qyzKv zejZ{F#Hm0F*sL5DZ z&L?>0JN_x{SHD4nRze(-ORjNAhv_AaFY7{WBXQQohWOl@ZE<)o&eXLI>9CXv{}YZu zZHhwX_ZQz<3_rwX2W@wc15*;N$l4Hw40<#@Ars3;p&B|yVkm`gCWX#vJ}Z;-tSalwfYfQime7KXthcbhw>4~LviN;Jz@9>dxmCduK{ z+mVCwB|l#UWI&WeA}@WV+!zPdKv9}d&&?V>7%bEuz(f%sA2g!?97M(v;sc; zeo(ZM}5@wX@q<*{HCe51l z?$JYr^;WGqKh(p0+qV0+r}sMOawMOeB#%1LE{@Q`#1a0H2ib^0$%S6;J&!x=M#;1z z;1bd+LtX8(FJaEBHFfin!ILpr#~e6ki>#Yrko@`8+<7E7WKk?WI)G5F4O`Ik`vef3 zkfGTyR72R7L<1f1HFpIE?7e!-pJwPIw^cb%s^>69{P8V1bD4~RJC#U{AaClOP&Cq1 z_QNS&saa*f1anK7Tu+XA$RYvW zg-nefeH4>ShbE__47=c9M${)FV#czaL!+$hKTGEp#R2_oogT-YI;AABd*}(VK{A8+l|L`iKQ#X$LFO}}7rM5eQEyqxMOzF;EXr&(rD1l455lN} zFJ9b9Si%D~Rf6amoQ_T4v$>T&=&ug&3?cxk?a*i~v+nt3++@x@Hr7o0Lj2GFX#wIj zbU=}avTSu`*?G@d<4f978@PG9QEhx!rCH%UG?{WkEcq%D{rPm<0of9&)-!`ji7tjS z@&|~K!UQbUAB=!ggzpv)^*wkPBs^4}vM!IgIg$U>RAtvR^Xay9&YV~x3Il+5A3fS3 zJ`}vv4<@uW3jf6YrmPO2Ma+ads^>j^~_41&$YSYF&CMM?hOu7bXjd?tYvEO~ND<3APeZwAO zmdnpJ)C4kZ!K&$HhzQ8_O$W?PPD^{hWK%rKr^Gwo`|P`|tD;P)M-mk(na`$K;xvdM z6CR0l>tY*`!c1^h0`icpUp)Jc{pL#uqEV0%4h~C1^-y4SowJJfAbecr^)%Opz*~RD zAhnd={ziJBr%Gok?j`jzuU!cNt{Ns9P^H%V%GI-KZ|qyz@SlO-rD>Pxt~`T{3cq|CK< zc~v&I7&suue@8cXT^p)m8kUN)UM9PJ=fwJ^T!<}H#5GX*WZ=QIebgXJ3CthSk@*8; zLx=&}tSUW4qk|{fY_Q((I_aA7RwS=5nahCQ z%|HA^iEu&=q)5!kG}42?SW>D&vZ)-H(h$c%lmQ(+*oXcXi$m=(#nE`@Qt)TvyelQ9 zJq|qz-KNF9*o!607A3?Taj%eQO31%Ml`QD0j^}2cjIBLvYzX@*MF1~_2Bn| zAucJ_Gp&<$?T41Uyd>iKtXu+?)~5P2iR=$E|3}QyM4(Ls5ip`vkUWS$wKm zd>I)-8rrL|XWr1^CA)pb*!L$g8lTRv0G39Z#Ica&a){Mme2(pZU`pMRkmzV%GRTQJ zD%S1s%?GuSF;?KM@a%DI<{cRD<=pFjZFjjCH4>LWyhTd;eWYOF`nKA>ENP3{mvd+? z?WeU}h1;-8YRG#;1Jgi($NoMRRUejTTlKpBd(t{EIN?Rd1-r?}zDtWsBq0V7$|vOA z0-aYG5_0KMW0ZA;%`)}Gz(+yM+fnOSpDuXxcZG1nS-%;G9q=&UVcCUWc7WE|hbtT% z9k25m#(G2T23!II7x&4D>VqOKT!>$L^27W0R6h?1taP&88WZ%nd&`*;QE?rHLT>)- zZv8C z%@9~O2yjoENvWx+R6?!F;M4^5VIYWQiOc-*18+Qc`l69fo)ssT}xs!u90wu2cz?GGq%L%|~ZD5YVrG(lQ%% zvZJ)!)z*_S%+!}JM_*nAvLI=~_Vn6@K!MC4*R>m4SO39jeV{gFrWByfsXEY>7uj~B z$zm8lQGxgfQd{y`ksCV%S8sSzVWtJJ0~aRO=>(+#L}Gb=CwbM@^WBy7C(Yhb@h0}B z#kRuAWvOGJd)r54&ycCtTkEyH3wfDeGt+OIOzrONi*t_J)lPqzof(3ZLooPnIu&0ty{$hW5Dq#^1PsJa**AD zz3hKjI=M2&tGll5EzO=C6KoT(iK>{d=WlfFTi&bmH8*$|No1;>`haH8r*HuWmY0?~ zC~sl{xc>Z2vKu!v^p{^=o335EirExJE(1W)W{IiYu~Co-efxLWi;>ISJApuqJj>Lf z!vZ>F>Bq0QZv0J+56f`@Ki&0Xl#-YEj++=g8v6fYhZRsnmE)hKOO|-_EnEBmY20E} zJ?Jk*rP*^Y+RbizrdnnLQEE_d(eXp1;u3YAo?vY?OX_u7jlMYlb;xAUf@qT#=lgAJ zADQvt#!N4Um&S}4!=uu(fB!WTFBvf&h7e`RolOUL4I0FCs!8iccg!ExY*b^1@n9Cs zI;MdqF2lGEu~=*HLGC0l2o2oxSFieg8ph5f8h@9v2%ddX3HZbYb|cN%X>$Sl_)f`+ zU8(hfuK;>L`svilz4S{LER6Sn`lV$}{>!|! z{NW0e1FbeZyO*W@@OX-FKr3U8-4?NMxir;;wp9Prn09163Mx=I==FX=h})&uibED4%k#-1-3 zYkCKbwk*o~Sx->N(Ciak>h$S){rr#Bi!0!O6bl(Jc2etOXp-~+O+8&InG?wtHh+Vk zGlqbwpW2ai1kEqpuKKrTLS>JpIa`xcCj!5H$>vs+h2yiF- z`TTtA450NqB}Msl_3{3ixGW(d2O9u{KH=>A4L<7etJ>@v!5+{aL=$@Abap zjb~GDmT&j9zHsZ*uMut0_Njqv)TLY*b}}2UOK0wc^JW4tn zrmg{z3d*%+pTy~%IFjk^4ZV2W5Z@mW)PRFom$BUe@3 z&Sn(Uiz_6d-TqKex}(lj#{5sW4T*7s(x1C}v&hnP)yP@%S)zFceDJm$aU+4Yc$y zk?!~k`8~?s8FsDvhR;9T)jf9Xj@~0IIgO$QNG@;Ku3OrhI_!PG0zkR{*b_Fp>$iSM z9rS*p1|=?YKHXkKjTt-E+I#XFbVG0&2y*0O!^9BXs*b)ba1_p?D6gQvX?js_DrV>g z8cP{!;(3?x#q2m}%3&0GbH?QwIJTKFunxXIS}8H;Mm$u^)}*c6hHD%gO8u_9N=qBLc1^J?t8=Nb(yX#l}_4Uh_|Efk^ z%)Ng~50Q)b9Y1<>$k*59X~qr0wCUkuyOYK(`YiAIB|LGqYsY`5+75CYGZ58}rw*d! zMa2otnl^l^s+PND*H7-TK#>Ukk`Xc=I1r246a^=1!)uO?xrM;x7NrV&&KZNp=n)I$We(XaS)qS(!-Tf%ecPKr_x0;O4>w*^tLdG{Uz;C6>vD=k-39lPlB|>GbVSr-^#0ZG8<$>3+7G~sL@Ow5xJ%_GSy*Rl8~6M< zxXrEd^7lAm2M2j~}lsL!^$QZbL_R4zsDFrRUoqV@%^EEb&G9J?QfbaZ)9XcFSUa&ao$jp|h z-4wT5?Jqq%z};*J+mcesKfOMDXzW%VQQ3q$XOOz8>c3(MlbgHJV7=(pvDEl@?rrGj zj>Y7+T3%D|xzhoSFg z<2>irHCa&$Vj0DTxI=*FGSr|<#tr*(cuFs-&X#EF#0UhjHmaMAm)&0PyH)l3^e_+b zvRcnm&Xr5n5 z+s3jzhlPahkq7}-p7vB*CqoIy_-XH3*mWr1#FU?GF6Xw~^EN#*IeU%H%a8LF)-mE# zAPqX-O7yizWGS8KrI7`ShDN$|p^j-uOe)`ZICHNs(W77Fo7B5q8jd+Nv&+@0+83c7b*y>FO$D8juCTt<)``aOJ z%HB{cHqM%%=HawgYu2OZCCT$1mq5-09y3-7 zTU+}5d&h(GWR+mYNN`^kfPX+Qin50OUgjdV)nC14wINbX?lL_*rU!sPdh_QWw)kAy z)8#nvQoGv>z-56_+%HWxJ@Y4fX7Sl@MH%;TAGMH>QPEU^&k4y(XTRl|yOlT(W>^NqjAWMjPo{J~%r$vnk~y8jpo&P!Kfp zk_WV9;Tqt$#6@lisEZ5Q00hY2dp@Xkty`nE{VHZXprw3x>3XBLM11+NajYqW`hw0w zoa-WIpnif}5Gg%+(O^%dU$vT z-<550D;+2waKGQn>X2@pfSC9>Z3bD{{`E#wH~o5k5TNxJ)Om5( zRWa(~Ot3_^{8mkox+*;dLLxq6}^eVkUQW10mTSkQXh_9E9Pc+c=uvofqel3C_lhB zP}zm+?*%u60`sE(fI~%^+T+MHndqRhzkK8kXrS)1UpSM>Agt$e((zc;Czbnd*@{GI z<_x5!X#5(a73R&9@12*olj=Jts0kA#owF3l_p%^Dd~95jx$nZG5&eg<|IVklIK2J2 zd&hx2pv!P#7Aud8lyo$$CtuUKEj)4!YhFCfoP-%hYXO~y*5bjdaT^QY8ar;q4`k?; z0+vlTZmg6p7PJ&@cP&O-hZh6gur<0Ef9{8az5Pm5HrxXMS+cu~Ysgwo_+pZW6cpBx zg>vLO9xh!U+E_1hDyK-RNl9_>*HDl0U=NW@8(u-%xK#j;TuUpfTz2_HsSZwVLyXd% z0vw!K`qtMHLTJ*~y41rQ$3lx2cjMx88h+@!+Q@eN@m7%+ zZd-%iW;KTo@y;DRSy%V1O{W$8hpy;9_j6vJ#+PAGliSP}8X9H<)q9)hp{vsBTg@K5 zfG_>5hjv^~u76Wu6LAuX4rM(WejGu!QG_8zux)p5D;$}g@!Pw6 zcXPuCa0qY5c3G+%avtES=y|a56yWt*daCKSGGm)=`Lgzm3jt2JthS`#L!iPYr%v`( z7nm@s8qg}a_Ljmx_ci@a>9uM9h zyyOxujlX^CmguSRlH6es1QMWr>HfKH zUmxD2d7+bW6SdmOlLM9Z`5cz1gVMsxr(o3gi`J!eK7 z@tqfB*y@j2b^#?}tE!dY(agh)98dx-#GETA%X75J7SqG;S)jNvqpb(J*pCSlf=+ZX zXZCNusBVI62%!`pm_EORJiB_Tv(70LIALac z_hJFjE@toyvN$9TSFqqM9l zr_bH-t&+8|vLATaV5cnn+z!J)10E7B*#WigWtNm`qQf8*ii!>N_RKbyq>Yx=)_pN) zhO(&s!5*Lz4=qSC*)O*UwN2GDX{kUorL*=)%E-pLRBGhnr`FbVb>nqm|+t= zgtW!KPhnj+74~~4#<*BUN67{^tr*!e84}$6S%)2kM|<}Xf++!7V7jw&)S{fuNE(s4 ziQO*c?<#II!k*@f@~&UIW=5?7|0>vHPNff^cSuqBpFj9#?3v#`7jjY|GOsjlrP9Q3 z#m8;`SOTn96uN3{J^VCRI}6=EeSr0=+k9cMu1IO%fT3d-EH+RXhT5;2RwK@LEhhZ# z!6uuSo(HaAC<932sow`HcA;p1?i?R?@zT>_N-L(iBxG|{Nyg*E#BU1*RX_=xK^srA z(0<^;iGY2;Rh3^?Y04sY3JjSGh>!nb`__8I^l z9U=X=ZeW=axIXT1o+bUv5R>M1=O4kLwWIeIJ#|7AA^5F*#!|vr&m+@-bKWzYA9(Fr zihhjR<7-4a8H7N&=X!kD7pTGeB`vy7(4RSTuWFVBh+}R!*V^c6uLcJ*Gu$sap9PoY zk67RkiHr-L-G8U1aRLEI!ZVF|L&{OM!s`_t*U6jQw3+*EW<0=S?i9Oz(@AsO>hBf*ev0=cZEdkRT&oehigWJQ^P3`xd-8euDr4KJKrv;G}KU`vaW z)Gj0Ae_8-67rn4T;IKig{FS1d2dI-ta9lHqrPS;V!;N~6U>fTgIaQosMaRYm6?qey zM_5ioMIZRA%-*zQdykpn>!nvs>ojQIMMkl?$`rZBfial=*B*Q{g3vEBaQq#pdZI-FLmzcdg>(1O<01B7{$vHekB!0^!yl*64)Arv z0RnlB$S(()M0X)ppjxKFqGZE5*HOpGO!e1_C&wb^(5!HKgkWDtJ8;3^_4DT{jR&K& z1+_umZWf|4oO_asVZ|poBZ!Yh{6w2hc0murGy@BsW*|QUAp+rGPz4=N+>=4n0AJrm zw1Ld~G*{(-%;b}ZCdDMcmv%0!7ll`f5I#KIve)F-v$3**o8MS&W~OCi)EP(w)G^a8>K9aUhutiRD6Wo}td7SVIjU$|uA$ z7)NF4YZc_@LwlB9{5Z9C$1{7D#4>p z`wb!}TtcXY7)yG;-DU<&{5asJalL?!Ul113YfgF{h%DcN{UjcSY)c37v|u&ty|tpS$Qj?RDdHQe**dn*?)sK zuSBAeOBWXiqJxhBPMLj6k2g}+=@98HjWwogw2h4QJprwz&|Janj7Yju^FW7}Bl43u zV02*UKdf&JctE(2g~7=?c~6jv!i>iqaLGdVGZDcrjiN*aK2c$0!C<-y8IBz_N>pQp zCeFQWtO>%N?iMWFU`R^V-=VUXbqK`zI0lHp`Cw*bU~Ei*~&`YjD zlOp4A{39+7-nd;tuyck4{iXkvJAzh2&?N>Pe7+q(DnLaP$CJjy?&sj}tYy4$O*^f7 z-G6AVX!z#UD;Zegp2)63^fblAc9?^Cq*#LfA?*+y?_r+oX{fk1J@vK3!BlL2xU4Pk ze&t0wg1hjDG1mZ?br+YpZE(RnO+ffW;7UcRUWQ9BuN06!EzOfcQG_rAyr{Ml7&nwv z*MOsP^ik^HjyJ4E<2zi{bNb+8BF$Nk_yd8uHsTT)meswH2}}(IA@>&XG9sH3@F&E8 z?cY*vcazQ5_^ZJG$PQO2s_@^NdicFH96Co7?Kib~qDq?1)*U+^ z0ha`ZnDg<-D0TJSTTCIyWV8#<%ym2cMs%_kcLRKfD0hCsc&BM zfcpH(o}hP3^vMgNW1}?F0{@+@ih4q)|B==V^HDBrid&E)PP|x}BJY*X8s!XAMGqVe z`XAxEA|VkIcSbIjQ!9suEem5F7-dx-fGvgukkReo2iye78ryD;axS-%xX<$=i36UK zz2VVXurU@}5I55re46R;k$>N(@T96imPvnkb` zj<1Qgz8)rQqDsP9pa&Bkh~9Sr-(U>ouB*b*)?|kExL7jiiGsW8X4>s;3`_O9VmU&I z2g5ifYC%9i0JVl5ocz0Y6YcDZo3+zn>T@~XF;cs-;sGU#SW6>tVNFG8Ojb){FifI4 zxLYVvXQ~%A-@QYFqn_E4QhFK28r)5OJef-9^p>BEu%mc@To5VchUOrlR~<{%__|jA z89S;0RI%7%u4F2QH?tw}GAP#TwJ(Wwj*-!BT@|zU_jk$)VVU0jx|Ing*@;Wj1!Rdy zMade=GRBRtzhP}z{|l~(Li9eeaXT+MogAe5D0 z{>+VV{Hf`%koX5{C!S99NZPeFCqK{=V+3Z($ucjW2$Vq1s(j#O>UtAvMVEcpC8|m;0bZzu|>j@qI zURci@S;&&D(Y{VslTtHQF*ShTi1Dl>2JEOw-^m&EUgg`$SD%tj)QaLxg8iV(DKU}{ zt*PbNgpGFO0+~L9pPEoqh3LLcrt@2Pc8Ec4I4Z6B z!Wd6nw@inU^85YFxuQN($2--MwJ%9TOKmCy=BycNdd?^=+%%1WjPZ%ZEwdtYXxpRC z^;A(2NvsAtO@v^hk72%p$+gi_5J8}Rxv8p~n*F-dlU2^+LzWEgJ7x^4VLD*4_khBb zJluXx52CO*#{j|z^F+dMeiq9415~(!2u_0Ko;^*8q6COIFc+$SDs6N{tfl)`R`jC$SWc>_D(nQVCg#3i zTC5h8EjqOD^HBOwc7wt#dsak>^w(|n*}JN;auc#T8MA^50(2xZ?%>1Q-&`UIY%1|8r~YwPmE6jKUYyV(< zLCVJgRfUS)wO_meaV0+vQ6?sO?3J!RvVMk(7?3&@MICF^QxEW_AC#v|yWhFfWn$Ym zKEqcwCTMkV9{K80rccuK2~sC3i9VO=8B4#$+;d9?na3+Git;Kz@v=G!y#)cDn#?C6ePKW9{D z(?m4rw#kiQadgUBOqWB5keC_BzzZ7R&SCt=osWRdeAL-8rTpKVzSbp*~7Gx0?Lh~d$180nf+0eLH0e6fv{HJf62 z!_5KMHrIPW6sx~G_Hu7zvQ%bXxLOk|n8upRNC>h*u`;b!kN!3RvQG*f;5qfmlVHx$ z{ZX#HW6e2-4P;BvI0I&!pvhy!o|A1~+{BxV$#y~!h#Xpxd(4}9Y<=4Xvf)m3d4ag~ zfevGNvDF}`-R2@dAxwwsQMIt0-i@}Ge3_c38|HE~vaQ{|Zzy%)d^!OAo=H9ee+S_5 zfNLqR`om!^t1^{mwZP^Xt>%DRyI)hFBjT zwa(D61MY4Y=Z`u2zK6TOKo?e6&izuM&CfY)6F1)Pp`vnTmZMLK1$jd+%njJIby%A3 z&<$0rp2wh{1T?24Uldi<4N(cdI4e#WTdA@~!Z1F8T&83JS0F?iC=&?PZ7 zT-r$kJKAllS;Lfo&1!k2FZN-LPIIkd!}%fM?aV)mR9@ZaG}n`1Sf(Df0#$N4sP^V?Ed0)My)kwlYO#(9fpkHL&pwD+qr$<6~@+ORu>j_ z10>2XvAHiOu)G)2afkUbFr`mydAx++)CzX&f-@7upP( z3A6m8xcL6#$E)v_0CkDOOhAAlmz!|v^w{Fm%*j|f%9t#Ap{`vst#fm!_TlCxDMNU7 zfELOua7Ix>!^b1bAKf47{N-UYk=QWPn=&fkvxWh~&-e(%d#TL{va|#>TCK&1KU<$+ zz=$wadd2klLcTN9&-W9V?u?yeK2Y&Fm?W|3Fy4RUH$#d|ntkihujiq(A^lNL9Y21& zj%B;!d-~GukWF+4d0CMlE~nH(mHoquXx(oN?RrqTWS|Bicb1N^YesbqXse3mczt(O~=y!&ysj z^&foWg6b2MZBL@zzm9F#`sRM;o=;blW_PbNA2ZebUftH$6Mk)2YTWDepM=l0N&BDQ z`Q)5kG+ zP`y@!5ALk#vL!xy zwx9OETMP+Exj=sg!RgT@C@yEVmey84(FKbZ^*i=75X7J+#@4 zPhJl^f4)IfbmqDYc$Af)uiAF)8q7~?nl?Ipu6(I#Ta(jAq12iwjZpnqb8Z{kq`%j= zwEA5UZvFJ(-KxSN+Y`-G$z$hb+#~IXq4CA+>e6tp*XjB6>-|+#zt@cIgP?XVW0t2k znos2@#SHT+D#|Xi4z_-By~w=^6xBZO`GcB`Z3>I#ZvAIfeNql{P1Bn1&>gm{`}a$pyXB2dT4H!~NoMrWwavE-eK}<1R@Z+NPBd?4rZCa=X;MujCV|b0%40w&8 z{!V-GV#=6|Kvy#N37lI(?Vi?Oyx3GZyzqrZUbfjSgGr-bPP$_pGO+#Ade*rL3JnK? z%7EDcHyy0syvqfEymD0qg%dCKE9=bXB!#~jwEMvs3Xjzgkjl5M6|KBuP4~ZAd-Tn> zb?bMJ!IIQHb6r__aN~+6@qF7+J~O(Gv9p+8u~FgfpFcNkZAW*3MKjRWzPCAitAc{x zFp!0+H#ZgyY>#_?{mlLiErzTe<-?ujw)PBtH4q!3fRu&SyX=C^7d4x)b)ALlVugtx zNHO+w)qy+ea8Cj9bqX_^>+ZU{r=UsP=NaMpJL)U&C#-{Uh~Y!i1*S?X>d3#pKJja$ zbE&iSWv3qVRcn94??#h$E{gj)7p(LCSaImmQ28ytL6>}16?`(beK*y9mi$1$FSwyW zaaX7zQxnJS`>v*Q{9q=y%YVfTSZ+- z@gFn!@8@`ZDrC7`)WwvoEn04?{q9yXMmO{KYIaJ$;onQsF7{Gvtj(2S-_OqO(4%GT zUwXZ5`}MUi+nH(qy$rz(ExYH;PBZ=QUk8mb$sWKpi4G|+u6<{>^eg_AO2?fFtWLMx z^v{gY+8ZPm0?%P@}tt&rryV>L9%4j~YeTQ~`KU;f`C!zfN=QkF|&n^1< zD=PE1s()05YQ8p1v zF5%5rp#hIP+$Rx{X5#4K@{4x^S4^ns_f0%5WC7C}7JQg#er}-od#em+1Ky4N5HG){ zaBQw_T{9wU&7adXDWDWt7d}VTR9DdXJx5&A*IWObxl&j8#dmXmHZWuBruq5Fu4p9a zqZ9QXo>Pnc_s z3;FQIr8{V&5AWaaS4XkFMY5mPw5d}Mym}j1aCz%=W23Suabe8QIRl0!I#eMs(qp&P zjQB?k4o`0>w?Dbp+jZg0y$0jMm9#j_;=or2r|B*F_2Rik^qSAAg+Q6V*!|%7bDhT1 zZ#S$x@X5x=7xMXJ0rWO6p6h4~*%9XttMDXe{THT;Q*lmPG2&)*;?Bi24dux7*v6Fh zA`^r?(^~}0Nx!l*2$}ZNob_SFv+vCfQh93--iT0k?CrXZyE8S%kB@p#D0j=x`BkL7 zW$;9{f=w0ZP0-vY3&%xzG=xe4POwD`2|=ofHc&o_An!w-iR@E^?h_u`XZ% z@a&-kCO@LCQ#dd>B$IlHr^Xs0KD+UZj_=T$Zw5GTPRb7H-SY42wyTJ3;o=ARw3?Rb z^_|V3aH_qgLR*~xi{J_e&|^+i&)O7#tIJ@=?%5!o!Am0M3fLNkRr%&9$bJA(e+IH^z=1axPwWH*jIH9&`FVL1BBu~xqK8L2_e3$~ob_HP7h=*?hJ;}W2 zgz3BfzLC{LN5@Dh6P7xcq?I!l7KQ|=tES76gY)OkJtO*-*AceoU6@dnHv&r2V~jBac*2g$UlDiZ(FgE2Uy!{3+M3mz zhw8ipN(G_v*TqyhM3tl)jR7nUZn*^#*%Fk}k=FV}h>7N+;B<#}+j`fYe1)(@bf4{a zPvY!HFo_og<-mm1>ft^~Gpg+)mXvclig6RM*=NlS z_5bevDomE`-&lpOCRmk!JT$8qrN?S0C7Us)$Vy5>P2J?A10S(J@2TdIF>`g(gX-}y z-5Qz=_da~!fIq_XxpYTq{O=j0&}%@irMkTmncv@@*9_e8O69*GE~6cm@HACEt9)FAf5%y=Mc4ku zV2$uM-?ES08ua(o74FS7FgS;3<#BC(*w%RCq9Izf)l$p$K8fe#>oJnEKXaXRUe1!C ze{X+}wS4Y0*QyNHJSM&8phcYC;`6q@w?M(`CwLJn?2VtpPa7@h*gQN%?e7aFt9IKr z8AkItqoHSUaS2=CnX~?Xf9unaO?KeqRY>OLxGuI*3^q*|G+sWt!bFR|)hsOY42Kz% zr9o+nE&E?f%{xp`z52_B`SIYQDB}=$R;UGxIhjmihZ0?V)}BoKU)Y+$B(6>7eeK`(? z-V>@K?eg$ycsboB28!PP+v^49YLo2cBF#9Dt#>&S(?JCP8xeOz%`u*N_Fen-S?BqW zxL_3()C@WzKlS`Rc$kZj03$1^4VLJi7) zH?8l^KQyhcQ*o(bhTI7Hyc@-GUljb7;vu9oZqwE3?>jWVoby??rk(P_F&&=8rHs*Q zQu}UdaNp-ms`3p_3|~3T$Gdsg3rh`a>j8xsK{V~QgTKt;-d{ z96Lnmv2EZ*c?i}vi%*0ccZzOm+5EFM4RZ4x zaVB$1H;uay-Q3~O>|fX7zPCf|dd_7*vH|NF%! zURwI2+2z9Y;8I4Z5cqi~*7&~ca$IZa;A3};t>bBQA1R$w>bmK}#OOLK9C(~(SFUJt z)vrs(ZSM93|Hzlty%`yL(B0F_YsW(&z7h+t#BBD^ykJs>vum)l}CSnJwa>0y{-N) z)fM(Vnin$sYv(=IukEf*Tc6od|L>`*d&#KP1e1(Wy>6QgK zk%KNOcK=n+)Wm*aiVE!@B0MY|CV8#s7faT;cltNy|+FY-;_ zdfjSMZjZyW=bbGu@Nl2u)4Z=j#fX<9$E+V}A9TV@T@vDkBzNh2NxXatO+4QhA{T)0uIKp4+ z_p_1S`oq2Tt2e*w5IN!a->dWOji-RgS_zwHC_q*Tsd7t-rw(WYNVMu`012xUh`S;4pXWS|NL1a*=^3s)mfTxU# z(MUDdP!Q@e8dzPZ=7r5A0CxtG0#*V)FU zXX!NnD^|YFdFgm~3GYe}|8evRP`EEu6btfAR8FkLPwqLKa9*1HX9C_KoS7?tMwjpJ z%dfMbTlzVw4~&0oa&CzwO zZ~eV8ME`Sl{sl?@%a1(z_j)!-UiwP^o7?oCpBPmu?1;*0BHzK+P4MHlH-Bq0mH&&I z{`QIQU(x1&2R7ap7rFTwY|!a<@eBHp+(O!OFgYtaK0ce&jo>h)yDEr_YlCKI5P5a! zVK+WSQB&1*voIGu6jzWMj8qM8pe~el?12U1DVbpk(k@^ia&Ugg>~kxbPpVl-KCE?D zWnEULv&|Hm1=A3O9Yi0*!XbF+5Cz-yeyz#zb37Q(7Dh3GpHd)RrCvX2` zTc%rB&S72M>qI~+>gLTS@0Xqu)u?9Zm=G_rMmLf#w+TfkY)GDLuKOynb?Xt7I}0}q z7k~sKsF;reAv+~?C+33j(r13qx+V4$0aGA3r2|}K@ist2FuT(UW;x`tb7&qP5qb#85Vvpu3RY%8bA7qTZDxAl4}0O9{$Xo42bJpkP`2F9z>{;FP*E$BUd(%J5%CHAv7=Hga?UQW^$(I5Yn_$hB=CgJlAcH3M6? z2zSS(c`wQ|iry?@W#0D0o;(1R5vQS_8;YqQcS!+lrxlo%QBA|$-N`^=(-IPTk{+Ck zj*hlPRW+SO%0%sWB@?I!rM6Smo|M`Q4jHNN=$X0oM<(&G&jCwDyt1gyzCcZ=H=+G?2#1eBr`u;o|mQc_t#iC94$ICFBDNgKl8)U zDjh++qC9@n7QIv3tRfBIl={6z8>V$7Y>|=4Z?l3*1c7l;j8~P#)%30Ca4Ozj@!Vd35N<;y(g~fYKQ-(~5PEo+6*R zJmuZ#EtN{Z(Ob?HbUnZ$Y?T9*G>gO-9CQnl8k_tr5)xUa(*>BAMNh;cVgN#p(+>JCETIScLseYtH5uh2&r|;4WBiO`$P<3Q(V-G;BkE z2Yj-lIy#L#=SSU2;DLv3$7iD&fW6W#gN+6=y-VMy=kCr{vGgp#J%NKwn(LWAOl{!> zJ1}PFIiu1(3=%X0%XCGUpk#NAOuspuH-w>vR!mJnS0C9WLVPnG?lxx$LPHd$!_bjM!wV|}hk!%tFHT*D z;IOU9RvcINZqJA4#BLjw`FlbS$Ff#}twjNWatgNb@$PcxC4rI5`Yetw4neb2J5%^L z<{4)Rb4=Xy8FUbihlGV4MJyu-8sPJ??w#6rfnrQg$bfkk>aG3vQ@{J_pR)_ndbCAIG z<7n&fhal8I8muu1^C8D#PjbA2)E$=^K6g;$_hYWT32bHC%=vRfSp#wV0fYy(Y~P;S zG_$nPjg2hmdfPsT)grMZu_Z?7VsSX6uzxC*Um}4M8z0d8VQ^#{;hTbnghYqkQ_6r* zrU5gjqzW#kMr_&E=RQ6!s;i}699&vB=^g%6y$mtVfD+NA0}=crI(;{9wtU%@4Og1> zJLq6-C7+<88Be&^@exMhy5W=2k%1q|$+jx!#2u1}tLC24MI&@v(Biz+YI79Ld=g>+ z;BMNuQIza=)0a!jc?(dyL_udJ*dgdwUdxL;A^kT~Yt*k~uDmI=^qKxQ$=d%2a;yR{ z(dzs+-+n5bA@FUQzRPAQ0rA}#w1n^hNn+SlqR0L>8)fW0eJtkG(!2a0KsPxTmy&9M zr2qVjq|DNLvHh>%o_~|u%cFm*zNNhKzy5pb-yHLQ28#akoB!`v)BpKPAf2Q4Pb{ig zT8i>b>;`NR$z;C&cT_E~_~`VM_p(x^rcz#925AX9OvTaXVEm6tyOBni}|W7w~u zSIH-}-ugkE?P=#I1yTs82s6O}9VFwg3t-{jz7pV`$*J54s?Ab&t!UfwhYPw}>MNm*oCm!y}3QiY5T zsII=QZXysKM*A^bE&0&CM4wg*jD4_Q9^*Rq(CxDm!>tL&)U%LkA8yZ%C!HLe3*+YP z##@lojBN0e30)(|=?)O#&VKjBv?M9(5?G{VptnnOqp)`tOj))1;K>SV-e1&3%DnavSx?JyK4QAnZr zp@%)yi1+jjW;0;3e{(TFd~GP@=eNxzU8dvPap!>shum)e4g49`W9|=#-@>eqfGyxD zr=_M|M-$`vaEt?!TZswK28rmA8xhoX4MQ$zNl9w>1N;=qb8*Fucn1MXAgHm<>w7^+ zAfJM9*6`G+6r#~dI(IkjlSXtgnQS^P^8{10#SnQQcrLE+p^&Xvh4)*{_ak|D2U09< zlngv`TWltM|4y#R*Y{CR3=;kUvC5qX(5#Q=i9LyT4dxt8I&N@edu$!|j?-6Bd%Ux> z!mL6wBB+e_pI>WvXkyI3aG1`EpU)t?AV7Zi4=Tyb>N%BkAw@mnwJ%QnL&;e8Nng=k(GHYu32<%%tq*OSBfcI789dwNR7ff3ErzzNg{SI+( zjSxz18eA+HLJtxZZG#sdb_6D{@SDGRaa@oX-GjO`b6D0=!`qUWA!vC&|btU#@FPpL}&q*zC+*oKeW)>0qMj z3S#l8Ttm{021uccBSiKb#?3Myv^)&Gymy4AGpJ&!uYVtdd0K>qfxHb?cu_ZQB;gJt z%v8d2AfF8N`dI{%7>pyRk0yJORwv4%+1Zh7Tpq27dzLSHQ6SKtY4+R{78or)3j;nj zFrl7~8=v%;!mQsQY49UsJ-IWsm2j2@oAw}tVmPxM7ehY$x(IoN==lLsI5sYa4Gzn) zCQxK|jdqs;)jfeC2{BI3+q;aARuF@1VZDxkRnpV$rGzI8yNlT#e^$Z?NG&Whyn$0E zfN+ixRa=}|LgYmZs`o0zkjWr2;D;#c?;{u>qkM$m>nzJFhrNSww1?!IqUxu>{A75v zYIM@$3EV|WkzJEZhCnr|SCb5XKRCOM02lHxr$*oe(jyOK=4qR9AP80?t%PS@##gt& zMnPyhxswxO6`}Y5bYVPna-qXOVCf+7D?GxO$k}pV>aY)w9{|80PywdmHz4bP@h#yX zENE!Le76ZgoB1I9WSW*5VIR!)Z}Uk-R1r=OCyW#fOOg;lxHf=CY(Y6iN)rA0q@IOE zB8f5pY;16LDR9IgXaL&CJHB~glzs?f(#?b#gBzKgOVWx*00F#($dCv=vMmOB-_+N) zVJpa3HwqAT&$>UwWD}uMCsi_GXQ3n###)2sKZH@RHf)_In1#hREuCsUIGy&8?1~L z-Qw@V+6xMq^Atw^Z886g>#GTPSsI=rN$wDYVPx2d<~WHo!=*FbFque0J!3G!{pq6S z>U(Yfasg)UL24icyRg=7r!77@H_{43&H2QOU_lz?+eCrLw-xs^+Turn&ei?oCpYc7 zw63E8$bzJy|E7qELhhY*w-FRkxqNYy#Q|nRXOAE_7)jT&x6dkeALlpN2SVAK*RPup z`Nh%AMi3f;w7LOe((}(i1;|$f4=mF#R}IMEJ3`PxDYol4+s~sH;NwK%ts-^?`FzhG zqhOYS8aNt*1e7CB1wdctBY_L3VhOPf{2h>V5|(IOz_}JevfD>mA?%4Kbssz92P}gingZBgbu3|*WH_z94q1Kwg!A^}J-u}?YjNqOOy6^RO9h!Aoh5ts(7 zgaxlPmwa_P?<|Pg6kwY9&i!u~y-S%Vu}<~%KZAO}>{o;WH}@|4yM*HhMgaCE^6Ezp zpUP&z@Jodf32o`Es$Rlq%D?d288^K(*iYodx8&O%!}4H7ck{9kz!Ac-&w#xVztJIx zC>}+?pYOv!XD*;ALF5xb{FHsf90HgB7at$=SqbI{YzkSkc8U9V8|(~S>SWrbYrRMl z!uYCN!M4M|Wn7`cZUdG&R%2$l4hW@Sw2`~BxoC3>BAIhZmxT$2V$yPQba2t%+6dT0 zKib6YjhBOW;wq|zQlQYf2kTz4Qk1rbP69*0uu65o%yk!8fu zjojGfTq{nV==1HjmOA%(cn}y~b3Y6CT~OJY*gTS<0}Oi*$N+AK!8ko*ixU`EM;UK) z%+xc*{@J7kmahNnR~y{13$}&E5*XIl$ErAWjdZ(zJO;(wJsf}7gNfaSVQ{JlXm$=^S0aDW5$VhzwL=Ssdqf(m=Ll~GkAS(i``kyvcYZtoo2{0x;BVz%BZZi6nArhAM<%3$6$c(M9dB;Y{q zms{6@%h6V`>`Vhck_<>;KLX{b7*=%tW$yT(NIMO%u=DE=NN+-shi(VzM^WHYc#bP( zyCDq-0yjyy!TC{*mL&RhauGdR;c!i0e z4Il5~^|In&x{9>49cAA932{=yB2Ohz9$9iaX*1!79;NOCy$X)z1Y+!$|&>PHvi>7bJx8=<*^MvV>n z7OL51CMM!TAN9X6c6k+TMs!#-lsIiu+Buq)U*m|;sH(VPR4Fq?Yr23D5MnnJd9t2| zPNQy$x^_*+mU$X?8j{5}M(%A`5y#XgC8LosCjf-Qlsk=-^|=1zC{vHfR2sZ6NvuX? z)CP001d?!pwcpnuM`KQJ^XGR`{fEt81BBBXb? zBSA!B%&O*L3N(6`fGjl?D-<-H$GL9ZK)lhoTS-1zW)~ruxkX&ORi@oInJ}(_U=P2~ zO-4yRKSQi@mjJ6w{x!Xf96%4?cLoaJFc~8O`avKE+yP7YJkH@XVE0Gp<`sX9v5k3R zaSNINH=pOW;v#s6jARW5hcy~NBoTfB3>kd`%{Q-JH6l>0X_L7)vZp=sga}drVBxwz z!*oD34$WSpjGW{C`J>I{n@ey#p{B{+NH~fVI7nC8{5%?+eLd#g(6f`hN}RZ*5m|?T zW?<$ZqgAkkI4Rm>p0CGy0N&{w{CXBp)k10`Y2|^5jRtr*Bll`-g+}hZ`gs|ly+~V; zX(8PZ#q1a?{C*sJij(NKJ#4fYft3nA{QC9F7wL|*y9rY@r*;Av`kxa#Si=;9_xYWp3p0rTu26HAbYbY= z%quS@02!zs!4oG%9x$`HgaM>@D4g1D_O{*xI|wIq%h1QU#{f+5cxV;dPv@m#)OWDq z5-6yMn#y~(A!Ejs$lTr8eoFq@yP>JYF38gaUhn}L@Z6SAKN@4$1FA@$1lozDBx)IWMt%a@9ubhT2_CD79sw1MC8CKA zA4WEwb$fK#7Z_w1CITm*XC{q7fY&X))HECSFjDi7B+zZSI)n09A>Uio+`W>B)l0bpj+zS;fJ)Ia+p>9c6G2Q+ zSEJSVPam6DxS`}Hm}q)daoX#rx)?trNkG=~1xn`eJPq`nu45XP^gSWNibH@KAD6~q z2+%wwz$l4l7#C-n<1agHe$3eEGCF(@ARDHKisCP`IRrCkPmm#9gd-Jpv`?mr73O-u zz*5Z?N7lHlbm|5M?#Ycy*xNuE2w*_~85o4_A80G;Mpl|17klSUDsn>79VBs%7(36` z`1}dNb&S%^1(vH9K`bX#AxbvzYoc1pS-0?Cm{29nK~GOl!iUDqW?wS8bCZZj?a1^n zP5}l^rneD99&@tCpWZ|oMq(LIlp&wd=W|`-Qvf?`kQ4xaBzXgx0Mf89CEYA~e?jX) zEiJ7U1b>1w0X?&Z_9T+hV(fen3=U(d5W4vw5(Xa6EmSh(yburrE)aAG%;nLxxf(g@^8# zJIKu^jK_)+hZK1PgK#1E5nR(|Ym^rfG5CVcvJviRIgDomVJUVSO(R29$O~+m&8A?$ z=?as~5v==%68CK4S9%efj*#OC784y!oS1jtJA~7D7Wx9kcwHXX2;3v2-SMWO;TV`Q zq)!YPudO?GwwVcrg@(R^3@!oCuni90Kz;Y_(OAnRNOL_R@Q~T!Y&4m=0k%l;X4GH+ z25<^+`L`iY(HZAQTw3~;*zD+^+9EliKtKp*zki(S92%n?r=kg@LsBH{FaW0_(X~fy z`5ZCD;5`{?Hb~M}B&vVB)ZItgw2>$ROwvI%10DyKd^q9AmsmA$W~51~hhcbt9F4%v zrf{*PLG+6t(O@Edb1Q+$l#Iv3VomqOngZQVi!?r6_nsDrM|ivpzxO`;%ug0U+L+@8 zhT@5hJ9SpM8K&rzrOaRMP(OH^Zsp}bX%11L`vKbYTpJI4dmn!6S;3}*kH2=!FGxN# zihFEj`+NR^!c?%(y)h-F*UhEM@iPPSuT>#@rzQL@VGeDdY8>uK4Co{l7IG31S>h52 zDG>otQ3l9BLbW@f%U%{}Kr8b}@Zdg(N0xzTq8a>3(&HVUU=OSJRhltf$ z;?WsGC`oB{PzZ$|u(F$e~Dya~RPBc0Tj zYF@bLM1RmiF?wLC)NIzXaDL_@OmsdYfuM%E!z6qslcCWK84R?AsTzJj14NBNkpo!c zR6)0{Cn;1y&CzjUcYH}%!3i_CA^Z!D7EwMEJMok$ z+Sqx8+MYd{t@QauVSvj0`(%l!9ZWol2{kXva#X);>(@tM%k_bJ^%80SBtTFVHd@GG z35kfD(R$to9hDsT`x2{Jh_<7M!TppdchWQ{}`fQ9QT-a*oe%g6i8Lh{gry7E!2z zgWQ*c78;Rb#D=pkjnI&K@3j*`umD=2-SPtDG9m*8{VhYWwQznF6cVBVh@k1^1<|ng z)RC{H2faB1D}d=hA|s4U^kK|u4@^PO%QP?Oge1ka8#nxri`#uHWQQaSZS7-;IjBRG zBiPeHRt=y)Qc4OP1Y8fKtU`(e5sq?JpI^kpPfmV0O#K==I1RzT)7RCmF|fF6h21BrvFbx5R$f)r4@5iv?@ zv;YGHoQRz~WND$>O&3&k3GPx*JR-umKwqs6T-nLV1b;YXbg9^2e+nSJkk;m+&pKG0 zA!cIt%7yYmuVsUT1PkifeOg+)u9thturqMHbxcjep*{^j;LNFS812L3VL;;$Zb6p> z7~rI*iZIbRw+-U+xK$F`N1TvM!VY+~+&val%+L+K++-a9djd<#4Y*?PG!#E8L8`?G z(Fofs87dVO6%{a+P=#JLD3a#+Mozecs7lXP0eOW%cBAh+P8gBJ%gA7Yz7`uTb#HGk z6n^(;XwZAaxtAS6Sgb*9xxA}E2hK|qfbJ@6@`-jcijMR3RilTq+tDbk>=0y!XfC)r zTJcJJSQdo%YSd;l(4oW#F4G+MZ7pHsou3i8;bP-kcY2St^`rAX$RMjQZox!<7uKGj zgIqSvb}v)XyCkd2;e@fW;3S5q1DCNbMSsMh*53zi4qd|!LujUgn$e|n=I{Bx3imAk z0Z+JLIr1(Kw4e_YSx#GdQM14!E~vwfzV@*{{jI-0$fg#Y4c$jJ+KNqV^z;%dzDb?z zP(D}apri0%>Pw=Bm!c5~CnTnnoqG0p|7N!+`{tkXp@nZ|l@b>ll0?K1cnwh`%hEWo3o-``CgA^y&=rSdP_->-@04!pEuEB>AQFCV}Zch z+Q&Vf-tYTexB|K4WQ@3(*Q&GIFN5Q2qgRX%Rdctj|Nci`vRAd+UVP{6^E*Z38jXk*UI5X?;P|K5F%Dw_bqGLN|B4L^Y4!w3-J zZ|3Xxo?wSn>auA@jXw$wn|J(PV?IF5#VEX&MkT=d36&eaR?f<_^k~(*-y0maTXfsY zTo2w5aEM0CVg25Qt#bk`?o>?W0d$vo4H+~T>ut?7o@4GNEW_`L$DghOlcK#^k3GcSgmAJ_Uf?oslgFT823 z!co!wq{1zM<^okdnl#-#PB{|8tM|?W0M)Nkc^&xhBLvMN;wSPTqcI$?-oc-!Ohp zG>q%(f4Mq%!>>2OhHj(d%zlwi7(P6ved}2lqn#|QSgr5wSx98LNF-VBBgwXBqRZUyD z!yHZBR4S^UN!$#S$cM29XW6|na-!R4-1zNWIKP~4t_YxK_F(1;zbvM_#@I%T zs@&9=u`IKbM_YL5JK1yF4{!7BX17@Bv4TsntdvL1%Ryyhtu}SC0aKCqE}1qihAKN6 zv(B+A!Z$2}*Yf(xqX$fu`H+CME~{ogOWKP8oLEL1bw&JPMkclbi9LOHA2p% zl;0lpsnOY`7Q9vWjNh+$h~2QQU}E1(O(kSip&d4Kk$;=YprptBu#?tFt=%PW*HGj|4k<|~`}cKR`OAKJ^QeB>(OW09^g650G+G|NxOkX> z>#lV^&C_lbPG|f3vYc0k=QbE6F*I4mzJGcB`if=MapPvo!$(V*{jb+9>>57I$F=m^ zN@pKsd{qrS#atkmqOn?vRy9DBA=xMH{haaVQyZw_+u`zo?G3irhlki9Qi|3&$x?bD!voXBmwNU$5 zol7-0AKz%bpwD@_x>Bo}hLh^!OtwFR`Td5HGS;nMR=0?%F*JJhPJ>s~2X%x=w^V9OZJ8Oa~a;%@uER;)CW$o5d2OO&~fAy-?^NAEXV6FOz8FTL3?n{;s47=@62bLiF&xo&Lu2 z&#oi|L%SGi)`>_bF_zh>y;62(EHe@rqKc}i8B`FvW6b*ZMzxp0x?9VwDKtijC1-xI ztLp~5@0g!oy_xMN-PNmfJZaQa3~Ns~B*=5<23QYXvK|r7dcl(SRZ{TFM_FE$3ji&V zX}!SWTtUCkqhvqzLm2vi%F7P2Q!dzY5N`9tpMn6MoSM1m`BPC{&<;KS#8EQo1&ii6ukjxz zdEakl=RYgN6{yGJc3>k0>c{!r&Y3sW`#ZEzf7<5t;=v2b{VM@l1l}VVsFv_*svay? zN=uj1#*hurqr3!oiAv?@(KV!&+E%b72N@MoGSm)Kr9&mt)6-K*{F=?X?X4l=0J*~> zD`#a_(^8`}!_+L5FAUruV)A@IfjIchOk zUQJCQX=#qPvK%~CEh}F&TUvB3XK)?uvF#M7KfvR%u=CUV6^Z%o3+&0dYPSwta`f>N zP0UI`4-t$XIp*6bb>i7Bp%Yu;9J2<#=orSwJsQ_DS-iUIuDl{bL<~DKNU*YEqgE3_Ids6f~ zi(D^NoX$&3OMCNs5nB!4T@e25Qpe2$u3efu!4}`%?Rk-7-@jadZtP#T9?VkfV$k=R7t+2B!n!*2Pj3GvypX4IMESJv`mtmpH${+4O|$WWHX zF30EMzL9AP5xWQL6GF)o2YBFPgD&e8z`+D=7>Iq_Ftnm&HK ziV^q9-8bl`OfL{JA{;|_O5^LVi-y3GUW{nOL~kkiFc| zr7t;YMn*AYz2BbR0g1d3XETURB2l2L?7NTifS;*fJa~^4%`t`*D<&;#HNK8L%HP5E zGumP-ca=K3LPJE_v*H6O%W9maUdXeQ%?@vk7o`w63PGr~!~0!s;No`fO&p?`LRg7Lffo;Dn+{P}zHZDbt_P0o(Fy;M|9HbJ90yTwY% zE;Y8$J>t+Y8S}~hwD*Qz5AlV={eWnTH;G{vZ8?9!LVMqI+-06vP zb&-v|z1xar-)@#*&>E{>>b12M0Yw8Qz~|_L@*1Ly>>M0l3ZM~X)xCem20Ll)NhpGU z25rn<`3&eeg=kuAK5EU2i0E0ef{Mbp6~vyfg91!}mo6;0h_=^V{vCCZja%O0!skyp zW4r0?jd-c(FK9D<6S1NAi{85Q^=s?3IxVFcD=$M6lY58t*SN~^_RW}Dayo9_u49tR zdBOFd!O&lalJaPN0q-!%|!m2NP}PY7~efT6NU95m+$nQ|3ih`6i~nfxl({N zI}TYZz{nIhemELV%K=HJnBTs-FS~uocK+PCQQsOgsB^-A6Bd=b_n7R68NWV9I_z;3I1dqg1m;48Q3x*B?$`BM0S+1&j zv&dBf3jg%tNoVppbj-{m@M9{86N{DEksH{)dh%m1Y~=z3OIQaLxevh?0LTCtVj3=$ z*DTX-_EzYu41APW=0-=AFp#pSX8kQ7zlibe0y3f|J38KFw{@6Xluyu2M>NnRPdrza zj~losY+G$#5Ybu2nZg^AvO_Q?W6;x$^;d}S`{$c4_w8ja&n^8?e2zuZhVEvxgzwig z>E(MHqtoH?%TMOtmeW?;0Q>b1#IpRfgsU(~vYAtO56%Sv$S|`+pDAP^$(e(81jb$} z29A8c5GBAsjDeRHXnjG4od>8dxsXYI&NnnkCmgu~!%6;1!lm>m!>2qwScus{cem1@ z)!I-xl-TN!MhZHyMs~06UQf^8*IsnNMDBW2)a6(E7Sr9|#s3JoYrz>`)X0|!lTO;M zuC6^wrpCrs(Mzyx5i$aH<^iS%JRGh?Mag_|gA0Tq6q_IY)LyoH9S?n7U3y}n!1|{% z5#^Kw4z-K&0>LOARFxd$^lb-xYqh9&I5>Y8z;7GJaFrJDOtlDjEL;MbddT{~PM!=u zn<|A@jCvNG$7n|$sypgSQwwh`+$jDf?}4gklh~^PEt=I2sQ0W3rlJg#DE{j4m-U$F zxpwa$pd9$7LRyJ~XkQU`4T*(U33#j^An=^o)VJUfr-|nbwxHjdtp*;2i0SqPeO0W= zyl&z;XZNSP)p~P*D;+F07J24uJQkoU?Ceh{)rP>(Deo)O2_ytO1YEP_Sh)KsHv%nl z4WXqyP;kld(+Jxl4-PBDaRSh7a8vu)_3oWNk$$SO&x5Ai$^elafz&+r{gNb^Ln@`U z0{2q>0)-KWLw-wQ-|On>N#&l84JSNU6BH@9OrR8@1TshDSOHq{aedI+siG z^m6y?tI4C|Bd#uvFplzkpi3P%;0ZDpQ%M-WSvYLaRa)JDHx$V06b+i+6f4(Ie(6Q)p=o>4_^AMz*j<%h+%d*AWhZb~8w?Kc_y7 zQ-k0yU1jx^0ncaX7ucWk0(eGbwEB#;no9wj@>uvi(DmUdl+fe7XNQ8(C*jt|#OtjV}iB{U}WPQ|_s=p;sFLiL5XF1Xm zSU~}JEeC_J|3+C_leHssnm*%3FFOBv&qdnj+p117`4`;c65n#g-H}Mq3@Jcl3NmWts^xWCA6*cR9t^&Sh9elfC4I!?qK%>mKo?CSEx*Tv>7;(FHx}Xy#KVg`FdUcX|`)Zd;bc3*GSdAtx zNMf78V+Stc&9nt}7ns~i+1bXgV(jx}`etGMist7qlk5Sv-EH$~Y-s@LInMnD0Q~CF zX|F$>ZBfMsIILkK(h(;!l8$IPMnB6w%qy8l@2=%*ot*- z^uk%XAT%l=oX$X;Sd7P_Yx}Xy%fWixBcy4ykzpAKEW~&90=A%JY@I}e z8JJe@L61GZu~0ch?+UPHUkgrh>?B62_;)*3b1`i*%<+|YDw2u>f|!UTQx2h+BVxE> zCdD@;9J`RE2;vQ`^&7xQss_LH66DV|NK3o;89~rYULO6JooQ5+C#4dx;c#54 zvLuusy}4HPcXliX^sUs+sP;0b$$Bpi9F(&~*?xlf%?Dc8qpYk4DjrwwyZSvx0z*Ay z4I1`~!`|N`Ew;u>G5PoOn8P54pNc%F#ImyP-@lM;P2g($jE+*0YoJIf#;lX`^Ii2D z*wxvgM_EC1+8}DvGJS0`I%?wY9ax>&z0wduhe9oVbxH zQ5)AxDH2{eyo=b-j+eIF&GfgpD>&jdcjK#}hK7b-%%UWznmamnKlp4(()Dxa)Y0B> zjbX0nbxc4{2!EFBEz$6!zKP;vyh>%yzZNRZvZYn*CV@HiFw$ zhFg+M{_r|5c5OZCD9cOi*_ldBSrgp#?;}c~QJJJ7>w6`MA-y#O<&uk=8@N3*h?}Vg z1@oKGT_A#$Y-`qB2K^o4_-OBJKr^N}YrEJQmYeksXfP3B((vEBC&bqN88KT_Gc@Fc z;$=ds4b}vWmz@24PtdPM<7*%@D~kmeo7UVaT56noo%B`)X6DNWQvCE%1B@kRikf5& z->A=hVR@<5M*Y;O{@V@c7-^sqhW{X%fr&bz2?(+JTWX407xu8xq6;$cdvt6}!^EWP z_SP3*BqE0v+_dS1r+w6c6f-7{S#L&QHXZ>243Dz2YjBih1sDuc^?!k;b(P1ykQ%pQ)N8 zvp_ZQ-%e(+Khci<_4=^)XXkjm)V=8I+_-UrZQZ)%nFfsLoPirl)(j;mA|#yR_rQr3 zZZY^yvf(r}PO$gFI+$|p{_NRZa@n#W-h%~Y753Q2F|n}-+M{l*mhPZNu%h#I zzUXkO{s#21(1QyO3sVQrGEZoOl+-G`c)joON;L!@ZKt^J8%2{NHO(YQ1-&CucPPU0c9|o&^C+y(K(|43hKaa{)YZ09L+=VN@3_( zm3++BOJ(EbWkNF~-)PjhE_vL`P_Blzrs%HOkfK6U{OYA%0Cl5R?gV=2EQTVoh|3Vm z*bPd_?Do3ob+pv5F(6J(lb8@FdHX{TW-MqtK?l{bepF<2jkWY=BxWzrmur0gevqjg z-Mo*c_0_BIHzlJJ$X*b3_3GXW7ZlL`#qPa+_b$0zt&otJ?x!0=Vh8iM%U~EJAoRfc z4Glk4QgNM1fMBQUHp*O|EDLB#!4VOfE-uor3%L%05txA%y_J{wZ8EpU4Uqd6&IE`s zXRg^w-ML`XbyAfL9m0Eec2wzZi6Tp%s$X9Y`vnrk`K^akkp3f?L-);bML84+58ty2 zs-nJkXxHa`JE|n{FzC)FCMMpNb4_d4yVUvN0}3Zr49z)**OWwlHO2*B@S*y#7*Gvk zzkZDV;mSVr>&$k#O5mVWRK&Fj7wZ@2rc8r$;(qqgv5MKMI0t7FL{Sg$gmO{9M4xh& z4X;AmI0wR&)V15#KMAHhJpDF^UpxZ zn;16M4%6_zc8!fx!(M@YyHI+sY9u{bVd0nQ$F&e!z*5+Y_DYq)HXt`4G0d%NT@*vL0D1ZgA_+%k0hh`+oH7%! zwn`E%!F%Ai1FYpjlHpxg%%DmGJ%bo6<7_zW8oCQBmirGM${$-cp`Tm$`oxWJ^ngP_ z68eZj3C_#T-6A0yNVNoq15yyWc=6Q$PA48;9#GyzZH}Z{hS0HA`pvV|K1OG}ijYE( z%Y~;p#$=Oqi=)6Z8$>B3cG`o8#i-I8u?~FzW;Ea>R1hnTPj3$KU=NT`bCK-E8~I&1 zbsYX-8+Pqlhie<>wA;S44;^9w4@J>vd)Hi-MgZG$;iGjL>Sx5$gt1uUgO^a-@1FH2RJ}X zvlqbH0O_m!7j%%9yI7LvTG)T<1RD>JeByJONhZV*3}h2;(?aO9=%5-J6%GsTlLa1x=I^w{BXGemQqt-rQ@s5y z9QWYha!l%$a?{dqFhuSTwBQ6m-lK%e8|2l`%8S2Q!A|Nm_O3qi$F=OPGGV6eVO0zO z*)TfPVKZlU-WgU3g#v66SM>x)m1~F&SnVU^ca@mLb*vRH@R(}*=lCL7QygMGH6bGRcff}Zeeaw_!3uziZbc+N_UDU+Kh) zVd6fG|@ofw+L1~TM*Z%%qsFl}< z7kvC2x$aXk$5Gxq74jOWWH2ri z+|tsrLjL8+7mvlrf4zPCcEy}t*lCxvY#(-BgZ9_ zHGm6$X8rvCu+~1tg<6ShaMai|wWz2g{T$hQ`0p^tyuW?u7n6HKj+d}}$(ewD`hgse589vsz8e8exH#ssESsE!CJR(eZ_`_)6b&A}RR+|@?Yw-ot zz>bU>3Fa1}bU}J2rtMUMYbHC2UAH37%EjauFeI-Oad2GA0a%6pXi)z2aG*8}w5L~Z z-!82uGJ-!S5K%!z*L0$K%Y`fbN6&$K)a{9zw39KCE)3%}j6#;KV#*T>MSh66XaPC7 z58IBo25rb3xEmYGi2QhqlxUV+#mtdd;AyL|O6|cdxh*IR|y&r`_HlUW9giv}f z*x625GbKKY-o!qZT>U0~y%_I?!)g!QB2)prC(M13Wx?DcpEr(V2}dpJ)AtBbaXt&4 zV9Eg$K>NLy;CNt7Ud9mBTuZdj?p-7)dvbO)bfcUQwUdC4TGiZoeG-vMk+>-0=xj~! zGhc!G6xoe|g%6xO6u6m|FJIn=M#@V-p5aIZmw$nmyd-Lb+uN<^ak~J#pwH|0mfLrp zHwa@xfO?nX{86t-*v}cLiV_o3rT2uQ;}pmhgW*JQC2{ihsl-{G_1tt>jT%u2xd`Qn z6zuUTaEHUM^IPPP4>aRzM7;eiIE^ttTnH>`o+3E$+71-!`rpZyJOnug$<+jO>)VI? zS}t0eQtIynfJ5$-jCQN%b0iKh5}ANGC`w6-@`YLY3ViwcxluQHrMYiAFzs2zMSHMj zH%#tH3dSqzSf1Ucv{8tWh2NSiear)9XAF~uH&d4zayfN=bxQTu8I9on}q;ktk_ z;DyUL7HlB>Q%7aV90!<)Drm-IG{2o*TXVHKJ79V~a;Zd5Tbz>O0!4fRL&rsL=cAev zF+`&QnKju(uwQFHw-1Hf|0;}Jab3H$DU3-O`hEm(r>mmYfQx)i4jY*i)eMhD4GNEi zRTy}>EggSQ@6=DsQoIqWIe6&MOAIZA!o9$kg@5+5EX!X??!>D}Yz;^NAUToVoE3p& z1^p=;35BQM*48-P#$nUn(t3Y)4I1(!vwQ#jC@K=A6PHX@z3=j<7D3HVU_0cGPFyR% zFepch%vWxO$g7{f>W+pQk@jqCx@o-M(sI2#&Ld}SwhWj!J z#K)u$kILOsOCs6|lNBgR{PSjRS#VA$uO5ME5xfuc^Vfh^i#%oeK4o!2 zAp+7Po?i@s4PtfgxLjsTp{$JSag(vIAV3o=C#LZv)@e}$- zNV7akr3ATRq(wY%J<<4?qr`*o1S?ik6+#3j%#5MX=Yd%az%O9lDp+S{_?(XvAP(opdgAJ2i=Tl~k?JISKYJEIY&`ID#$`?cQx-cyPx`$Fx+~nS~ zcubfvRCLY&dPm|9V%a@up-Po;_qz}Mq(Qbo4?!z-XWc{p;K>K=BZ>xZ_p{N$4pS>l z#c+$`*@8|*=VyOm32SNY2;S^%?s>Js4I-SAa^ZcBP3r4H%QJ>dGT8kXw%Klxe z*hIg%$(wriuOV@u-y2~WdY6_+i;y}y%~gh4aKgnn;PU0LE!L-wuO+>8X#E?(#Z_p{8Mtx2%1M|-eAk0i;Gi(f)W}N3KT5|04Ojcz&t@^j{IApWy|L*HVppu8Gbe0NNjexuq46QEr>CO!)Jiv2|zK&G`;f zO1rmSay)T@2M2#ySso}x73Pv2{TDOZM>ewwpWKL410Bn9lqHSm$Mg=9CYccxs0_HlTPtltl-(mL>DS8kIl&dMcYOmfyTeouS3u|0^`MT?Q1@3M|xow+tAlihH5l_3_eo)^)vjFK& z`_^@v1Fj{4t%sg$_)rmoAPQh0;ek!oysnZk9=!@m-R+c;pzM*HOH)9@krz*EP8?@TBtKWI7>`8oj4J|HM4Vzy|Z z+A{a*&^Yg)Vh!HPPvGhh?}4y<`cCvh zwz^fdA_Q~aVgoG;>y&Eu~BznBwu9)0~<|x=e9gpIY zbwnkRDxf)~2wNj6vWJla(PJ%>KSY>j*FgPBL1}&cJ5-&>5+u_E3{vz6vk9u6^U9=k zQ{pySiJ?6pAKTNcAaz5JggPg6lsAgYy~2MXOLpCojZd*3WAA z{=_cf$g?dz>A-`qbqU&t@sk`B*3~axs!2pg*eL7iK2{M9NyHmPjX~)p zhhoDAz7X&1!+0ToqK_)=g07T*g=E^u0YEdD86vYn*jyMVBRs+2U_yQ*`Te`0j|a{~ ze_hcz`jfi$E#0crgc~Km%h)lR1)C@VbX0&bV*17?b1f!z>$$1NTm&%vgli(6FPE1U zZA5ziiqQ;uTu;Hl45(KLL89YQBx*0bE1{sG8#>B|t5+B-!vjNzClQdiyhG z{a1TGLtVRZ<3^7Q95Gr~A+bcT0wg~rHSNzf4oHZL*KsjDUtE~GDXd8A^M=CE!g%BL z{ldccncidv<17_!S;VJgP{YpP_~hg!IJSlQ(btGv#wB~g zrzZm-KrO$2hDW3fVR#Q*svUNm<2t}=aKl>b*`;#J>W8}!`0IB2Y%*cM-9uIV zt#PkMBdj>+*B2Mw)vw% zr~7%1QXP$yiinpHiGXob)TPDanFGQkhizA>&obDk$G5b!EG|}-mp=+}fuUio=A=^P z28HjdI(nWxd}xOE%4li^*8eI8p7OA{c^%j*H5-$vVGsvzna;4lF0rh393=Cymo_f6O@~?N(rG@+1pw!%6yf=+MVl z`S(BzFzoA4W&#dw31J~Zyv4I`m8}d=6Co(b*P+$ z_*KrQAOhba{h0x>E>0+|w{ybK%wDPDyOn+Lm!b>kJZP5>=nu8shB-p^5!g(f;BYnu zGEoxB3?XfbCxO>PR_lx{h)pvQV?7Un)w=!FOXTF}BwfdpIE8TJr5Z9f0wCg-oJvnm zCc(6F`PW(Gi4A!{Tuz9Bc;XRH=m0wETKG`h#R+GybEhbw&#ok0yF@$V&)he3!Ehg$PURG zX%xsA$^Z43%`8h?V7O#({vE}57`p|RY3jP*IK6!|*Yd{>cRz^~oQcmWsrw_FwHO&UCT;X*7)E8%faN5rkj*RO&oQGFl&Y1J6~ z*{b|`xN+Zm7*IOOECeTv#Kx8UpoF*W^+9!Pl5Vf=%>yg60SU0b_K)XVXIn`J2L%x_ zjpCk4ZRxplV-)Bp5Rqcs#fwB3y8P^8OBV?8e4^=4ipjR)r{KsZt%$UFN}IA-3% z?+Ww{_%y0JVCx7G-dj+a=3X9B6M+_fj@yI2QgEsoGm~}W(AATI^b4zkfK@%{GGKe} zfMxZrgiY!=g=VYXMG*)p@fq@kNl3_qW`4Q!%3^;&)ecC6$IwzW3IXf0eV1X-5*U)W z%R(MPTmXN~p*Y82XT?uC#SszhzHXItXTYsCx5y?wJzh0kxAeSyB&vCQ#AdMB4|jnA z1)B(`7*7nF&-QoTn!tid?UN^>^Wx$Ga=7ASs7smp9X zP~I!9x&a3^P8v98c$Z~-+*?EAAyE=a9T>$m5G4EDa%eWP!YW414)v^4Fs1PEiG4T( zavttdlQE)jb^}mIPQuj$eYVzXa`(B8O{-R|A^@HvTyp|oEnsPH&x5QNl)5XKnX&_M zny?K^(eRpuc-%pl1En|UqS0+mI})f`@~48V_#Ptko@Dhmf%qItuu-VSF{w0=gyVdG z2DkA?NnhirHrO61H_{Ne>FP=Xk``ed3C&)rU$k>2T8SP5K$)U-gbQdjsI7&C3y@@r zCdysObIm?fD}cZP;U;PTN#jN5eUk_xo_v9({QgSR`BlR{2Cb z3bW6hD~rhpaAxq;8^s2DNJinX&@%rxf^J|O2%AZib9tF~+fmwLh60QcUT>CWNMk`b za3`d!z?KGoQ%6|%^|^D+qv`1A04+U{oGy;s#n|Q<5RpzfuO1Kb4 zC)-5-V88W(tFW5~AR~m=1g=$6J5pP?&GuXaDV$;T!vzHuK!g0wy1lB2LAfq_TncR4 zdV6_G?NK?2NBJk&H)ex;4UCF4fE5xQH(rD;hhTOe-H>BI6AUaAVU8hAdORYz34b2s z&%YSyM8WN1sRN?s=QifT9z56SJImu*1f4#(SPIsRYJ>O%MnuTXcA^GjZUzqt>VF!_ zqsLJR6Nga?({@9S^@_bXvJhNF);L6<*n~Q)ws(jHjDz*TgtN)tok;wjktknnGTDKj zbw++Gsfv?07#X$M=FNn%ZJIP9kNJQ@=Yr}!E?7<;!#Hu{EW6v<26%*LuSXn?IS-)X-HW4K2K*_bHHch475Qyq z$LR7T#n^4wpYdb!>%`dDuQ%>>_$-c-K|}!V-MyW;+qqw@cNJO10}98<2+bzYg0UtL zw;;mbJ*fyAptcXbcz}}f7hb?P08{L`wE{3B7npUr>O*N8*Wu*Y)%NJzi7Qy*DaUKOC>DYY0t$ zLgT?Cf!YWlBHWvrp90IsbiZMJr2q0g4waR4Mt?tv<)MRZl|G^4eOV<|SGVZjuzt`3 zwuVNM&%EgI;X)5>g->Ni?~Qp*8}2}6A1Ph!UJRmH1S1d%KnASK!4YI^=871f+YrjP z$w1|==eWr|YEEvbhn2qKWV4qzz7K+EEElonyC{Z6(dOH)UlLB~Su>XXk7-~QJ~{i%RQIFMC`b9PU!*83zR2UhMTD2|`{k&FcJBXU zsz2QQtC?)gWV{a%uufN11oPc}P(CtuO4DVe+56P4Mf`%15vLB^(K>xojaOms-Gz_L z3e~ppn;9A^oxW$Tx;3X|$+PvB%&)1Z%9%eq_q_3v+$;WP9m|W<1PthN4!_{!GCWG> z%4;@0y33E1GCE$@@6P(1R#8){G#*;9|H8iXk$2k1!&8dWTSv7i)kB@z7ky6CE6b-2 zONMZ7OX995E|YYPE(`Nyecid7N9d-gf5H*ox?cZ}0%34e{3EA$U+J#tK0D)*wwRsA z(nhAzhSPV@IQg0Xj!K%hufq2)E<0F+|~KbuiyB=7PS&tcK>?@{`Mn57A)nJ?0D;vt$RxE zR7qr&?fLXO_$te{)77}7Siy5oZX0!4D7GxD;Hdb;C4zWkf_v1XnAr!DbWD>hMix)1l$By@uNcVrz1_@jVfJJgfQrE5fCZmNbdJF=V^HCHaVl zLGhM_q$8ZUvB#&F@tgC7f=v5F-y99uQa`;dhWm?LZ)o`^(ZQ{g-gr-fQqF1W_@Ss_ zVT+t+I>Yi=C0phc7vJ<`WuDS%L@Ad$W)HCijF_KuiCXslslAdAI>Pvr5AN*b@0rx; zUFYTE>Kk6R*1zB20djm4c@Us$z==vrPY~bU5)Do$Fmsp|fFZ7iUJ*t{H5)vy#(6f4 zH1y6bE7tLUL5&2vIuqw0vOsHZjH1RZ?^1gdsf;&n+=yl|MoQ=7eYJWSnzg&aTU`@} zKV8pCs@iU2V`6N4jEnRntjoyUSem&GK~^1EagTf zky?;69~WuamBP(&_epW*Oq)fT=sSGn5aj& zc4kr;QOT+?6a07nA-oXFF3ajh*vJC%<-!XwnIP}^>(BrFwa(BBe>q}Gr$LPr0IR7% z;ESn)m?tfI(-SCN9zj^VzilLxNSKtTzbOYNq{H8cd9gJ_4givcYaba}Nf$NF9IG3U zmL|efvjOUulm3T+RCs~#+=PM>$7CP;te1y@-1Sqq3cBFTlCj%i#`vg7N#QHeRP&rc zWJ!sT9;pM>7|kPHC75U=q6jL1`gMOv?EqRO#EmTBbTryh+;MkFW0FMhP9Ho42Vc!k zuF+)0!Cz{BYg+1>v`2gCC`Kj$rVQIMGTxpXCPENJY^=Bh|bK zMs?2csXetJTdQf+#Z80~$3!K}ME&xYQNqGzo=%_0GF@>5HF-tbJJJv-{!#9aE9=+O zB-2;JuGaQ}??IFi-zJW{Dp~=2y2oQ%06;CUP-5T`)ht#8RNEO8?VB|iD8bck1{!BK z7{d?1KIlVs;2^mI>V~TDt?hQ*R)Xz_Fh7X1)3-*r2}+?QL@bC?sRe4-@9<>K^5p3KM;-%Hn~%R#eJ&YX5qB+6&I#Ed?mk!>ue4C_7w78?L;Eh^ajQ zq&+%1z2Kz7ULpf?X(>QR5F2{$T=^0mu|OykC#^d{mIe#x1nP#cEQ>?K5r`$S7oi_v zMB#xhzV69^xq8CfLP`nK6Rp#q#Ub2hfsFNga`c81e z1pC3l$ko-AF*7^R+af+*>A`ZG3u~MFzr0!qm8f;{=DR4>ia;IiEGWd9CQhePaJAk8 z66a!=T)~?xdmt3~X*_zNH1LIejT)m1RSA=~S2d}iVJ0;4cBI_H1nHm=3>E;;6`kXI zAR7ySR|NU_y3@ZX?-tj=DZF95k%4uqDe!`-QFI#}c%B%$&X4i*vJgt~ z9WZ0q+S%E;b>Gcy+EE8T2h?dE1MvGW>Vxg09I_}Td?cHglOy4JyW!Wqd!1)}*;OJI z0ncT)1Vl`_)HG9SyyvOb<)@8cPDx?SyG-CSrqG^ewepKo+dDc0K*nd*NlnpoS*5KF z(^DhUKLhnJemO2i>~BDuCG$J^&;e&>XKko!vHi=QZ*G8VJgKqAf?@u?cTM=z1c9j1 z)A1^tIwY7-JL!<6Fc^fp-gJSsSZ>n=e!TLf;PMZQ4c%k%txzRD&cx8LMpy<9 zLK2$@AI-Ok+qZ2y;(qr>8moL6A`I9*sG#I~F#zuNaHQ;uMT|kE&YdqF3wTZ%$-EE% znn%GF!NI{~hLE?GGl3r~qdA8FnH3;Jti<;W!kKwyNmWgX~# zZu*DG=39PCw(N&X{gPZr(Mn)>>WtD36V?^JNo&;A8=+mx9P90$>?I#cws{YEUZcm< zdyk*vQ@Ho~s)^>Rw~3InDxn3}xv}Rtx-T+wgFwk8yiLN9lbFjV`B}WbGBj8lOF;#@ zR(Vk~kf8)q$-t~8#>>vmCLyfX^3>a|*j%t3ssN@KLzh)i)aE{yLr->;po=>6 z?YE~=$)-l6d~-S%A!KUA@RIH1iC8$QD1%i1BFX4`l$Vxj?nXnA@&asDC8&LK+1z^e z!Ph?U-B~a6O!$5w9M+$(sr&IO6?dbdCVNdroauhd52!a2Lcm6VZC#pEaCohUb-xhs zhd`F{?s5%0yUvkdf3*6|+*b-(3UQ>rpyB0|-wLl#)6me+2{g=lBGwOY-qovD*Mr-n z1&Z6In#2OFq)iIXZ$bGk4t&*T)1}q&9=%>z#Ob4G#fwFJT{>k$wo_kuAoD6;=yG_J z_XZkSAx;Di`>uDKOf22s?aA+pma*Q0Q94YuVzj1974Cofk@dL`^p-|&GlbyyJuLnj z=T#)xc(ur6x@VBgE4sQLUbmG zpJZucvxqt}%u{ioJpYmzi<2qx&45Gb<}~iGsZWEn#{z`!H`X2NOoZSY^zLkx*q^Q>cn5Rz(Hr=WxitY^hj`&Gjif zffQp|)uY+ZKG@#fyME$R)s$pAlQ__wV0t`Giq`?sXC74LQom!ZR`=bB|e&97-s~!Wi6m z%uKfQ&^h?=1Bn-QWtLsm4Gpr#oYlFR4gEy|enN=;%BR$J=cwGPRzo2-L0W;%AQ=LQ z*UaPLW5>N<1#65AIDKJ1`nxF&myfoLbv5ZO();zuf)2ChI5+iRllO@5X_t8KUDuFV zQ7fVKvfodwORWf}C4!b9_D=L3Nwu;223(a}_cA6Ry895}24pB+WYdGZT@bD@$w1qU zuwcZ|>cvzoh-|ot9wD;CNIQM%drok#J))wBTCRnP+#>A;0n1T7Yr?rr_OHM}7_P*@ zvhnRsceS|jMYb%0cb2u6>3V2en)7(%j+gx}KQ)S1nJvle}R?LWURRwfSRS7a~z z2DzP%xbTaLE{>}U+JWA?(}NVw#$hw8CvsY$-2sm1+&wm`H$7UOdV>$`XR&Dtl4!jp z0w-br)R+Dw*ln-%xQ)#T1x~3E#5x?-3w6=Bd}bkS-@g6MzF%Zp4*F~!ik}1B=q^Nt zf*~#l!5A?PyP`aOd`3lHzr{#Pe=zx+*S_w<9~+fUKq|V}0}Wvta7H-6_kB_~932~G z&hOT#&#g|V>X4YO{F8*~G7?ht6=E4-?-B^*g4N5WzJOm;7p49!W%#&24k6KASvy5j6bSfhwu|6!y9mSjTCdX+19x zD>=cd0Bzys=A z3Cu1AqogJrU|6uvta1g;)nnP1GCs$YkgbAsL*hjOO(aW&-)Ag>0mV>(Nihak3Fh!n z?Ca+G!(K zj1B12kGdnUw_Gd;eOg-|mTkRZ4Hl0vj!2Q2m^kY6g{K6RkTxV>h_oZSBmNLDp83P_ zpZ(!rZI*2{`+)^{mxJ}gciw;ff9ZeviT}(i*&64Y7nZlFq&2_On#O$trP&knrBFt3 z0*9w(p6~%`aci6>i^Tpkt0Nq;oE%vW;(igE7d0G_9+>Rt@RQGecm@jD-MWop-O~Kb!o%LEY6`_6wxY4qw9}(=V zau}~gym{HasQ1*KV7t3^a>!)iA{wgb58gOiZu>#nXI+q(ahxHt&+!D^&)tu*$eF1s!LfYDdxR78#%;#GzjB)CReB7EIXRV;tvz0x< z$6O(&ii=`$J0>QE95TcN4~g5_CInw(f8dW{8xZ8IrO;-*^DZT8xd%r11ppy-kBn#P z{m!&4a5BcR##v9H>F>;Bb6`K@=9Z8j@@_?F%s_1HNC;ys?w&p>(vX8Sxnd^+dz*ThKokV6eq@5i+|+;aG1i$R=A3XNMDnbL*8(!Kwci! ze;P#rzjGWEu4ilKQ0kWdmHHxoJAq=ZHqyzA+}xGA@NF>#_=Juhjl64mzy~75Tf)Md z)4%FqN7h(w|LFQFNq@}j6AAMFjb)vIqe|8jb_(_?l}5g z(nHk&agWx11>eF6J>Hl^n~R?;BSX+1a)cnuJAqS@jc;6yU^czdM) zpt8?DDwAjvutn1Y3@!t-4BrGyMr${)E6h^(*4-R~ji3|~c9#)uO0{N-s3S!q9t~i? z+h0-n>#0X0dKol_jZ{I@CX3VnlvZ*l$QcJSr6vy;86j$2Mu3NTxCOHt=rSTUyq=;j zuor*|vek(fdnUJO!}M)--1woQPG5fJhLo zivz!6kre?eIjtdo5)+|ItR&VR?^Ani3H-$O+`D;0+}M{=*_Pz`ehAHHC-j8qMYq3mpK&Xt8U-)w;LtD~uDwPq97DWO(t_JVAK=ZGNXGorg zmKZ~^ODGyq77KQ@ciKui3N8}hKCYGvu3ap*qJ;<^1ONQ zDd8(uwU(724F|;q6Z>)ZHk07ILqF3xFHLpd29R78kmv6=UBXsP+lu8E zMj%euiO3%xz_DP)1+0|&!ARBSWehARM2mkTvCIKSvxcRaplzMZfe*u2a52oKTpmE zEY^P=zWjR*w*QmsSW!=r?Sn)h8JKVs{S3?`)KlZ|-2PwuA;`yKrmlqk9XJcG}0E58WL|?$AI!~7q&wLuQ`U`um?`y-e}@Vz7OBshG!7bR#_Up(L!sTo z@UDA{q&g8HJ|Am!gyqoDxst*&pE0H~$w^*)04|lofQVvY_lC>ON{}I_dI%bpB)O@t z?b*sEtR|k$POB$wn+(p`IoY2yYp1_kObeniQm3 bH_b-7%~P9t`Hx4KVU+d8=0 { + toggle.addEventListener("click", function (event) { + console.log(toggle); + const answerElement = toggle.querySelector("[answer]"); + const caretElement = toggle.querySelector("img"); + console.log(answerElement); + if (answerElement.classList.contains("hidden")) { + answerElement.classList.remove("hidden"); + caretElement.classList.add("rotate-90"); + } else { + answerElement.classList.add("hidden"); + caretElement.classList.remove("rotate-90"); + } + }); + }); +}); diff --git a/site/public/index.html b/site/public/index.html new file mode 100644 index 0000000..ae70a85 --- /dev/null +++ b/site/public/index.html @@ -0,0 +1,387 @@ + + + + + + + Swarm + + + + + + +

+ + + +
+
+

+ Make better decisions. + + Together. + +

+

+ Swarm helps your team make better decisions. It uses the ideas of liquid democracy to + moderate a transparent, fair and informed decision process. Swarm scales from a single user + up to thousands. +

+

+ Disclaimer: Swarm is still in pre-alpha. Be aware that data entered through swarm may be + lost at any time. +

+ +
+ +
+ + + +
swarm
+
swarm
+
swarm
+ + + +
+
+ + +
+
+

How it works

+
+
+
+
+ 1 +
+

Create a ballot

+

+ Create a new ballot to initiate a decision process. +

+
+
+
+ 2 +
+

Suggest options

+

+ Suggest different courses of actions and let other add their ideas. +

+
+
+
+ 3 +
+

Discuss

+

+ Discuss your ideas and present your arguments. Collect arguments in simple pro/contra lists. +

+
+
+
+ 4 +
+

Vote or delegate

+

+ Make your voice heared. Or delegate your vote to a subject matter expert. +

+
+
+
+ + +
+
+

Features

+
+
+ +
+ +
+

Vote delegation

+

+ Delegate your vote to a trusted representant or a subject matter expert. Focus your + energy on what matters to you and where you feel competent. But don't waste your voting power. +

+
+
+ +
+ +
+

Real time updates

+

+ See how the vote evolves, in real time. +

+
+
+ +
+ +
+

5 star voting

+

+ Don't get forced to make binary decisions. 5 star voting lets you express your + preference more nuanced. Nothing is ever black and white. +

+
+
+ +
+ +
+

Markdown editing

+

+ Present your ballots and arguments in markdown. Include images, + statistics and links for a precise and open discussion. +

+
+
+ +
+ +
+

Notifications

+

+ Don't miss a new idea. Get notified when a new argument, option or ballot is created. +

+
+
+ + +
+ +
+

Open source

+

+ Swarm is fully open source. From the backend to this website. Rest assured that the + vote counting algorithm is fair and correct and check for yourself. Or host your own + swarm service. +

+
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ Logo +
+ + + + + + + + + + + + + + +
+ © 2022 swarm. All rights reserved +
+
+ + + diff --git a/site/site.nix b/site/site.nix new file mode 100644 index 0000000..f93c096 --- /dev/null +++ b/site/site.nix @@ -0,0 +1,19 @@ +{ pkgs, stdenv, ... }: + +let + nodeDependencies = (pkgs.callPackage ./default.nix {inherit pkgs;}).shell.nodeDependencies; +in + +stdenv.mkDerivation { + name = "swarm-site"; + src = ./.; + buildInputs = [pkgs.nodejs]; + installPhase = '' + mkdir -p $out/dist/ + ln -fs ${nodeDependencies}/lib/node_modules ./node_modules + export PATH="${nodeDependencies}/bin:$PATH" + export NODE_ENV=production + cp -r public/* $out/ + postcss ./src/styles.css -o $out/dist/styles.css + ''; +} diff --git a/site/src/styles.css b/site/src/styles.css new file mode 100644 index 0000000..6f68271 --- /dev/null +++ b/site/src/styles.css @@ -0,0 +1,39 @@ +@import url("https://fonts.googleapis.com/css2?family=Montserrat:wght@200;300;400;500;600;700&family=PT+Serif:wght@400;700&display=swap"); + +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer components { + .sectionSize { + @apply lg:px-48 md:px-12 px-4 py-14 flex flex-col items-center; + } + .secondaryTitle { + @apply font-pt-serif text-3xl bg-left-bottom bg-no-repeat pb-8 px-16 mb-8; + } +} + +.growing-underline { + display: block; + position: relative; + padding: 0.2em 0; + overflow: hidden; +} + +.growing-underline::after { + content: ""; + position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: 0.1em; + background-color: black; + transition: opacity 300ms, transform 300ms; + opacity: 1; + transform: translate3d(-100%, 0, 0); +} + +.growing-underline:hover::after, +.growing-underline:focus::after { + transform: translate3d(0, 0, 0); +} diff --git a/site/tailwind.config.js b/site/tailwind.config.js new file mode 100644 index 0000000..b5eac6b --- /dev/null +++ b/site/tailwind.config.js @@ -0,0 +1,51 @@ +module.exports = { + purge: { + content: ["./public/**/*.html"], + }, + darkMode: false, // or 'media' or 'class' + theme: { + colors: { + secondary: "#F4F2ED", + black: "black", + white: "white", + }, + fontFamily: { + "pt-serif": ["PT Serif", "serif"], + montserrat: ["Montserrat", "sans-serif"], + }, + backgroundSize: { + auto: "auto", + cover: "cover", + contain: "contain", + "100%": "100%", + }, + extend: { + backgroundImage: { + underline1: "url('./assets/Underline1.svg')", + underline2: "url('./assets/Underline2.svg')", + underline3: "url('./assets/Underline3.svg')", + underline4: "url('./assets/Underline4.svg')", + highlight3: "url('./assets/Highlight3.svg')", + }, + keyframes: { + "fade-in-down": { + "0%": { + opacity: "0", + transform: "translateY(-10px)", + }, + "100%": { + opacity: "1", + transform: "translateY(0)", + }, + }, + }, + animation: { + "fade-in-down": "fade-in-down 0.5s ease-out", + }, + }, + }, + variants: { + extend: {}, + }, + plugins: [], +}; diff --git a/src/Auth/Common.hs b/src/Auth/Common.hs new file mode 100644 index 0000000..d7559e7 --- /dev/null +++ b/src/Auth/Common.hs @@ -0,0 +1,74 @@ +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE ScopedTypeVariables #-} + +module Auth.Common where + +import Control.Monad.IO.Class (liftIO) +import Control.Monad.Except +import Crypto.Random.Types +import Crypto.Store.X509 +import Data.Aeson +import qualified Data.ByteString as BS +import qualified Data.ByteString.UTF8 as BS +import qualified Data.ByteString.Lazy as BSL +import Data.PEM +import qualified Data.Text as T +import Data.X509 +import qualified Jose.Jwa as Jose +import qualified Jose.Jwk as Jose +import qualified Jose.Jwt as Jose +import qualified Data.Map as M +import Data.Word8 +import Safe +import Data.IORef +import Network.HTTP.Simple +import Network.HTTP.Types.Status +import Control.Concurrent.Timer +import Control.Concurrent.Suspend + +type Certificates = [(T.Text, SignedExact Certificate)] + +-- | Validate a token given a list of accepted certificates with public RSA keys. +validateToken :: [(T.Text, SignedExact Certificate)] -> BS.ByteString -> IO (Either String Jose.Jws) +validateToken certs token = + runExceptT $ do + let jwks = do + (keyId, cert) <- certs + PubKeyRSA pubKey <- [certPubKey $ getCertificate cert] + pure $ + Jose.RsaPublicJwk + pubKey + (Just (Jose.KeyId keyId)) + (Just Jose.Sig) + (Just $ Jose.Signed Jose.RS256) + jwtContent <- + withExceptT show $ + ExceptT $ liftIO $ Jose.decode jwks (Just $ Jose.JwsEncoding Jose.RS256) token + case jwtContent of + Jose.Jws (jwsHeader, jwsContent) -> return (jwsHeader, jwsContent) + _otherwise -> fail "Token does not contain a JWS." + +startCertificateUpdateThread :: IO (IORef Certificates) +startCertificateUpdateThread = do + ref <- newIORef [] + let fetch = fetchCertificates ref + fetch + t <- newTimer + _t <- repeatedStart t fetch (mDelay 55) + pure ref + +fetchCertificates :: IORef Certificates -> IO () +fetchCertificates ref = do + print "fetching certs" + certs <- + httpJSON + "https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com" + let status = getResponseStatus certs + unless (status == status200) $ + fail $ "Failed to update certificates" <> show status + atomicWriteIORef ref $ + [ (k, cert) + | (k, v) <- M.toList $ getResponseBody certs + -- TODO (drsk) only allow one cert? + , cert <- readSignedObjectFromMemory $ BS.fromString v + ] diff --git a/src/Auth/Google.hs b/src/Auth/Google.hs new file mode 100644 index 0000000..1406804 --- /dev/null +++ b/src/Auth/Google.hs @@ -0,0 +1,72 @@ +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE NamedFieldPuns #-} + +module Auth.Google where + +import Data.Aeson +import Data.Either +import qualified Data.Text as T +import Data.Time.Clock +import GHC.Generics +import Prelude hiding (exp) +import Data.Time.Clock.System + +data GoogleJws = GoogleJws + { name :: Maybe T.Text + , picture :: Maybe T.Text + , iss :: T.Text + , aud :: T.Text + , auth_time :: Integer + , user_id :: T.Text + , sub :: T.Text + , iat :: Integer + , exp :: Integer + , email :: Maybe T.Text + , email_verified :: Maybe Bool + , firebase :: FirebaseData + } deriving Generic + +instance FromJSON GoogleJws + +data FirebaseData = FirebaseData + { identities :: FirebaseIdentities + , sign_in_provider :: T.Text + } deriving Generic + +instance FromJSON FirebaseData + +data FirebaseIdentities = FirebaseIdentities + { googleCom :: Maybe [String] + , firebase_email :: Maybe [T.Text] + } +instance FromJSON FirebaseIdentities where + parseJSON = withObject "FirebaseIdentities" $ \o -> + FirebaseIdentities + <$> o .:? "google.com" + <*> o .:? "email" + +validateJws :: GoogleJws -> UTCTime -> Maybe [String] +validateJws GoogleJws {aud, iss, sub, exp, iat, auth_time} now + | null failedChecks = Nothing + | otherwise = Just failedChecks + where + (failedChecks, _) = partitionEithers checks + check :: String -> Bool -> Either String () + check msg p + | p = Right () + | not p = Left msg + checks = + [ check "wrong aud field" $ aud == "swarm-90059" + , check "wrong iss field" $ + iss == "https://securetoken.google.com/swarm-90059" + , check "sub field is empty" $ not $ T.null sub + , check "exp field in the past" $ timeDiff exp now > 0 + , check "iat field in the future" $ timeDiff iat now <= 0 + , check "auth_time in the future" $ timeDiff auth_time now <= 0 + ] + timeDiff t1 t2 = + diffUTCTime + (systemToUTCTime $ + MkSystemTime {systemSeconds = fromInteger t1, systemNanoseconds = 0}) + t2 diff --git a/src/Firebase/CloudMessaging.hs b/src/Firebase/CloudMessaging.hs new file mode 100644 index 0000000..3f4c854 --- /dev/null +++ b/src/Firebase/CloudMessaging.hs @@ -0,0 +1,145 @@ +{-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE DeriveAnyClass #-} +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE RecordWildCards #-} + +module Firebase.CloudMessaging where + +import Control.Concurrent.Suspend +import Control.Concurrent.Timer +import Crypto.PubKey.RSA.Types +import qualified Data.Aeson as Aeson +import Data.ByteString as BS +import Data.ByteString.Lazy as BSL +import Data.HashMap.Strict as HMS +import Data.Either +import Data.IORef +import qualified Data.Text as T +import Data.X509 +import Data.X509.Memory (readKeyFileFromMemory) +import GHC.Generics +import Jose.Jwa as Jose +import Jose.Jws as Jose +import Jose.Jwt as Jose +import Network.HTTP.Simple +import qualified Data.Text.Encoding as T +import Data.Time.Clock +import Data.Time.Clock.System + +data ServiceAccount = ServiceAccount { + project_id :: T.Text + , private_key_id :: T.Text + , private_key :: T.Text + , client_email :: T.Text + , client_id :: T.Text + , auth_uri :: T.Text + , token_uri :: T.Text + , auth_provider_x509_cert_url :: T.Text + , client_x509_cert_url :: T.Text +} deriving (Generic, Aeson.FromJSON) + +authRequestToken :: FilePath -> IO Jose.Jwt +authRequestToken fp = do + bs <- BSL.readFile fp + case Aeson.eitherDecode bs of + Left err -> + fail $ "Failed to parse Google service account .json file: " <> show err + Right ServiceAccount {..} -> do + case readKeyFileFromMemory $ T.encodeUtf8 private_key of + [PrivKeyRSA privateKey] -> do + now <- getCurrentTime + let now' = fromIntegral $ systemSeconds $ utcToSystemTime now + jwtOrErr <- + Jose.rsaEncode RS256 privateKey $ + BSL.toStrict $ + Aeson.encode $ + GoogleAuthReq + { iss = client_email + , scope = "https://www.googleapis.com/auth/firebase.messaging" + , aud = token_uri + , exp = now' + 60 * 60 + , iat = now' + } + case jwtOrErr of + Left err -> fail $ show err + Right jwt -> pure jwt + _other -> + fail + "Failed to parse private key from Google service account .json file." + +type Token = T.Text + +startServiceAuthUpdateThread :: FilePath -> IO (IORef Token) +startServiceAuthUpdateThread serviceAccountJsonFp = do + ref <- newIORef T.empty + let requestTok = requestToken serviceAccountJsonFp ref + requestTok + t <- newTimer + _t <- repeatedStart t requestTok (mDelay 55) + pure ref + +requestToken :: FilePath -> IORef Token -> IO () +requestToken serviceAccountJsonFp ref = do + print "requesting token" + tokenJwt <- authRequestToken serviceAccountJsonFp + token <- authRequestToken serviceAccountJsonFp + req <- parseRequest "POST https://oauth2.googleapis.com/token" + let req1 = + setRequestBodyJSON + GoogleTokenReq + { grant_type = "urn:ietf:params:oauth:grant-type:jwt-bearer" + , assertion = token + } + req + res <- httpJSON req1 + case getResponseBody res of + Aeson.Object m -> + case HMS.lookup "access_token" m of + Nothing -> responseFail res + Just (Aeson.String newToken) -> do + print newToken + writeIORef ref newToken + Just _somethingElse -> responseFail res + _otherwise -> responseFail res + where + responseFail res = + fail $ "Access token request failed. Received " <> show res + +data GoogleAuthReq = + GoogleAuthReq + { iss :: T.Text + , scope :: T.Text + , aud :: T.Text + , exp :: Integer + , iat :: Integer + } + deriving (Generic, Aeson.ToJSON) + +data GoogleTokenReq = + GoogleTokenReq + { grant_type :: T.Text + , assertion :: Jose.Jwt + } + deriving (Generic, Aeson.ToJSON) + +data FcmMessage = + FcmMessage + { validate_only :: Bool + , message :: Message + } + deriving (Generic, Aeson.ToJSON) + +data Message = + Message + { name :: T.Text + , notification :: Notification + , token :: T.Text + } + deriving (Generic, Aeson.ToJSON) + +data Notification = + Notification + { title :: T.Text + , body :: T.Text + } + deriving (Generic, Aeson.ToJSON) diff --git a/src/Main.hs b/src/Main.hs new file mode 100644 index 0000000..cbdc602 --- /dev/null +++ b/src/Main.hs @@ -0,0 +1,1660 @@ +{-# LANGUAGE LambdaCase #-} +{-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE TemplateHaskell #-} +{-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE ExplicitForAll #-} +{-# LANGUAGE DeriveAnyClass #-} +{-# LANGUAGE FlexibleInstances #-} +{-# LANGUAGE MultiWayIf #-} +{-# LANGUAGE NamedFieldPuns #-} +{-# LANGUAGE NumericUnderscores #-} +{-# LANGUAGE ScopedTypeVariables #-} +{-# LANGUAGE StandaloneDeriving #-} +{-# LANGUAGE RecordWildCards #-} +{-# LANGUAGE OverloadedStrings #-} + +module Main where + +import Auth.Common +import Auth.Google +import Control.Exception (bracket) +import Control.Monad.Extra +import Control.Monad.IO.Class (liftIO) +import Control.Monad.Reader.Class +import Control.Monad.State.Class +import Crypto.Hash +import Data.Acid +import Data.Aeson +import qualified Data.Binary as B +import Data.Binary.Instances.Time +import qualified Data.ByteString as BS +import qualified Data.ByteString.Lazy as BSL +import qualified Data.CaseInsensitive as CI +import Data.IORef +import Data.List.Extra +import qualified Data.Map as M +import Data.Maybe +import qualified Data.Morpheus as M +import Data.Morpheus.Subscriptions +import Data.Morpheus.Types + ( GQLType(..) + , ResolverM + , ResolverQ + , ResolverS + , RootResolver(..) + , SubscriptionField + , Undefined(..) + , lift + , publish + , subscribe + ) +import Data.Ord +import Data.SafeCopy +import qualified Data.Set as S +import qualified Data.Text as T +import qualified Data.Text.Encoding as T +import Data.Text.Encoding +import Data.Time.Clock +import Data.X509 +import qualified Firebase.CloudMessaging as FCM +import GHC.Generics +import qualified Network.HTTP.Simple as Http +import Network.HTTP.Types.Status +import Network.WebSockets (ServerApp) +import Network.WebSockets.Snap +import Snap.Core +import qualified Snap.Test as Snap (evalHandler, get) +import Snap.Http.Server +import qualified Snap.Util.CORS as CORS +import qualified System.Console.GetOpt as Opt +import Snap.Internal.Core + +-- Firebase +----------- + +firebaseProjectName :: String +firebaseProjectName = "swarm-90059" + +-- Utils +-------- + +errorOnLeft :: String -> Either String a -> IO a +errorOnLeft msg = + \case + Left err -> error $ msg <> ": " <> err + Right x -> pure x + +interleave :: [a] -> [a] -> [a] +interleave (e:es) (o:os) = e : o : interleave es os +interleave es [] = es +interleave [] os = os + +-- TODO replace with Down +flipOrder :: Ordering -> Ordering +flipOrder EQ = EQ +flipOrder LT = GT +flipOrder GT = LT + +---------------------------------------------------------------------------------------------------- +-- Data model +class ReadAccess a where + canRead :: UserId -> a -> Bool + +class WriteAccess a where + canWrite :: UserId -> a -> Bool + + +data State = State + { stSwarms :: M.Map SwarmRef Swarm + , stUserSwarms :: M.Map UserId [WithRef T.Text] + , stNextRefCounter :: Int + , stInvites :: M.Map InviteToken SwarmRef + , stFish :: M.Map UserId Fish + } + +publicRef :: SwarmRef +publicRef = "public" + +publicSwarmName :: WithRef T.Text +publicSwarmName = WithRef publicRef "public" + +emptyState :: State +emptyState = + State + { stSwarms = M.singleton publicRef $ emptySwarm "god" "public" + , stUserSwarms = M.empty + , stNextRefCounter = 0 + , stInvites = M.empty + , stFish = M.empty + } +data Swarm = Swarm + { sBallots :: M.Map BallotId Ballot + , sFish :: S.Set UserId + , sCreator :: UserId + , sName :: T.Text + } deriving (Generic) + +instance B.Binary Swarm + +emptySwarm :: UserId -> T.Text -> Swarm +emptySwarm uId n = + Swarm {sBallots = M.empty, sFish = S.empty, sCreator = uId, sName = n} + +newSwarm :: UserId -> T.Text -> Swarm +newSwarm uId n = + Swarm {sBallots = M.empty, sFish = S.singleton uId, sCreator = uId, sName = n} + +data WithId a = WithId + { wiId :: T.Text + , wiValue :: a + } deriving (Show, Generic, GQLType) +instance ReadAccess a => ReadAccess (WithId a) where + canRead uId x = canRead uId (wiValue x) + +data WithRef a = WithRef + { wrRef :: T.Text + , wrValue :: a + } deriving (Generic, Ord, Eq, GQLType) + +instance ReadAccess a => ReadAccess (WithRef a) where + canRead uId x = canRead uId (wrValue x) + +data Fish = Fish + { fUserId :: UserId + , fName :: T.Text + , fProfile :: T.Text + , fFcmToken :: Maybe T.Text + } deriving (Generic, Eq, Ord, GQLType) +instance B.Binary Fish + +newtype Invite = Invite + { ivToken :: InviteToken + } deriving (Eq, Ord, Generic) +instance B.Binary Invite + +newtype UpVote = UpVote + { uvUserId :: UserId + } deriving (Generic, GQLType, Show, Eq, Ord) +instance B.Binary UpVote + +-- | Sort by descending upvotes +sortByUpVotes :: [WithId Argument] -> [WithId Argument] +sortByUpVotes = sortOn (Down . S.size . aUpVotes . wiValue) + +data Ballot = Ballot + { bTitle :: T.Text + , bDescription :: T.Text + , bCreator :: UserId + , bCreationDate :: T.Text + , bDelegations :: S.Set Delegation + , bOptions :: M.Map OptionId Option + } deriving (Show, Eq, Generic, GQLType) +instance B.Binary Ballot +instance ReadAccess Ballot where + canRead _uId Ballot {} = True + +data Option = Option + { oTitle :: T.Text + , oDescription :: T.Text + , oUserId :: T.Text + , oArguments :: M.Map ArgumentId Argument + , oVotes :: M.Map UserId Vote + } deriving (Show, Eq, Generic, GQLType) +instance B.Binary Option +instance ReadAccess Option where + canRead _uId Option {} = True + +data NrOfStars + = ZeroStars + | OneStar + | TwoStars + | ThreeStars + | FourStars + | FiveStars + deriving (Show, Eq, Ord, Generic, GQLType, Enum) +instance B.Binary NrOfStars + +data Vote = Vote + { vUserId :: UserId + , vStars :: NrOfStars + } deriving (Show, Eq, Ord, Generic, GQLType) +instance B.Binary Vote +instance ReadAccess Vote where + canRead uId Vote {..} = vUserId == uId + +data Delegation = Delegation + { dUserId :: UserId + , dDelegatee :: UserId + } deriving (Show, Eq, Ord, Generic, GQLType) +instance B.Binary Delegation +instance ReadAccess Delegation where + canRead uId Delegation {..} = dUserId == uId || dDelegatee == uId + +data Argument = Argument + { aUserId :: UserId + , aProContra :: ProContra + , aUpVotes :: S.Set UpVote + , aText :: T.Text + } deriving (Show, Eq, Generic, GQLType) +instance B.Binary Argument +instance ReadAccess Argument where + canRead _uId Argument {} = True + +data ProContra = Pro | Contra deriving (Show, Eq, Generic, GQLType) +instance B.Binary ProContra + +data IProContra = IPro | IContra deriving (Show, Eq, Generic, GQLType) +instance B.Binary IProContra + +data BallotResult = BallotResult + { brVotes :: BallotResultMap + , brTurnout :: Int + , brOptions :: [WithId Option] + } deriving (Generic, GQLType) +emptyResult = BallotResult M.empty 0 [] + +type ArgumentId = T.Text +type BallotId = T.Text +type BallotResultMap = M.Map OptionId Int +type DelegationId = T.Text +type OptionId = T.Text +type SwarmRef = T.Text +type UpVoteId = T.Text +type UserId = T.Text +type UserName = T.Text +type VoteId = T.Text +type InviteToken = T.Text + +mkId :: B.Binary a => a -> T.Text +mkId x = T.pack $ show (hash $ BSL.toStrict $ B.encode x :: Digest SHA256) + +mkRef :: B.Binary a => a -> Update State T.Text +mkRef x = do + s <- get + put $ s {stNextRefCounter = stNextRefCounter s + 1} + pure $ + T.pack $ + show + (hash $ BSL.toStrict (B.encode x <> B.encode (stNextRefCounter s)) :: Digest SHA256) + +updateSwarm :: SwarmRef -> (Swarm -> Swarm) -> Update State () +updateSwarm sRef f = + modify $ \st -> st {stSwarms = M.adjust f sRef (stSwarms st)} + +updateBallot :: SwarmRef -> BallotId -> (Ballot -> Ballot) -> Update State () +updateBallot sRef bId f = + updateSwarm sRef $ \s -> s {sBallots = M.adjust f bId (sBallots s)} + +updateOption :: SwarmRef -> BallotId -> OptionId -> (Option -> Option) -> Update State () +updateOption sRef bId oId f = + updateBallot sRef bId $ \b -> b {bOptions = M.adjust f oId (bOptions b)} + +updateArgument :: SwarmRef -> BallotId -> OptionId -> ArgumentId -> (Argument -> Argument) -> Update State () +updateArgument sRef bId oId aId f = updateOption sRef bId oId $ \o -> o {oArguments = M.adjust f aId $ oArguments o} + +askSwarm :: SwarmRef -> (Swarm -> a) -> Query State a +askSwarm sRef p = do + ss <- asks stSwarms + let s = fromMaybe (error "unknow swarm ref: ") $ M.lookup sRef ss + pure $ p s + +askBallot :: String -> SwarmRef -> BallotId -> UserId -> Query State (Maybe Ballot) +askBallot err sRef bId uId = do + askSwarm + sRef + (fmap (projectBallot uId) . + M.lookup bId . sBallots) + +askBallot0 :: SwarmRef -> BallotId -> (Ballot -> a) -> Query State (Maybe a) +askBallot0 sRef bId p = askSwarm sRef (fmap p . M.lookup bId . sBallots) + +data CreateBallotArgs = CreateBallotArgs + { cbaTitle :: T.Text + , cbaDescription :: T.Text + } deriving (Generic, GQLType) + +createBallot :: UserId -> SwarmRef -> UTCTime -> CreateBallotArgs -> Update State (WithId Ballot) +createBallot uId sRef now CreateBallotArgs {..} = do + updateSwarm sRef $ \s -> s {sBallots = M.insert bId b (sBallots s)} + pure $ WithId {wiId = bId, wiValue = b} + where + b = + Ballot { bTitle = cbaTitle, bDescription = cbaDescription + , bCreator = uId + , bCreationDate = T.pack $ show now + , bDelegations = S.empty + , bOptions = M.empty} + bId = mkId b + +newtype DeleteBallotArgs = DeleteBallotArgs { + dbaBallotId :: BallotId +} deriving (Generic, GQLType) + +deleteBallot :: UserId -> SwarmRef -> DeleteBallotArgs -> Update State Bool +deleteBallot uId sRef DeleteBallotArgs {dbaBallotId} = do + bs <- liftQuery $ askSwarm sRef sBallots + let ballotM = M.lookup dbaBallotId bs + if fmap bCreator ballotM == Just uId && fmap totalVotes ballotM == Just 0 + then do + updateSwarm sRef $ \s -> s {sBallots = M.delete dbaBallotId $ sBallots s} + pure True + else pure False + where + totalVotes Ballot {bOptions} = + sum + [ fromEnum vStars + | Option {oVotes} <- M.elems bOptions + , Vote {vStars} <- M.elems oVotes + ] + +data CreateVoteArgs = CreateVoteArgs + { cvaBallotId :: BallotId + , cvaOptionId :: OptionId + , cvaStars :: NrOfStars + } deriving (Generic, GQLType) + +createVote :: UserId -> SwarmRef -> CreateVoteArgs -> Update State Bool +createVote uId sRef CreateVoteArgs {..} = do + updateBallot sRef cvaBallotId $ + \b -> b {bDelegations = S.filter (\d -> dUserId d /= uId) $ bDelegations b} + updateOption sRef cvaBallotId cvaOptionId $ + \o -> o {oVotes = M.insert uId v $ oVotes o} + pure True + where + v = + Vote + { vUserId = uId + , vStars = cvaStars + } + +data CreateDelegationArgs = CreateDelegationArgs + { dmaDelegateeId :: UserId + , dmaBallotId :: BallotId + } deriving (Generic, GQLType) + +createDelegation :: UserId -> SwarmRef -> CreateDelegationArgs -> Update State Bool +createDelegation uId sRef CreateDelegationArgs {..} = do + updateBallot sRef dmaBallotId $ + \b -> b { bDelegations = S.insert d $ bDelegations b + , bOptions = M.map (\o -> o {oVotes = M.delete uId $ oVotes o}) $ bOptions b + } + pure True + where + d = Delegation {dUserId = uId, dDelegatee = dmaDelegateeId} + +data CreateOptionArgs = CreateOptionArgs + { coaTitle :: T.Text + , coaDescription :: T.Text + , coaBallotId :: BallotId + } deriving (Generic, GQLType) + +createOption :: UserId -> SwarmRef -> CreateOptionArgs -> Update State OptionId +createOption uId sRef CreateOptionArgs {..} = do + updateBallot sRef coaBallotId $ \b -> b {bOptions = M.insert oId o $ bOptions b} + pure oId + where + o = + Option + { oTitle = coaTitle + , oDescription = coaDescription + , oUserId = uId + , oArguments = M.empty + , oVotes = M.empty + } + oId = mkId o + +data DeleteOptionArgs = + DeleteOptionArgs + { doaBallotId :: BallotId + , doaOptionId :: OptionId + } + deriving (Generic, GQLType, Show) + +deleteOption :: UserId -> SwarmRef -> DeleteOptionArgs -> Update State Bool +deleteOption uId sRef args@DeleteOptionArgs {doaBallotId, doaOptionId} = do + bM <- liftQuery $ askBallot ("deleteOption: " <> show args) sRef doaBallotId uId + let optM = bM >>= \b -> M.lookup doaOptionId (bOptions b) + if fmap oUserId optM == Just uId && fmap totalVotes optM == Just 0 + then do + updateBallot sRef doaBallotId $ \b -> + b {bOptions = M.delete doaOptionId $ bOptions b} + pure True + else pure False + where + totalVotes :: Option -> Int + totalVotes Option {oVotes} = + sum [fromEnum vStars | Vote {vStars} <- M.elems oVotes] + + +data CreateArgumentArgs = CreateArgumentArgs + { caaBallotId :: BallotId + , caaOptionId :: OptionId + , caaText :: T.Text + , caaProContra :: IProContra + , caaUserId :: UserId + } deriving (Show, Eq, Generic, GQLType) + +createArgument :: + UserId -> SwarmRef -> CreateArgumentArgs -> Update State Bool +createArgument _uId sRef CreateArgumentArgs {..} = do + updateOption sRef caaBallotId caaOptionId $ \o -> o {oArguments = M.insert aId a $ oArguments o} + pure True + where + a = + Argument + { aUserId = caaUserId + , aText = caaText + , aProContra = + if caaProContra == IPro + then Pro + else Contra + , aUpVotes = S.empty + } + aId = mkId a + +data CreateUpVoteArgs = CreateUpVoteArgs + { cuaBallotId :: BallotId + , cuaOptionId :: OptionId + , cuaArgumentId :: ArgumentId + } deriving (Show, Eq, Generic, GQLType) + +createUpVote :: UserId -> SwarmRef -> CreateUpVoteArgs -> Update State Bool +createUpVote uId sRef CreateUpVoteArgs {..} = do + updateArgument sRef cuaBallotId cuaOptionId cuaArgumentId $ \a -> a {aUpVotes = S.insert uv $ aUpVotes a} + pure True + where + uv = UpVote {uvUserId = uId} + +data DeleteUpVoteArgs = DeleteUpVoteArgs + { duaBallotId :: BallotId + , duaOptionId :: OptionId + , duaArgumentId :: ArgumentId + } deriving (Show, Eq, Generic, GQLType) + +deleteUpVote :: UserId -> SwarmRef -> DeleteUpVoteArgs -> Update State Bool +deleteUpVote uId sRef DeleteUpVoteArgs {..} = do + updateArgument sRef duaBallotId duaOptionId duaArgumentId $ \a -> a {aUpVotes = S.filter (\uv -> uvUserId uv /= uId) $ aUpVotes a} + pure True + +newtype CreateSwarmArgs = + CreateSwarmArgs + { csaName :: T.Text + } + deriving (Generic, GQLType) + +(+++) :: Ord a => [a] -> [a] -> [a] +(+++) xs ys = nubSort $ xs ++ ys + +createSwarm :: UserId -> UserName -> CreateSwarmArgs -> Update State SwarmRef +createSwarm uId uName CreateSwarmArgs {..} = do + sRef <- mkRef sw + modify + (\s -> + s + { stSwarms = M.insert sRef sw $ stSwarms s + , stUserSwarms = + M.insertWith (+++) uId [WithRef sRef csaName] $ stUserSwarms s + }) + createFish uId uName + pure sRef + where + sw = newSwarm uId csaName + +createFish :: UserId -> UserName -> Update State () +createFish uId uName = do + fish <- gets stFish + unless (M.member uId fish) $ + modify $ \st -> + st + { stFish = + M.insert + uId + (Fish + { fUserId = uId + , fName = uName + , fProfile = "Write your profile with markdown here!" + , fFcmToken = Nothing + }) $ + stFish st + , stUserSwarms = M.insert uId [publicSwarmName] $ stUserSwarms st + , stSwarms = + M.adjust (\s -> s {sFish = S.insert uId $ sFish s}) publicRef $ + stSwarms st + } + + +newtype CreateInviteArgs = + CreateInviteArgs + { ciaToken :: T.Text + } + deriving (Generic, GQLType) + +createInvite :: SwarmRef -> CreateInviteArgs -> Update State Bool +createInvite sRef CreateInviteArgs {..} = do + modify $ \s -> s {stInvites = M.insert ciaToken sRef $ stInvites s} + return True + +newtype TakeInviteArgs = + TakeInviteArgs + { tiaToken :: T.Text + } + deriving (Generic, GQLType) + +takeInvite :: + UserId -> UserName -> TakeInviteArgs -> Update State (Maybe SwarmRef) +takeInvite uId uName TakeInviteArgs {..} = do + ivs <- gets stInvites + ss <- gets stSwarms + case M.lookup tiaToken ivs of + Nothing -> pure Nothing + Just sRef -> do + case M.lookup sRef ss of + Just swarm -> do + modify $ \s -> + s + { stInvites = M.delete tiaToken $ stInvites s + , stUserSwarms = + M.insertWith (+++) uId [WithRef sRef (sName swarm)] $ + stUserSwarms s + , stSwarms = + M.insert sRef swarm {sFish = S.insert uId $ sFish swarm} $ + stSwarms s + } + createFish uId uName + pure $ Just sRef + Nothing -> pure Nothing + + +newtype UpdateProfileArgs = + UpdateProfileArgs + { upaBody :: T.Text + } + deriving (Generic, GQLType) + +updateProfile :: UserId -> UserName -> UpdateProfileArgs -> Update State Bool +updateProfile uId uName UpdateProfileArgs {..} = do + modify $ \st -> + st {stFish = M.adjust (\f -> f {fProfile = upaBody}) uId $ stFish st} + pure True + +newtype UpdateFcmTokenArgs = + UpdateFcmTokenArgs + { uftToken :: T.Text + } + deriving (Generic, GQLType) + +updateFcmToken :: UserId -> UpdateFcmTokenArgs -> Update State Bool +updateFcmToken uId UpdateFcmTokenArgs {uftToken} = do + modify $ \st -> + st {stFish = M.adjust (\f -> f {fFcmToken = Just uftToken}) uId $ stFish st} + pure True + +computeResult :: + [Delegation] -> M.Map OptionId Option -> Int -> BallotResult +computeResult dels opts nrOfFish = + BallotResult + { brVotes = + M.fromList + [ (optId, total) + | (optId, opt) <- options + , let total = + foldl + (\acc v -> + acc + + fromEnum (vStars v) * + (1 + + length + [ d + | d@Delegation {..} <- dels + , dDelegatee == vUserId v + ])) + 0 + (oVotes opt) + ] + , brTurnout = + round $ 1_000.0 * fromIntegral totalVotes / fromIntegral nrOfFish + , brOptions = [WithId oId o | (oId, o) <- options] + } + where + options = M.toList opts + allVotes = concatMap M.elems [oVotes o | (_oId, o) <- options] + delegationsWithVotes = + [d | d <- dels, dDelegatee d `S.member` S.fromList (map vUserId allVotes)] + totalVotes = + length (nubSort $ concatMap M.keys [oVotes o | (_oId, o) <- options]) + + length delegationsWithVotes + +-- | Query for unique ballot +newtype QueryBallotByIdArgs = QueryBallotByIdArgs + { qbiBId :: BallotId + } deriving (Generic, GQLType) + + +projectBallot :: UserId -> Ballot -> Ballot +projectBallot uId b = + b + { bDelegations = S.filter (\d -> dUserId d == uId) $ bDelegations b + , bOptions = + M.map + (\o -> + o + { oVotes = M.restrictKeys (oVotes o) $ S.insert uId ds + , oArguments = + M.map + (\a -> + a + { aUpVotes = + S.filter (\uv -> uvUserId uv == uId) $ aUpVotes a + }) $ + oArguments o + }) $ + bOptions b + } + where + ds = S.map dDelegatee $ bDelegations b + + +queryUserFcmTokens :: SwarmRef -> Query State (T.Text, [T.Text]) +queryUserFcmTokens sRef = do + ss <- asks stSwarms + fs <- asks stFish + let s = + fromMaybe (error $ "Failed to lookup swarm " ++ show sRef) $ + M.lookup sRef ss + pure + ( sName s + , [t | f <- M.elems $ M.restrictKeys fs (sFish s), Just t <- [fFcmToken f]]) + +queryBallotById :: + UserId -> SwarmRef -> QueryBallotByIdArgs -> Query State (Maybe Ballot) +queryBallotById uId sRef QueryBallotByIdArgs {..} = do + bs <- askSwarm sRef sBallots + pure $ projectBallot uId <$> M.lookup qbiBId bs + +queryAllBallots :: UserId -> SwarmRef -> Query State [BallotId] +queryAllBallots uId sRef = do + bs <- askSwarm sRef sBallots + pure $ + map fst $ + sortBy + (\b1 b2 -> + flipOrder + (comparing + ((read :: String -> UTCTime) . T.unpack . bCreationDate . snd) + b1 + b2)) $ + [(bId, projectBallot uId b) | (bId, b) <- M.toList bs] + +newtype QueryBallotResultArgs = + QueryBallotResultArgs + { qbrBId :: BallotId + } + deriving (Generic, GQLType) + +queryBallotResult :: + UserId -> SwarmRef -> QueryBallotResultArgs -> Query State BallotResult +queryBallotResult _uId sRef QueryBallotResultArgs {..} = do + fish <- askSwarm sRef sFish + delsM <- askBallot0 sRef qbrBId bDelegations + optionsM <- askBallot0 sRef qbrBId bOptions + pure $ computeResult (maybe [] S.toList delsM) (fromMaybe M.empty optionsM) (S.size fish) + +newtype QueryNrOptionsArgs = + QueryNrOptionsArgs + { qaoBId :: BallotId + } + deriving (Generic, GQLType, Show) + +queryAllOptions :: UserId -> SwarmRef -> QueryNrOptionsArgs -> Query State [OptionId] +queryAllOptions uId sRef arg@QueryNrOptionsArgs {qaoBId} = do + bM <- askBallot ("queryAllOptions: " <> show arg) sRef qaoBId uId + pure $ maybe [] (M.keys . bOptions) bM + +data QueryOptionArgs = + QueryOptionArgs + { qobBId :: BallotId + , qobOId :: OptionId + } + deriving (Generic, GQLType, Show) + +queryOption :: + UserId + -> SwarmRef + -> QueryOptionArgs + -> Query State (Maybe Option) +queryOption uId sRef arg@QueryOptionArgs {..} = do + bM <- askBallot ("queryOption" <> show arg) sRef qobBId uId + pure $ M.lookup qobOId . bOptions =<< bM + +data QueryAllArgumentsArgs = + QueryAllArgumentsArgs + { qaaBId :: BallotId + , qaaOId :: OptionId + , qaaProContra :: IProContra + } + deriving (Generic, GQLType, Show) + +queryAllArguments :: + UserId + -> SwarmRef + -> QueryAllArgumentsArgs + -> Query State [ArgumentId] +queryAllArguments uId sRef arg@QueryAllArgumentsArgs {..} = do + bM <- askBallot ("queryAllArguments" <> show arg) sRef qaaBId uId + let allArgs = + map (uncurry WithId) $ + M.toList $ maybe M.empty oArguments $ M.lookup qaaOId . bOptions =<< bM + let h = \case + IPro -> Pro + IContra -> Contra + let proContracArgs proContra = + map wiId $ + sortByUpVotes $ + filter (\x -> aProContra (wiValue x) == h proContra) allArgs + pure (proContracArgs qaaProContra) + +data QueryArgumentByIdArgs = + QueryArgumentByIdArgs + { qabBId :: BallotId + , qabOId :: OptionId + , qabAId :: ArgumentId + } + deriving (Generic, GQLType, Show) + +queryArgumentById :: + UserId -> SwarmRef -> QueryArgumentByIdArgs -> Query State (Maybe Argument) +queryArgumentById uId sRef arg@QueryArgumentByIdArgs {..} = do + bM <- askBallot ("queryArgumentById:" <> show arg) sRef qabBId uId + pure $ M.lookup qabAId . oArguments =<< M.lookup qabOId . bOptions =<< bM + +queryUserSwarms :: UserId -> Query State [WithRef T.Text] +queryUserSwarms uId = do + ss <- asks stUserSwarms + pure $ fromMaybe [] (M.lookup uId ss) + +queryFish :: UserId -> SwarmRef -> Query State [Fish] +queryFish _uId sRef = do + ss <- asks stSwarms + fish <- asks stFish + let uIds = maybe S.empty sFish $ M.lookup sRef ss + pure $ M.elems $ M.restrictKeys fish uIds + +newtype QueryFishByUserIdArgs = + QueryFishByUserIdArgs + { qfUserId :: T.Text + } + deriving (Generic, GQLType) + +queryFishByUserId :: UserId -> QueryFishByUserIdArgs -> Query State (Maybe Fish) +queryFishByUserId _uId QueryFishByUserIdArgs {..} = do + ps <- asks stFish + pure $ M.lookup qfUserId ps + +---------------------------------------------------------------------------------------------------- +-- acid + + +$(deriveSafeCopy 0 'base ''WithRef) +$(deriveSafeCopy 0 'base ''WithId) +$(deriveSafeCopy 0 'base ''State) +$(deriveSafeCopy 0 'base ''Ballot) +$(deriveSafeCopy 0 'base ''BallotResult) +$(deriveSafeCopy 0 'base ''NrOfStars) +$(deriveSafeCopy 0 'base ''Vote) +$(deriveSafeCopy 0 'base ''Invite) +$(deriveSafeCopy 0 'base ''Argument) +$(deriveSafeCopy 0 'base ''ProContra) +$(deriveSafeCopy 0 'base ''IProContra) +$(deriveSafeCopy 0 'base ''Option) +$(deriveSafeCopy 0 'base ''Delegation) +$(deriveSafeCopy 0 'base ''Fish) +$(deriveSafeCopy 0 'base ''Swarm) +$(deriveSafeCopy 0 'base ''QueryBallotByIdArgs) +$(deriveSafeCopy 0 'base ''QueryBallotResultArgs) +$(deriveSafeCopy 0 'base ''QueryAllArgumentsArgs) +$(deriveSafeCopy 0 'base ''QueryArgumentByIdArgs) +$(deriveSafeCopy 0 'base ''QueryFishByUserIdArgs) +$(deriveSafeCopy 0 'base ''CreateBallotArgs) +$(deriveSafeCopy 0 'base ''DeleteBallotArgs) +$(deriveSafeCopy 0 'base ''CreateUpVoteArgs) +$(deriveSafeCopy 0 'base ''DeleteUpVoteArgs) +$(deriveSafeCopy 0 'base ''CreateOptionArgs) +$(deriveSafeCopy 0 'base ''DeleteOptionArgs) +$(deriveSafeCopy 0 'base ''CreateSwarmArgs) +$(deriveSafeCopy 0 'base ''CreateInviteArgs) +$(deriveSafeCopy 0 'base ''TakeInviteArgs) +$(deriveSafeCopy 0 'base ''UpdateProfileArgs) +$(deriveSafeCopy 0 'base ''QueryNrOptionsArgs) +$(deriveSafeCopy 0 'base ''QueryOptionArgs) +$(deriveSafeCopy 0 'base ''CreateVoteArgs) +$(deriveSafeCopy 0 'base ''CreateArgumentArgs) +$(deriveSafeCopy 0 'base ''CreateDelegationArgs) +$(deriveSafeCopy 0 'base ''UpVote) +$(deriveSafeCopy 0 'base ''UpdateFcmTokenArgs) +$(makeAcidic + ''State + [ 'createBallot + , 'createFish + , 'deleteBallot + , 'createVote + , 'createDelegation + , 'createArgument + , 'createOption + , 'deleteOption + , 'createUpVote + , 'deleteUpVote + , 'createSwarm + , 'createInvite + , 'takeInvite + , 'updateProfile + , 'queryBallotById + , 'queryBallotResult + , 'queryAllOptions + , 'queryOption + , 'queryAllArguments + , 'queryArgumentById + , 'queryUserSwarms + , 'queryFish + , 'queryFishByUserId + , 'queryAllBallots + , 'queryUserFcmTokens + , 'updateFcmToken + ]) +$(makeAcidic ''Option []) + +---------------------------------------------------------------------------------------------------- +-- IO + +main :: IO () +main = do + (conf :: Config Snap a) <- + extendedCommandLineConfig + (serviceAccountFileLocationArg : dbLocationArg : optDescrs defaultConfig) + (<>) + defaultConfig + bracket + (initialize $ getOther conf) + shutDown + (httpServe conf . CORS.applyCORS CORS.defaultOptions . site) + +data Resources = Resources + { rState :: AcidState State + , rServerApp :: ServerApp + , rHttpApp :: BSL.ByteString -> Snap BSL.ByteString + } + +data AcidConf = + AcidConf + { acStateFile :: Maybe FilePath + , acServiceAccountFile :: Maybe FilePath + } +data AcidConf0 = + AcidConf0 + { acStateFile0 :: FilePath + , acServiceAccountFile0 :: FilePath + } + +instance Semigroup AcidConf where + c1 <> c2 = + AcidConf + { acStateFile = acStateFile c1 `overwriteConf` acStateFile c2 + , acServiceAccountFile = acServiceAccountFile c1 `overwriteConf` acServiceAccountFile c2 + } +instance Monoid AcidConf where + mempty = AcidConf Nothing Nothing + +overwriteConf :: Maybe a -> Maybe a -> Maybe a +overwriteConf aM bM = case (aM, bM) of + (Nothing, Nothing) -> Nothing + (Nothing, Just b) -> Just b + (Just a, Nothing) -> Just a + (Just a, Just b) -> Just b + +defaultAcidConf = + AcidConf + { acStateFile = Just "db" + , acServiceAccountFile = Just "service-account.json" + } + +completeAcidConf :: AcidConf -> AcidConf0 +completeAcidConf c = + AcidConf0 + { acStateFile0 = + fromMaybe (error "internal error: completeAcidConf") acStateFile + , acServiceAccountFile0 = + fromMaybe + (error "internal error: completeAcidConf") + acServiceAccountFile + } + where + AcidConf {..} = defaultAcidConf <> c + +dbLocationArg :: Opt.OptDescr (Maybe (Config Snap AcidConf)) +dbLocationArg = + Opt.Option + [] + ["db"] + (Opt.OptArg + (\fpM -> Just $ setOther mempty {acStateFile = fpM} emptyConfig) + "PATH") + "The location of the database state file." + +serviceAccountFileLocationArg :: Opt.OptDescr (Maybe (Config Snap AcidConf)) +serviceAccountFileLocationArg = + Opt.Option + [] + ["service-account-file"] + (Opt.OptArg + (\fpM -> Just $ setOther mempty {acServiceAccountFile = fpM} emptyConfig) + "PATH") + "The location of the google service account .json file." + +initialize :: Maybe AcidConf -> IO Resources +initialize acidConfM = do + let AcidConf0 {..} = completeAcidConf $ fromMaybe defaultAcidConf acidConfM + rState <- openLocalStateFrom acStateFile0 emptyState + rCerts <- startCertificateUpdateThread + rToken <- FCM.startServiceAuthUpdateThread acServiceAccountFile0 + let app = M.deriveApp $ rootResolver rState rToken rCerts + (rServerApp, rHttpApp) <- Snap.evalHandler (Snap.get "/" mempty) $ do + (rServerApp, publish) <- webSocketsApp app + let rHttpApp = httpPubApp [publish] app + pure (rServerApp, rHttpApp) + pure $ Resources {..} + +shutDown :: Resources -> IO () +shutDown Resources{rState} = closeAcidState rState + +site :: Resources -> Snap () +site Resources {rState, rServerApp, rHttpApp} = do + rq <- getRequest + liftIO $ putStrLn "new request" + liftIO $ print rq + route + [ ("/api/query", gqlQueryHandler rHttpApp) + , ("/api/subscribe", runWebSocketsSnap rServerApp) + ] + +gqlQueryHandler :: (BSL.ByteString -> Snap BSL.ByteString) -> Snap () +gqlQueryHandler app = do + rqBody <- readRequestBody 10000 + logError "request: " + logError $ BSL.toStrict rqBody + r <- app rqBody + writeLBS r + logError "response: " + logError $ BSL.toStrict r + logError "done with request" + +---------------------------------------------------------------------------------------------------- +-- Snap utilities + +getUserId0 :: + AcidState State + -> IORef Certificates + -> Snap (UserId, UserName, SwarmRef) +getUserId0 _ _ = pure ("drsk", "drsk", "public") + +-- Get the user id from the authorization context. +-- Note: This function needs to check that the user id is member of the given swarm! +getUserId :: + AcidState State + -> IORef Certificates + -> Snap (UserId, UserName, SwarmRef) +getUserId st certsRef = do + token <- getMandatoryHeader "authorization" + certs <- liftIO $ readIORef certsRef + jwsOrErr <- liftIO $ validateToken certs token + (_jwsHeader, jwsContent) <- unauthorizedIfErr jwsOrErr + now <- liftIO getCurrentTime + jws <- + unauthorizedIfErr $ do + jws0 <- eitherDecode $ BSL.fromStrict jwsContent + case validateJws jws0 now of + Nothing -> Right jws0 + Just errs -> Left $ unlines errs + swarmRefBs <- getMandatoryHeader "swarm" + let uId = sub jws + let uName = fromMaybe uId $ name jws + liftIO $ update st $ CreateFish uId uName + let sRef = decodeUtf8 swarmRefBs + ss <- liftIO $ query st $ QueryUserSwarms uId + if sRef `S.member` S.fromList (map wrRef ss) + then pure (uId, uName, sRef) + else do + liftIO $ + putStrLn $ + "user id " <> + show uId <> "is not member of the given swarm " <> show swarmRefBs + unauthorized + +unauthorizedIfErr :: Either String a -> Snap a +unauthorizedIfErr = + \case + Left err -> do + liftIO $ putStrLn "Unauthorized" + liftIO $ print err + unauthorized + Right a -> pure a + +unauthorized :: Snap a +unauthorized = do + liftIO $ putStrLn "Unauthorized" + modifyResponse $ setResponseStatus 401 "Unauthorized" + getResponse >>= finishWith + pass + +getMandatoryHeader :: BS.ByteString -> Snap BS.ByteString +getMandatoryHeader name = do + mbHeader <- getOptionalHeader name + mbMissingHeaderParam name mbHeader + +getOptionalHeader :: BS.ByteString -> Snap (Maybe BS.ByteString) +getOptionalHeader name = do + headers <- getsRequest headers + pure $ getHeader (CI.mk name) headers + +mbMissingHeaderParam :: BS.ByteString -> Maybe BS.ByteString -> Snap BS.ByteString +mbMissingHeaderParam paramName = + \case + Nothing -> do + liftIO $ putStrLn $ "missing header " <> show paramName + modifyResponse $ + setResponseStatus 400 ("Missing mandatory header/parameter: " <> paramName) + getResponse >>= finishWith + pass + Just a -> pure a + +internalError :: String -> Snap () +internalError err = do + liftIO $ putStrLn $ "internal error: " <> err + modifyResponse $ setResponseStatus 500 "Internal Server Error" + writeBS "500 error" + r <- getResponse + finishWith r + +---------------------------------------------------------------------------------------------------- +-- Graphql + +data GQLQuery m = GQLQuery + { qAllBallots :: m [BallotId] + , qBallotById :: QueryBallotByIdArgs -> m (Maybe Ballot) + , qBallotResult :: QueryBallotResultArgs -> m BallotResult + , qAllOptions :: QueryNrOptionsArgs -> m [OptionId] + , qOption :: QueryOptionArgs -> m (Maybe Option) + , qAllArguments :: QueryAllArgumentsArgs -> m [ArgumentId] + , qArgumentById :: QueryArgumentByIdArgs -> m (Maybe Argument) + , qUserSwarms :: m [WithRef T.Text] + , qFish :: m [Fish] + , qFishByUserId:: QueryFishByUserIdArgs -> m (Maybe Fish) + } deriving (Generic, GQLType) + +newtype GQLQuery0 m = + GQLQuery0 + { qUserSwarms0 :: m [WithRef T.Text] + } + deriving (Generic, GQLType) + +data GQLMutation m = GQLMutation + { mCreateBallot :: CreateBallotArgs -> m BallotId + , mDeleteBallot :: DeleteBallotArgs -> m Bool + , mCreateVote :: CreateVoteArgs -> m Bool + , mCreateDelegation :: CreateDelegationArgs -> m Bool + , mCreateArgument :: CreateArgumentArgs -> m Bool + , mCreateUpVote :: CreateUpVoteArgs -> m Bool + , mDeleteUpVote :: DeleteUpVoteArgs -> m Bool + , mCreateOption :: CreateOptionArgs -> m OptionId + , mDeleteOption :: DeleteOptionArgs -> m Bool + , mCreateSwarm :: CreateSwarmArgs -> m SwarmRef + , mCreateInvite :: CreateInviteArgs -> m Bool + , mTakeInvite :: TakeInviteArgs -> m (Maybe SwarmRef) + , mUpdateProfile :: UpdateProfileArgs -> m Bool + , mUpdateFcmToken :: UpdateFcmTokenArgs -> m Bool + } deriving (Generic, GQLType) + + +data Channel + = ChannelArguments + | ChannelBallots + | ChannelResults + | ChannelOptions + deriving (Generic, Eq, Show, Hashable) + + + +data Content + = CCreateVote + | CCreateSwarm + | CCreateBallot + | CDeleteBallot + | CCreateUpVote + | CDeleteUpVote + | CCreateOption + | CDeleteOption + | CCreateArgument + | CPropagateDelegation + | CCreateDelegation + deriving Show + +type APIEvent = Event Channel Content + +data GQLSubscription (m :: * -> *) = + GQLSubscription + { sAllBallots :: SubscriptionField (ResolverS APIEvent Snap [BallotId]) + , sBallotResult :: QueryBallotResultArgs -> SubscriptionField (ResolverS APIEvent Snap BallotResult) + , sBallotById :: QueryBallotByIdArgs -> SubscriptionField (ResolverS APIEvent Snap (Maybe Ballot)) + , sAllOptions :: QueryNrOptionsArgs -> SubscriptionField (ResolverS APIEvent Snap [OptionId]) + , sAllArguments :: QueryAllArgumentsArgs -> SubscriptionField (ResolverS APIEvent Snap [ArgumentId]) + , sArgumentById :: QueryArgumentByIdArgs -> SubscriptionField (ResolverS APIEvent Snap (Maybe Argument)) + , sOption :: QueryOptionArgs -> SubscriptionField (ResolverS APIEvent Snap (Maybe Option)) + } + deriving (Generic, GQLType) + +-- | API served when user id and swarm ref are given. +rootResolver :: + AcidState State + -> IORef FCM.Token + -> IORef Certificates + -> RootResolver Snap APIEvent GQLQuery GQLMutation GQLSubscription +rootResolver st tokRef certRef = + RootResolver + { queryResolver = + GQLQuery + { qAllBallots = resolveQAllBallots st certRef + , qAllOptions = resolveQAllOptions st certRef + , qBallotById = resolveQBallotById st certRef + , qBallotResult = resolveQBallotResult st certRef + , qOption = resolveQOption st certRef + , qAllArguments = resolveQAllArguments st certRef + , qArgumentById = resolveQArgumentById st certRef + , qUserSwarms = resolveQUserSwarms st certRef + , qFish = resolveQFish st certRef + , qFishByUserId = resolveQFishByUserId st certRef + } + , mutationResolver = + GQLMutation + { mCreateBallot = resolveMCreateBallot st tokRef certRef + , mDeleteBallot = resolveMDeleteBallot st certRef + , mCreateVote = resolveMCreateVote st certRef + , mCreateDelegation = resolveMCreateDelegation st certRef + , mCreateArgument = resolveMCreateArgument st tokRef certRef + , mCreateUpVote = resolveMCreateUpVote st certRef + , mDeleteUpVote = resolveMDeleteUpVote st certRef + , mCreateOption = resolveMCreateOption st tokRef certRef + , mDeleteOption = resolveMDeleteOption st certRef + , mCreateSwarm = resolveMCreateSwarm st certRef + , mCreateInvite = resolveMCreateInvite st certRef + , mTakeInvite = resolveMTakeInvite st certRef + , mUpdateProfile = resolveMUpdateProfile st certRef + , mUpdateFcmToken = resolveMUpdateFcmToken st certRef + } + , subscriptionResolver = + GQLSubscription + { sAllBallots = resolveSAllBallots st certRef + , sAllArguments = + resolveSAllArguments st certRef + , sArgumentById = resolveSArgumentById st certRef + , sBallotResult = resolveSBallotResult st certRef + , sBallotById = resolveSBallotById st certRef + , sAllOptions = resolveSAllOptions st certRef + , sOption = resolveSOption st certRef + } + } + +resolveQAllBallots :: + AcidState State + -> IORef Certificates + -> ResolverQ APIEvent Snap [BallotId] +resolveQAllBallots st certRef = do + (uId, _uName, sRef) <- lift $ getUserId st certRef + liftIO $ query st $ QueryAllBallots uId sRef + +resolveQBallotById :: + AcidState State + -> IORef Certificates + -> QueryBallotByIdArgs + -> ResolverQ APIEvent Snap (Maybe Ballot) +resolveQBallotById st certRef args = do + (uId, _uName, sRef) <- lift $ getUserId st certRef + liftIO $ query st $ QueryBallotById uId sRef args + +resolveQBallotResult :: + AcidState State + -> IORef Certificates + -> QueryBallotResultArgs + -> ResolverQ APIEvent Snap BallotResult +resolveQBallotResult st certRef args = do + (uId, _uName, sRef) <- lift $ getUserId st certRef + liftIO $ query st $ QueryBallotResult uId sRef args + +resolveQOption :: + AcidState State + -> IORef Certificates + -> QueryOptionArgs + -> ResolverQ APIEvent Snap (Maybe Option) +resolveQOption st certRef args = do + (uId, _uName, sRef) <- lift $ getUserId st certRef + liftIO $ query st $ QueryOption uId sRef args + +resolveQAllOptions :: + AcidState State + -> IORef Certificates + -> QueryNrOptionsArgs + -> ResolverQ APIEvent Snap [OptionId] +resolveQAllOptions st certRef args = do + (uId, _uName, sRef) <- lift $ getUserId st certRef + liftIO $ query st $ QueryAllOptions uId sRef args + +resolveQAllArguments :: + AcidState State + -> IORef Certificates + -> QueryAllArgumentsArgs + -> ResolverQ APIEvent Snap [ArgumentId] +resolveQAllArguments st certRef args = do + (uId, _uName, sRef) <- lift $ getUserId st certRef + liftIO $ query st $ QueryAllArguments uId sRef args + +resolveQArgumentById :: + AcidState State + -> IORef Certificates + -> QueryArgumentByIdArgs + -> ResolverQ APIEvent Snap (Maybe Argument) +resolveQArgumentById st certRef args = do + (uId, _uName, sRef) <- lift $ getUserId st certRef + liftIO $ query st $ QueryArgumentById uId sRef args + +resolveQUserSwarms :: + AcidState State + -> IORef Certificates + -> ResolverQ APIEvent Snap [WithRef T.Text] +resolveQUserSwarms st certRef = do + (uId, _uName, _sRef) <- lift $ getUserId st certRef + liftIO $ query st $ QueryUserSwarms uId + +resolveQFish :: + AcidState State -> IORef Certificates -> ResolverQ APIEvent Snap [Fish] +resolveQFish st certRef = do + (uId, _uName, sRef) <- lift $ getUserId st certRef + liftIO $ query st $ QueryFish uId sRef + +resolveQFishByUserId :: + AcidState State + -> IORef Certificates + -> QueryFishByUserIdArgs + -> ResolverQ APIEvent Snap (Maybe Fish) +resolveQFishByUserId st certRef args = do + (uId, _uName, _sRef) <- lift $ getUserId st certRef + liftIO $ query st $ QueryFishByUserId uId args + +resolveMCreateBallot :: + AcidState State + -> IORef FCM.Token + -> IORef Certificates + -> CreateBallotArgs + -> ResolverM APIEvent Snap BallotId +resolveMCreateBallot st tokRef certRef args = do + (uId, _uName, sRef) <- lift $ getUserId st certRef + b <- + liftIO $ do + now <- getCurrentTime + b <- update st $ CreateBallot uId sRef now args + notifySwarm st tokRef sRef $ \swarmName token -> + FCM.Message + { FCM.name = "NewBallotNotification" + , FCM.notification = + FCM.Notification + { FCM.title = "New ballot for " <> swarmName + , FCM.body = cbaTitle args + } + , FCM.token = token + } + pure b + liftIO $ putStrLn "Creating CreateBallot event" + publish [Event [ChannelBallots] CCreateBallot] + liftIO $ putStrLn "published CCreateBallot" + pure $ wiId b + +notifySwarm :: + AcidState State + -> IORef FCM.Token + -> SwarmRef + -> (T.Text -> FCM.Token -> FCM.Message) + -> IO () +notifySwarm st tokRef sRef msg = do + (swarmName, ts) <- query st $ QueryUserFcmTokens sRef + req <- + Http.parseRequest $ + "POST https://fcm.googleapis.com/v1/projects/" ++ + firebaseProjectName ++ "/messages:send" + auth <- readIORef tokRef + let req1 = + Http.setRequestHeader + "authorization" + ["Bearer " <> T.encodeUtf8 auth] + req + forM_ ts $ \token -> do + let req2 = + Http.setRequestBodyJSON + (toJSON $ + FCM.FcmMessage {FCM.validate_only = False, FCM.message = msg swarmName token}) + req1 + res <- Http.httpBS req2 + unless (Http.getResponseStatus res == ok200) $ + putStrLn $ "Failed to notify swarm " <> T.unpack sRef <> " : " <> show res + +resolveMDeleteBallot :: + AcidState State + -> IORef Certificates + -> DeleteBallotArgs + -> ResolverM APIEvent Snap Bool +resolveMDeleteBallot st certRef args = do + (uId, _uName, sRef) <- lift $ getUserId st certRef + now <- liftIO getCurrentTime + b <- liftIO $ update st $ DeleteBallot uId sRef args + publish [Event [ChannelBallots] CDeleteBallot] + liftIO $ putStrLn "published CDeleteBallot" + pure b + +resolveMCreateVote :: + AcidState State + -> IORef Certificates + -> CreateVoteArgs + -> ResolverM APIEvent Snap Bool +resolveMCreateVote st certRef args = do + (uId, _uName, sRef) <- lift $ getUserId st certRef + b <- liftIO $ update st $ CreateVote uId sRef args + publish [Event [ChannelResults] CCreateVote] + liftIO $ putStrLn "published CCreateVote" + pure b + +-- TODO (drsk) write a function `then` to publish after database update +resolveMCreateDelegation :: + AcidState State + -> IORef Certificates + -> CreateDelegationArgs + -> ResolverM APIEvent Snap Bool +resolveMCreateDelegation st certRef args = do + (uId, _uName, sRef) <- lift $ getUserId st certRef + b <- liftIO $ update st $ CreateDelegation uId sRef args + publish [Event [ChannelResults, ChannelBallots] CCreateDelegation] + liftIO $ putStrLn "published CCreateDelegation" + pure b + +resolveMCreateArgument :: + AcidState State + -> IORef FCM.Token + -> IORef Certificates + -> CreateArgumentArgs + -> ResolverM APIEvent Snap Bool +resolveMCreateArgument st tokRef certRef args = do + (uId, _uName, sRef) <- lift $ getUserId st certRef + r <- + liftIO $ do + r <- update st $ CreateArgument uId sRef args + notifySwarm st tokRef sRef $ \swarmName token -> + FCM.Message + { FCM.name = "NewArgumentNotification" + , FCM.notification = + FCM.Notification + { FCM.title = "New argument for swarm " <> sRef + , FCM.body = headDef "no title" $ T.lines $ caaText args + } + , FCM.token = token + } + pure r + publish [Event [ChannelArguments, ChannelOptions] CCreateArgument] + liftIO $ putStrLn "published CCreateArgument" + pure r + +resolveMCreateUpVote :: + AcidState State + -> IORef Certificates + -> CreateUpVoteArgs + -> ResolverM APIEvent Snap Bool +resolveMCreateUpVote st certRef args = do + (uId, _uName, sRef) <- lift $ getUserId st certRef + r <- liftIO $ update st $ CreateUpVote uId sRef args + publish [Event [ChannelArguments] CCreateUpVote] + liftIO $ putStrLn "published CCreateUpVote" + pure r + +resolveMDeleteUpVote :: + AcidState State + -> IORef Certificates + -> DeleteUpVoteArgs + -> ResolverM APIEvent Snap Bool +resolveMDeleteUpVote st certRef args = do + (uId, _uName, sRef) <- lift $ getUserId st certRef + b <- liftIO $ update st $ DeleteUpVote uId sRef args + publish [Event [ChannelArguments] CDeleteUpVote] + pure b + +resolveMCreateOption :: + AcidState State + -> IORef FCM.Token + -> IORef Certificates + -> CreateOptionArgs + -> ResolverM APIEvent Snap OptionId +resolveMCreateOption st tokRef certRef args = do + (uId, _uName, sRef) <- lift $ getUserId st certRef + oId <- liftIO $ update st $ CreateOption uId sRef args + publish [Event [ChannelOptions] CCreateOption] + liftIO $ putStrLn "published CCreateOption" + liftIO $ notifySwarm st tokRef sRef $ \swarmName token -> + FCM.Message + { FCM.name = "NewOptionNotification" + , FCM.notification = + FCM.Notification + { FCM.title = "New option for swarm " <> sRef + , FCM.body = coaTitle args + } + , FCM.token = token + } + pure oId + +resolveMDeleteOption :: + AcidState State + -> IORef Certificates + -> DeleteOptionArgs + -> ResolverM APIEvent Snap Bool +resolveMDeleteOption st certRef args = do + (uId, _uName, sRef) <- lift $ getUserId st certRef + r <- liftIO $ update st $ DeleteOption uId sRef args + publish [Event [ChannelOptions] CDeleteOption] + liftIO $ putStrLn "published CDeleteOption" + pure r + + +resolveMCreateSwarm :: + AcidState State + -> IORef Certificates + -> CreateSwarmArgs + -> ResolverM APIEvent Snap SwarmRef +resolveMCreateSwarm st certRef args = do + (uId, uName, _sRef) <- lift $ getUserId st certRef + liftIO $ update st $ CreateSwarm uId uName args + +resolveMCreateInvite :: + AcidState State + -> IORef Certificates + -> CreateInviteArgs + -> ResolverM APIEvent Snap Bool +resolveMCreateInvite st certRef args = do + (uId, _uName, sRef) <- lift $ getUserId st certRef + liftIO $ update st $ CreateInvite sRef args + +resolveMTakeInvite :: + AcidState State + -> IORef Certificates + -> TakeInviteArgs + -> ResolverM APIEvent Snap (Maybe SwarmRef) +resolveMTakeInvite st certRef args = do + (uId, uName, sRef) <- lift $ getUserId st certRef + liftIO $ update st $ TakeInvite uId uName args + +resolveMUpdateProfile :: + AcidState State + -> IORef Certificates + -> UpdateProfileArgs + -> ResolverM APIEvent Snap Bool +resolveMUpdateProfile st certRef args = do + (uId, uName, sRef) <- lift $ getUserId st certRef + liftIO $ update st $ UpdateProfile uId uName args + +resolveMUpdateFcmToken :: + AcidState State + -> IORef Certificates + -> UpdateFcmTokenArgs + -> ResolverM APIEvent Snap Bool +resolveMUpdateFcmToken st certRef args = do + (uId, uName, sRef) <- lift $ getUserId st certRef + liftIO $ update st $ UpdateFcmToken uId args + +resolveSAllBallots :: + AcidState State + -> IORef Certificates + -> SubscriptionField (ResolverS APIEvent Snap [BallotId]) +resolveSAllBallots st certRef = do + subscribe ChannelBallots $ do + pure $ \(Event _ _c) -> queryBallots + -- case c of + -- CDeleteBallot -> do + -- liftIO $ putStrLn "debug: CDeleteBallot" + -- queryBallots + -- CCreateBallot -> do + -- liftIO $ putStrLn "debug: CCreateBallot" + -- queryBallots + -- other -> + -- lift $ + -- internalError ("unexpected event for sAllBallots " <> show other) >> + -- pure [] + where + queryBallots = do + (uId, _uName, sRef) <- lift $ getUserId st certRef + liftIO $ query st $ QueryAllBallots uId sRef + +resolveSAllArguments :: + AcidState State + -> IORef Certificates + -> QueryAllArgumentsArgs + -> SubscriptionField (ResolverS APIEvent Snap [ArgumentId]) +resolveSAllArguments st certRef args = do + subscribe ChannelArguments $ do + pure $ \(Event _ _c) -> queryArguments + -- case c of + -- CCreateArgument -> queryArguments + -- CCreateUpVote -> queryArguments + -- CDeleteUpVote -> queryArguments + -- other -> + -- lift $ + -- internalError ("unexpected event for sAllArguments " <> show other) >> + -- pure [] + where + queryArguments = do + (uId, _uName, sRef) <- lift $ getUserId st certRef + liftIO $ query st $ QueryAllArguments uId sRef args + +resolveSArgumentById :: + AcidState State + -> IORef Certificates + -> QueryArgumentByIdArgs + -> SubscriptionField (ResolverS APIEvent Snap (Maybe Argument)) +resolveSArgumentById st certRef args = + subscribe ChannelArguments $ do + pure $ \(Event _ _c) -> queryArguments + -- case c of + -- CCreateArgument -> queryArguments + -- CCreateUpVote -> queryArguments + -- other -> + -- lift $ + -- internalError ("unexpected event for sArgumentById " <> show other) >> + -- pure Nothing + where + queryArguments = do + (uId, _uName, sRef) <- lift $ getUserId st certRef + liftIO $ query st $ QueryArgumentById uId sRef args + +resolveSBallotResult :: + AcidState State + -> IORef Certificates + -> QueryBallotResultArgs + -> SubscriptionField (ResolverS APIEvent Snap BallotResult) +resolveSBallotResult st certRef args = do + subscribe ChannelResults $ do + pure $ \(Event _ _c) -> queryResult + -- case c of + -- CCreateVote -> queryResult + -- CCreateDelegation -> queryResult + -- CCreateOption -> queryResult + -- CDeleteOption -> queryResult + -- other -> + -- lift $ + -- internalError ("unexpected event for sBallotResult " <> show other) >> + -- pure emptyResult + where + queryResult = do + (uId, _uName, sRef) <- lift $ getUserId st certRef + liftIO $ query st $ QueryBallotResult uId sRef args + +resolveSBallotById :: + AcidState State + -> IORef Certificates + -> QueryBallotByIdArgs + -> SubscriptionField (ResolverS APIEvent Snap (Maybe Ballot)) +resolveSBallotById st certRef args = do + subscribe ChannelBallots $ do + pure $ \(Event _ _c) -> queryBallot + -- case c of + -- CCreateDelegation -> queryBallot + -- CCreateBallot -> queryBallot + -- CDeleteBallot -> queryBallot + -- other -> + -- lift $ + -- internalError ("unexpected event for sBallotById " <> show other) >> + -- pure Nothing + where + queryBallot = do + (uId, _uName, sRef) <- lift $ getUserId st certRef + liftIO $ query st $ QueryBallotById uId sRef args + +resolveSOption :: + AcidState State + -> IORef Certificates + -> QueryOptionArgs + -> SubscriptionField (ResolverS APIEvent Snap (Maybe Option)) +resolveSOption st certRef args = do + subscribe ChannelOptions $ do + pure $ \(Event _ _c) -> queryOption + -- case c of + -- CCreateArgument -> queryOption + -- CCreateOption -> queryOption + -- CDeleteOption -> queryOption + -- other -> + -- lift $ + -- internalError ("unexpected event for sOption " <> show other) >> + -- pure Nothing + where + queryOption = do + (uId, _uName, sRef) <- lift $ getUserId st certRef + liftIO $ query st $ QueryOption uId sRef args + +resolveSAllOptions :: + AcidState State + -> IORef Certificates + -> QueryNrOptionsArgs + -> SubscriptionField (ResolverS APIEvent Snap [OptionId]) +resolveSAllOptions st certRef args = do + subscribe ChannelOptions $ do + pure $ \(Event _ _c) -> queryOptions + -- case c of + -- CCreateOption -> queryOptions + -- CDeleteOption -> queryOptions + -- CCreateArgument -> queryOptions + -- other -> + -- lift $ + -- internalError ("unexpected event for sAllOptions " <> show other) >> + -- pure [] + where + queryOptions = do + (uId, _uName, sRef) <- lift $ getUserId st certRef + liftIO $ query st $ QueryAllOptions uId sRef args diff --git a/swarm.cabal b/swarm.cabal new file mode 100644 index 0000000..60d7772 --- /dev/null +++ b/swarm.cabal @@ -0,0 +1,55 @@ +cabal-version: >=1.10 +name: swarm +version: 0.1.0.0 +-- synopsis: +description: The swarm database server. +license: MIT +license-file: LICENSE +author: drsk +maintainer: drsk +build-type: Simple + +executable swarm + main-is: Main.hs + other-modules: Auth.Google, Auth.Common, Firebase.CloudMessaging + hs-source-dirs: src + build-depends: base + , acid-state + , aeson + , binary + , binary-instances + , bytestring + , case-insensitive + , containers + , cryptonite + , cryptostore + , extra + , http-conduit + , http-types + , jose-jwt + , monad-control + , morpheus-graphql + , morpheus-graphql-app + , morpheus-graphql-subscriptions + , mtl + , pem + , safe + , safecopy + , snap-core + , snap-server + , suspend + , lifted-base + , temporary + , text + , time + , timers + , unliftio-core + , unordered-containers + , utf8-string + , wai-websockets + , websockets + , websockets-snap + , word8 + , x509 + , x509-store + default-language: Haskell2010 diff --git a/ui/.firebaserc b/ui/.firebaserc new file mode 100644 index 0000000..f06f3ee --- /dev/null +++ b/ui/.firebaserc @@ -0,0 +1,5 @@ +{ + "projects": { + "default": "swarm-90059" + } +} diff --git a/ui/.gitignore b/ui/.gitignore new file mode 100644 index 0000000..7eff025 --- /dev/null +++ b/ui/.gitignore @@ -0,0 +1,76 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# firebase related +.firebase/ + +# 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/ +.dart_tool/ +.packages +.flutter-plugins +.flutter-plugins-dependencies +.pub-cache/ +.pub/ +/build/ + +# Android related +**/android/**/gradle-wrapper.jar +**/android/.gradle +**/android/captures/ +**/android/gradlew +**/android/gradlew.bat +**/android/local.properties +**/android/**/GeneratedPluginRegistrant.java + +# iOS/XCode related +**/ios/**/*.mode1v3 +**/ios/**/*.mode2v3 +**/ios/**/*.moved-aside +**/ios/**/*.pbxuser +**/ios/**/*.perspectivev3 +**/ios/**/*sync/ +**/ios/**/.sconsign.dblite +**/ios/**/.tags* +**/ios/**/.vagrant/ +**/ios/**/DerivedData/ +**/ios/**/Icon? +**/ios/**/Pods/ +**/ios/**/.symlinks/ +**/ios/**/profile +**/ios/**/xcuserdata +**/ios/.generated/ +**/ios/Flutter/App.framework +**/ios/Flutter/Flutter.framework +**/ios/Flutter/Generated.xcconfig +**/ios/Flutter/app.flx +**/ios/Flutter/app.zip +**/ios/Flutter/flutter_assets/ +**/ios/ServiceDefinitions.json +**/ios/Runner/GeneratedPluginRegistrant.* + +# Exceptions to above rules. +!**/ios/**/default.mode1v3 +!**/ios/**/default.mode2v3 +!**/ios/**/default.pbxuser +!**/ios/**/default.perspectivev3 +!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages diff --git a/ui/.metadata b/ui/.metadata new file mode 100644 index 0000000..2408a0a --- /dev/null +++ b/ui/.metadata @@ -0,0 +1,10 @@ +# 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: 43b03127d469f1f6d9a22f8dae41eea2eed2afd9 + channel: dev + +project_type: app diff --git a/ui/README.md b/ui/README.md new file mode 100644 index 0000000..41b6d4c --- /dev/null +++ b/ui/README.md @@ -0,0 +1,9 @@ +# swarm app + +## build + +For the bundle: +flutter build appbundle --verbose --no-tree-shake-icons + +For the apk only: +flutter build apk --verbose --no-tree-shake-icons diff --git a/ui/analysis_options.yaml b/ui/analysis_options.yaml new file mode 100644 index 0000000..61b6c4d --- /dev/null +++ b/ui/analysis_options.yaml @@ -0,0 +1,29 @@ +# 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-lang.github.io/linter/lints/index.html. + # + # 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/ui/android/.gitignore b/ui/android/.gitignore new file mode 100644 index 0000000..317d188 --- /dev/null +++ b/ui/android/.gitignore @@ -0,0 +1,12 @@ +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 +# Managed via git-crypt +# key.properties diff --git a/ui/android/app/build.gradle b/ui/android/app/build.gradle new file mode 100644 index 0000000..506d25c --- /dev/null +++ b/ui/android/app/build.gradle @@ -0,0 +1,79 @@ +def localProperties = new Properties() +def localPropertiesFile = rootProject.file('local.properties') +if (localPropertiesFile.exists()) { + localPropertiesFile.withReader('UTF-8') { reader -> + localProperties.load(reader) + } +} + +def flutterRoot = localProperties.getProperty('flutter.sdk') +if (flutterRoot == null) { + throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") +} + +def flutterVersionCode = localProperties.getProperty('flutter.versionCode') +if (flutterVersionCode == null) { + flutterVersionCode = '1' +} + +def flutterVersionName = localProperties.getProperty('flutter.versionName') +if (flutterVersionName == null) { + flutterVersionName = '1.0' +} + +apply plugin: 'com.android.application' +apply plugin: 'com.google.gms.google-services' +apply plugin: 'kotlin-android' +apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" + +def keystoreProperties = new Properties() + def keystorePropertiesFile = rootProject.file('key.properties') + if (keystorePropertiesFile.exists()) { + keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) + } + +android { + compileSdkVersion 29 + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } + + lintOptions { + disable 'InvalidPackage' + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId "com.swarmapp.swarm" + minSdkVersion 19 + targetSdkVersion 29 + versionCode flutterVersionCode.toInteger() + versionName flutterVersionName + } + signingConfigs { + release { + keyAlias keystoreProperties['keyAlias'] + keyPassword keystoreProperties['keyPassword'] + storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null + storePassword keystoreProperties['storePassword'] + } + } + 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.release + } + + } +} + +flutter { + source '../..' +} + +dependencies { + implementation platform('com.google.firebase:firebase-bom:26.8.0') + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" +} diff --git a/ui/android/app/google-services.json b/ui/android/app/google-services.json new file mode 100644 index 0000000..8ade025 --- /dev/null +++ b/ui/android/app/google-services.json @@ -0,0 +1,47 @@ +{ + "project_info": { + "project_number": "449991501895", + "firebase_url": "https://swarm-90059.firebaseio.com", + "project_id": "swarm-90059", + "storage_bucket": "swarm-90059.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:449991501895:android:1086618353136c6e6fa962", + "android_client_info": { + "package_name": "com.swarmapp.swarm" + } + }, + "oauth_client": [ + { + "client_id": "449991501895-b8bfb2742dbcblsgdgifr90sbo5pdg2j.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "com.swarmapp.swarm", + "certificate_hash": "75f2f0fea289c06a41fdcf83ffc2493ddacbbc01" + } + }, + { + "client_id": "449991501895-rmvhfttqfqdc7aldgkfq1m69cijkldfq.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "com.swarmapp.swarm", + "certificate_hash": "474dd003459d53b350e1fdf22b7d60ac98f5ce8b" + } + } + ], + "api_key": [ + { + "current_key": "AIzaSyAxBDItoTn3q_PNCCB_j-I9Fmv_qjxtxPA" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + } + ], + "configuration_version": "1" +} diff --git a/ui/android/app/src/debug/AndroidManifest.xml b/ui/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000..f633d73 --- /dev/null +++ b/ui/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,8 @@ + + + + + diff --git a/ui/android/app/src/main/AndroidManifest.xml b/ui/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..e850867 --- /dev/null +++ b/ui/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + diff --git a/ui/android/app/src/main/kotlin/com/example/ui/MainActivity.kt b/ui/android/app/src/main/kotlin/com/example/ui/MainActivity.kt new file mode 100644 index 0000000..98fcbda --- /dev/null +++ b/ui/android/app/src/main/kotlin/com/example/ui/MainActivity.kt @@ -0,0 +1,6 @@ +package com.swarmapp.swarm + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity: FlutterActivity() { +} diff --git a/ui/android/app/src/main/kotlin/com/swarmapp/ui/MainActivity.kt b/ui/android/app/src/main/kotlin/com/swarmapp/ui/MainActivity.kt new file mode 100644 index 0000000..7aafe48 --- /dev/null +++ b/ui/android/app/src/main/kotlin/com/swarmapp/ui/MainActivity.kt @@ -0,0 +1,6 @@ +package com.swarmapp.ui + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity: FlutterActivity() { +} diff --git a/ui/android/app/src/main/res/drawable-v21/launch_background.xml b/ui/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 0000000..f74085f --- /dev/null +++ b/ui/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/ui/android/app/src/main/res/drawable/launch_background.xml b/ui/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 0000000..f74085f --- /dev/null +++ b/ui/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/ui/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/ui/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..db77bb4b7b0906d62b1847e87f15cdcacf6a4f29 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ literal 0 HcmV?d00001 diff --git a/ui/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/ui/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..17987b79bb8a35cc66c3c1fd44f5a5526c1b78be GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xx&nMcT!A!W`0S9QKQy;}1Cl^CgaH=;G9cpY;r$Q>i*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@Uy!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ literal 0 HcmV?d00001 diff --git a/ui/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/ui/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..d5f1c8d34e7a88e3f88bea192c3a370d44689c3c GIT binary patch literal 1031 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof literal 0 HcmV?d00001 diff --git a/ui/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/ui/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4d6372eebdb28e45604e46eeda8dd24651419bc0 GIT binary patch literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` literal 0 HcmV?d00001 diff --git a/ui/android/app/src/main/res/values-night/styles.xml b/ui/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 0000000..449a9f9 --- /dev/null +++ b/ui/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/ui/android/app/src/main/res/values/styles.xml b/ui/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..d74aa35 --- /dev/null +++ b/ui/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/ui/android/app/src/profile/AndroidManifest.xml b/ui/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 0000000..6fe11f9 --- /dev/null +++ b/ui/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/ui/android/build.gradle b/ui/android/build.gradle new file mode 100644 index 0000000..496c27d --- /dev/null +++ b/ui/android/build.gradle @@ -0,0 +1,32 @@ +buildscript { + ext.kotlin_version = '1.3.50' + repositories { + google() + jcenter() + } + + dependencies { + classpath 'com.android.tools.build:gradle:7.0.0-alpha05' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + classpath 'com.google.gms:google-services:4.3.5' + } +} + +allprojects { + repositories { + google() + jcenter() + } +} + +rootProject.buildDir = '../build' +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(':app') +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/ui/android/gradle.properties b/ui/android/gradle.properties new file mode 100644 index 0000000..a673820 --- /dev/null +++ b/ui/android/gradle.properties @@ -0,0 +1,4 @@ +org.gradle.jvmargs=-Xmx1536M +android.useAndroidX=true +android.enableJetifier=true +android.enableR8=true diff --git a/ui/android/gradle/wrapper/gradle-wrapper.properties b/ui/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..7c8bedb --- /dev/null +++ b/ui/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Fri Jun 23 08:50:38 CEST 2017 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https://services.gradle.org/distributions/gradle-6.8-bin.zip diff --git a/ui/android/key.properties b/ui/android/key.properties new file mode 100644 index 0000000000000000000000000000000000000000..17563a9dca0f6424d9f2503cb73320f390f1c9d4 GIT binary patch literal 140 zcmV;70CWEUM@dveQdv+`0DyJAQEA6W$@l~bC`I_T(?A?{jlW?}5wi{~|xg^q(l-PDz#`X-f*W80uto u_hC&6RyJxWVrR)|xCF&aaA@=X0p~0|?SK~cI%Ok6vG&<*sk+fnlSSA^C`8== literal 0 HcmV?d00001 diff --git a/ui/android/settings.gradle b/ui/android/settings.gradle new file mode 100644 index 0000000..44e62bc --- /dev/null +++ b/ui/android/settings.gradle @@ -0,0 +1,11 @@ +include ':app' + +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() + +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } + +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/ui/firebase.json b/ui/firebase.json new file mode 100644 index 0000000..6603732 --- /dev/null +++ b/ui/firebase.json @@ -0,0 +1,16 @@ +{ + "hosting": { + "public": "build/web", + "ignore": [ + "firebase.json", + "**/.*", + "**/node_modules/**" + ], + "rewrites": [ + { + "source": "**", + "destination": "/index.html" + } + ] + } +} diff --git a/ui/ios/.gitignore b/ui/ios/.gitignore new file mode 100644 index 0000000..e96ef60 --- /dev/null +++ b/ui/ios/.gitignore @@ -0,0 +1,32 @@ +*.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/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/ui/ios/Flutter/AppFrameworkInfo.plist b/ui/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 0000000..f2872cf --- /dev/null +++ b/ui/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 9.0 + + diff --git a/ui/ios/Flutter/Debug.xcconfig b/ui/ios/Flutter/Debug.xcconfig new file mode 100644 index 0000000..592ceee --- /dev/null +++ b/ui/ios/Flutter/Debug.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/ui/ios/Flutter/Release.xcconfig b/ui/ios/Flutter/Release.xcconfig new file mode 100644 index 0000000..592ceee --- /dev/null +++ b/ui/ios/Flutter/Release.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/ui/ios/Runner.xcodeproj/project.pbxproj b/ui/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..a62c2eb --- /dev/null +++ b/ui/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,495 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + 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 */; }; +/* End PBXBuildFile 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 = ""; }; +/* 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 = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + ); + 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 */ + 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 = { + LastUpgradeCheck = 1020; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 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 */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 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; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + 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; + 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 */ + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase 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 = 9.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; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.ui; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + 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 = 9.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 = 9.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + 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; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.ui; + 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; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.ui; + 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 */ + 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/ui/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/ui/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..1d526a1 --- /dev/null +++ b/ui/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/ui/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ui/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/ui/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/ui/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/ui/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/ui/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/ui/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ui/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000..a28140c --- /dev/null +++ b/ui/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ui/ios/Runner.xcworkspace/contents.xcworkspacedata b/ui/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..1d526a1 --- /dev/null +++ b/ui/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/ui/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ui/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/ui/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/ui/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/ui/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/ui/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/ui/ios/Runner/AppDelegate.swift b/ui/ios/Runner/AppDelegate.swift new file mode 100644 index 0000000..70693e4 --- /dev/null +++ b/ui/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/ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..d36b1fa --- /dev/null +++ b/ui/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/ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..dc9ada4725e9b0ddb1deab583e5b5102493aa332 GIT binary patch literal 10932 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 literal 0 HcmV?d00001 diff --git a/ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..f091b6b0bca859a3f474b03065bef75ba58a9e4c GIT binary patch literal 1588 zcmV-42Fv-0P)C1SqPt}wig>|5Crh^=oyX$BK<}M8eLU3e2hGT;=G|!_SP)7zNI6fqUMB=)y zRAZ>eDe#*r`yDAVgB_R*LB*MAc)8(b{g{9McCXW!lq7r(btRoB9!8B-#AI6JMb~YFBEvdsV)`mEQO^&#eRKx@b&x- z5lZm*!WfD8oCLzfHGz#u7sT0^VLMI1MqGxF^v+`4YYnVYgk*=kU?HsSz{v({E3lb9 z>+xILjBN)t6`=g~IBOelGQ(O990@BfXf(DRI5I$qN$0Gkz-FSc$3a+2fX$AedL4u{ z4V+5Ong(9LiGcIKW?_352sR;LtDPmPJXI{YtT=O8=76o9;*n%_m|xo!i>7$IrZ-{l z-x3`7M}qzHsPV@$v#>H-TpjDh2UE$9g6sysUREDy_R(a)>=eHw-WAyfIN z*qb!_hW>G)Tu8nSw9yn#3wFMiLcfc4pY0ek1}8(NqkBR@t4{~oC>ryc-h_ByH(Cg5 z>ao-}771+xE3um9lWAY1FeQFxowa1(!J(;Jg*wrg!=6FdRX+t_<%z&d&?|Bn){>zm zZQj(aA_HeBY&OC^jj*)N`8fa^ePOU72VpInJoI1?`ty#lvlNzs(&MZX+R%2xS~5Kh zX*|AU4QE#~SgPzOXe9>tRj>hjU@c1k5Y_mW*Jp3fI;)1&g3j|zDgC+}2Q_v%YfDax z!?umcN^n}KYQ|a$Lr+51Nf9dkkYFSjZZjkma$0KOj+;aQ&721~t7QUKx61J3(P4P1 zstI~7-wOACnWP4=8oGOwz%vNDqD8w&Q`qcNGGrbbf&0s9L0De{4{mRS?o0MU+nR_! zrvshUau0G^DeMhM_v{5BuLjb#Hh@r23lDAk8oF(C+P0rsBpv85EP>4CVMx#04MOfG z;P%vktHcXwTj~+IE(~px)3*MY77e}p#|c>TD?sMatC0Tu4iKKJ0(X8jxQY*gYtxsC z(zYC$g|@+I+kY;dg_dE>scBf&bP1Nc@Hz<3R)V`=AGkc;8CXqdi=B4l2k|g;2%#m& z*jfX^%b!A8#bI!j9-0Fi0bOXl(-c^AB9|nQaE`*)Hw+o&jS9@7&Gov#HbD~#d{twV zXd^Tr^mWLfFh$@Dr$e;PBEz4(-2q1FF0}c;~B5sA}+Q>TOoP+t>wf)V9Iy=5ruQa;z)y zI9C9*oUga6=hxw6QasLPnee@3^Rr*M{CdaL5=R41nLs(AHk_=Y+A9$2&H(B7!_pURs&8aNw7?`&Z&xY_Ye z)~D5Bog^td-^QbUtkTirdyK^mTHAOuptDflut!#^lnKqU md>ggs(5nOWAqO?umG&QVYK#ibz}*4>0000U6E9hRK9^#O7(mu>ETqrXGsduA8$)?`v2seloOCza43C{NQ$$gAOH**MCn0Q?+L7dl7qnbRdqZ8LSVp1ItDxhxD?t@5_yHg6A8yI zC*%Wgg22K|8E#!~cTNYR~@Y9KepMPrrB8cABapAFa=`H+UGhkXUZV1GnwR1*lPyZ;*K(i~2gp|@bzp8}og7e*#% zEnr|^CWdVV!-4*Y_7rFvlww2Ze+>j*!Z!pQ?2l->4q#nqRu9`ELo6RMS5=br47g_X zRw}P9a7RRYQ%2Vsd0Me{_(EggTnuN6j=-?uFS6j^u69elMypu?t>op*wBx<=Wx8?( ztpe^(fwM6jJX7M-l*k3kEpWOl_Vk3@(_w4oc}4YF4|Rt=2V^XU?#Yz`8(e?aZ@#li0n*=g^qOcVpd-Wbok=@b#Yw zqn8u9a)z>l(1kEaPYZ6hwubN6i<8QHgsu0oE) ziJ(p;Wxm>sf!K+cw>R-(^Y2_bahB+&KI9y^);#0qt}t-$C|Bo71lHi{_+lg#f%RFy z0um=e3$K3i6K{U_4K!EX?F&rExl^W|G8Z8;`5z-k}OGNZ0#WVb$WCpQu-_YsiqKP?BB# vzVHS-CTUF4Ozn5G+mq_~Qqto~ahA+K`|lyv3(-e}00000NkvXXu0mjfd`9t{ literal 0 HcmV?d00001 diff --git a/ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d0ef06e7edb86cdfe0d15b4b0d98334a86163658 GIT binary patch literal 1716 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 literal 0 HcmV?d00001 diff --git a/ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c8f9ed8f5cee1c98386d13b17e89f719e83555b2 GIT binary patch literal 1895 zcmV-t2blPYP)FQtfgmafE#=YDCq`qUBt#QpG%*H6QHY765~R=q zZ6iudfM}q!Pz#~9JgOi8QJ|DSu?1-*(kSi1K4#~5?#|rh?sS)(-JQqX*}ciXJ56_H zdw=^s_srbAdqxlvGyrgGet#6T7_|j;95sL%MtM;q86vOxKM$f#puR)Bjv9Zvz9-di zXOTSsZkM83)E9PYBXC<$6(|>lNLVBb&&6y{NByFCp%6+^ALR@NCTse_wqvNmSWI-m z!$%KlHFH2omF!>#%1l3LTZg(s7eof$7*xB)ZQ0h?ejh?Ta9fDv59+u#MokW+1t8Zb zgHv%K(u9G^Lv`lh#f3<6!JVTL3(dCpxHbnbA;kKqQyd1~^Xe0VIaYBSWm6nsr;dFj z4;G-RyL?cYgsN1{L4ZFFNa;8)Rv0fM0C(~Tkit94 zz#~A)59?QjD&pAPSEQ)p8gP|DS{ng)j=2ux)_EzzJ773GmQ_Cic%3JJhC0t2cx>|v zJcVusIB!%F90{+}8hG3QU4KNeKmK%T>mN57NnCZ^56=0?&3@!j>a>B43pi{!u z7JyDj7`6d)qVp^R=%j>UIY6f+3`+qzIc!Y_=+uN^3BYV|o+$vGo-j-Wm<10%A=(Yk^beI{t%ld@yhKjq0iNjqN4XMGgQtbKubPM$JWBz}YA65k%dm*awtC^+f;a-x4+ddbH^7iDWGg&N0n#MW{kA|=8iMUiFYvMoDY@sPC#t$55gn6ykUTPAr`a@!(;np824>2xJthS z*ZdmT`g5-`BuJs`0LVhz+D9NNa3<=6m;cQLaF?tCv8)zcRSh66*Z|vXhG@$I%U~2l z?`Q zykI#*+rQ=z6Jm=Bui-SfpDYLA=|vzGE(dYm=OC8XM&MDo7ux4UF1~0J1+i%aCUpRe zt3L_uNyQ*cE(38Uy03H%I*)*Bh=Lb^Xj3?I^Hnbeq72(EOK^Y93CNp*uAA{5Lc=ky zx=~RKa4{iTm{_>_vSCm?$Ej=i6@=m%@VvAITnigVg{&@!7CDgs908761meDK5azA} z4?=NOH|PdvabgJ&fW2{Mo$Q0CcD8Qc84%{JPYt5EiG{MdLIAeX%T=D7NIP4%Hw}p9 zg)==!2Lbp#j{u_}hMiao9=!VSyx0gHbeCS`;q&vzeq|fs`y&^X-lso(Ls@-706qmA z7u*T5PMo_w3{se1t2`zWeO^hOvTsohG_;>J0wVqVe+n)AbQCx)yh9;w+J6?NF5Lmo zecS@ieAKL8%bVd@+-KT{yI|S}O>pYckUFs;ry9Ow$CD@ztz5K-*D$^{i(_1llhSh^ zEkL$}tsQt5>QA^;QgjgIfBDmcOgi5YDyu?t6vSnbp=1+@6D& z5MJ}B8q;bRlVoxasyhcUF1+)o`&3r0colr}QJ3hcSdLu;9;td>kf@Tcn<@9sIx&=m z;AD;SCh95=&p;$r{Xz3iWCO^MX83AGJ(yH&eTXgv|0=34#-&WAmw{)U7OU9!Wz^!7 zZ%jZFi@JR;>Mhi7S>V7wQ176|FdW2m?&`qa(ScO^CFPR80HucLHOTy%5s*HR0^8)i h0WYBP*#0Ks^FNSabJA*5${_#%002ovPDHLkV1oKhTl@e3 literal 0 HcmV?d00001 diff --git a/ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..a6d6b8609df07bf62e5100a53a01510388bd2b22 GIT binary patch literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ literal 0 HcmV?d00001 diff --git a/ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a6d6b8609df07bf62e5100a53a01510388bd2b22 GIT binary patch literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ literal 0 HcmV?d00001 diff --git a/ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..75b2d164a5a98e212cca15ea7bf2ab5de5108680 GIT binary patch literal 3831 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 literal 0 HcmV?d00001 diff --git a/ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/ui/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..c4df70d39da7941ef3f6dcb7f06a192d8dcb308d GIT binary patch literal 1888 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 iW8Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/ui/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/ui/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/ui/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/ui/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/ui/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/ui/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 0000000..89c2725 --- /dev/null +++ b/ui/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/ui/ios/Runner/Base.lproj/LaunchScreen.storyboard b/ui/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..f2e259c --- /dev/null +++ b/ui/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ui/ios/Runner/Base.lproj/Main.storyboard b/ui/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 0000000..f3c2851 --- /dev/null +++ b/ui/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ui/ios/Runner/Info.plist b/ui/ios/Runner/Info.plist new file mode 100644 index 0000000..675084e --- /dev/null +++ b/ui/ios/Runner/Info.plist @@ -0,0 +1,45 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ui + 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 + + UIViewControllerBasedStatusBarAppearance + + + diff --git a/ui/ios/Runner/Runner-Bridging-Header.h b/ui/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 0000000..308a2a5 --- /dev/null +++ b/ui/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/ui/lib/components/arguments_card.dart b/ui/lib/components/arguments_card.dart new file mode 100644 index 0000000..d48631a --- /dev/null +++ b/ui/lib/components/arguments_card.dart @@ -0,0 +1,108 @@ +import 'dart:async'; + +import 'package:flutter/material.dart'; +import 'package:graphql_flutter/graphql_flutter.dart'; +import 'package:swarm/data/gql_api.dart'; +import 'package:flutter_markdown/flutter_markdown.dart'; +import 'package:swarm/components/utils.dart'; + +List argumentCards( + String _ballotId, String _optionId, dynamic _argIds) { + return List.generate(List.from(_argIds).length, + (index) => ArgumentCard(_ballotId, _optionId, _argIds[index])); +} + +class ArgumentCard extends StatefulWidget { + final String _ballotId; + final String _optionId; + final String _argId; + + ArgumentCard(this._ballotId, this._optionId, this._argId); + + @override + createState() { + return ArgumentCardState(); + } +} + +class ArgumentCardState extends State { + final StreamController _streamController = new StreamController(); + ArgumentCardState(); + + @override + dispose() { + _streamController.close(); + super.dispose(); + } + + _queryArgument(context) async { + final _client = GraphQLProvider.of(context).value; + final _data0 = await _client.query( + QueryOptions(document: gql(GQLApi.queryArgumentById), variables: { + 'ballotId': widget._ballotId, + 'optionId': widget._optionId, + 'argId': widget._argId + })); + if (_data0.data != null && !_streamController.isClosed) { + _streamController.add(_data0.data?['qArgumentById']); + } + final _subscription = _client.subscribe(SubscriptionOptions( + document: gql(GQLApi.subscribeArgumentById), + variables: { + 'ballotId': widget._ballotId, + 'optionId': widget._optionId, + 'argId': widget._argId + })); + _subscription.listen((result) { + if (result.data != null && !_streamController.isClosed) { + _streamController.add(result.data?['sArgumentById']); + } + }); + } + + @override + build(BuildContext context) { + _queryArgument(context); + return StreamBuilder( + stream: _streamController.stream, + builder: (context, AsyncSnapshot snapshot) { + return withSnapshot( + context: context, + snapshot: snapshot, + builder: (_argument) { + final _upvoted = List.from(_argument['aUpVotes']).length > 0; + GraphQLClient _client = GraphQLProvider.of(context).value; + return Card( + child: Column(children: [ + Container( + padding: ButtonBarTheme.of(context).buttonPadding ?? + EdgeInsets.only(left: 8.0), + child: MarkdownBody( + data: snapshot.data['aText'], + shrinkWrap: true, + )), + BottomAppBar( + child: Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + IconButton( + icon: _upvoted + ? Icon(Icons.favorite) + : Icon(Icons.favorite_outline), + onPressed: () { + _client.mutate(MutationOptions( + document: gql(_upvoted + ? GQLApi.deleteUpVote + : GQLApi.createUpVote), + variables: { + 'cuaOptionId': widget._optionId, + 'cuaBallotId': widget._ballotId, + 'cuaArgumentId': widget._argId + })); + }), + ])) + ])); + }); + }); + } +} diff --git a/ui/lib/components/auth_gate.dart b/ui/lib/components/auth_gate.dart new file mode 100644 index 0000000..88340a2 --- /dev/null +++ b/ui/lib/components/auth_gate.dart @@ -0,0 +1,28 @@ +import 'package:swarm/components/utils.dart'; +import 'package:firebase_auth/firebase_auth.dart'; +import 'package:flutter/material.dart'; +import 'package:swarm/screens/dashboard.dart'; +import 'package:swarm/screens/login.dart'; + +class AuthGate extends StatelessWidget { + AuthGate(); + + @override + Widget build(BuildContext context) { + return Scaffold( + body: StreamBuilder( + stream: FirebaseAuth.instance.authStateChanges().map(toMaybe), + builder: (BuildContext ctx, AsyncSnapshot> snapshot) { + return withSnapshot>( + context: ctx, + snapshot: snapshot, + builder: (Maybe user) { + Widget _child = Login(); + if (user is Just) { + _child = Dashboard((user as Just).content); + } + return _child; + }); + })); + } +} diff --git a/ui/lib/components/ballot_card.dart b/ui/lib/components/ballot_card.dart new file mode 100644 index 0000000..804ca87 --- /dev/null +++ b/ui/lib/components/ballot_card.dart @@ -0,0 +1,155 @@ +import 'dart:async'; +import 'package:flutter/material.dart'; +import 'package:swarm/screens/viewBallot.dart'; +import 'package:swarm/screens/newDelegation.dart'; +import 'package:swarm/screens/dashboard.dart'; +import 'package:flutter_markdown/flutter_markdown.dart'; +import 'package:graphql_flutter/graphql_flutter.dart'; +import 'package:swarm/data/gql_api.dart'; +import 'package:swarm/components/utils.dart'; + +class BallotCard extends StatefulWidget { + final String _ballotId; + BallotCard(this._ballotId); + @override + createState() { + return BallotCardState(); + } +} + +class BallotCardState extends State { + final StreamController _streamController = new StreamController(); + BallotCardState(); + + @override + dispose() { + print('#################### calling dispose BallotCard'); + _streamController.close(); + super.dispose(); + } + + // TODO (drsk) factor snapshot/update logic out + _queryBallot(context) async { + final _client = GraphQLProvider.of(context).value; + final _data0 = await _client.query(QueryOptions( + document: gql(GQLApi.queryBallotById), + variables: {'ballotId': this.widget._ballotId})); + if (_data0.data?['qBallotById'] != null && !_streamController.isClosed) { + _streamController.add(_data0.data!['qBallotById']); + } + final _subscription = _client.subscribe(SubscriptionOptions( + document: gql(GQLApi.subscribeBallotById), + variables: {'ballotId': this.widget._ballotId})); + _subscription.listen((result) { + if (!result.hasException && + result.data != null && + result.data?['sBallotById'] != null && + !_streamController.isClosed) { + print('ballot card stream event:'); + print(result.data.toString()); + _streamController.add(result.data?['sBallotById']); + } + }); + } + + @override + build(BuildContext context) { + _queryBallot(context); + return StreamBuilder( + stream: _streamController.stream, + builder: (BuildContext context, AsyncSnapshot snapshot) { + return withSnapshot( + context: context, + snapshot: snapshot, + builder: (_ballot) { + print('############## ballotId'); + print(this.widget._ballotId); + final String? _delegateeM = + List.from(_ballot['bDelegations']).length > 0 + ? _ballot['bDelegations'][0]['dDelegatee'] + : null; + return GestureDetector( + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (ctx) => GraphQLProvider( + client: GraphQLProvider.of(context), + child: BallotView(this.widget._ballotId)))); + }, + child: Card( + child: Column(children: [ + ListTile( + contentPadding: + ButtonBarTheme.of(context).buttonPadding ?? + EdgeInsets.only(left: 8.0), + title: Text(_ballot['bTitle'], + style: Theme.of(context).textTheme.headline6)), + Align( + alignment: Alignment.topLeft, + child: Container( + padding: + ButtonBarTheme.of(context).buttonPadding ?? + EdgeInsets.only(left: 8.0), + child: MarkdownBody( + data: _ballot['bDescription'], + shrinkWrap: true)), + ), + BottomAppBar( + child: Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Mutation( + options: MutationOptions( + document: gql(GQLApi.deleteBallot)), + builder: (RunMutation runMutation, + QueryResult? result) { + return IconButton( + icon: Icon(Icons.delete), + onPressed: () { + runMutation({ + 'dbaBallotId': + this.widget._ballotId, + }); + }); + }), + (_delegateeM == null + ? Text('') + : Query( + options: QueryOptions( + document: + gql(GQLApi.queryFishByUserId), + variables: {'qfUserId': _delegateeM}), + builder: (QueryResult result, + {VoidCallback? refetch, + FetchMore? fetchMore}) { + return withQueryResult( + context: context, + result: result, + field: 'queryFishByUserId', + builder: (_fish) => + _fish?['fName'] ?? 'anonymous'); + })), + IconButton( + icon: Icon(Icons.forward_to_inbox, + color: _delegateeM != null + ? Colors.pink + : Colors.black), + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (ctx) => GraphQLProvider( + client: + GraphQLProvider.of(context), + child: NewDelegation( + this.widget._ballotId)))); + }), + ])) + ]), + )); + }); + }); + } +} diff --git a/ui/lib/components/fish_menu.dart b/ui/lib/components/fish_menu.dart new file mode 100644 index 0000000..55e9b89 --- /dev/null +++ b/ui/lib/components/fish_menu.dart @@ -0,0 +1,84 @@ +import 'package:flutter/material.dart'; +import 'package:graphql_flutter/graphql_flutter.dart'; +import 'package:swarm/data/gql_api.dart'; +import 'package:share_plus/share_plus.dart'; +import 'package:uuid/uuid.dart'; +import 'package:uuid/uuid_util.dart'; +import 'package:swarm/screens/viewProfile.dart'; +import 'package:swarm/screens/editProfile.dart'; +import 'package:swarm/components/utils.dart'; + +var uuid = new Uuid(options: {'grng': UuidUtil.cryptoRNG}); + +class FishSelector extends StatelessWidget { + FishSelector(this._fish); + final dynamic _fish; + @override + Widget build(BuildContext context) { + return ListTile( + title: Text(_fish['fName']), + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (ctx) => ProfileView(_fish['fProfile']))); + }, + ); + } +} + +class FishView extends StatelessWidget { + final String _token; + FishView(this._token); + @override + Widget build(BuildContext context) { + Widget child = Query( + options: QueryOptions(document: gql(GQLApi.queryFish)), + builder: (QueryResult result, + {VoidCallback? refetch, FetchMore? fetchMore}) { + return withQueryResult( + context: context, + result: result, + field: 'qFish', + builder: (_fish) => Scaffold( + appBar: AppBar(title: Text('Members')), + bottomNavigationBar: BottomAppBar( + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + mainAxisSize: MainAxisSize.max, + children: [ + IconButton( + icon: Icon(Icons.edit), + onPressed: () => Navigator.push( + context, + MaterialPageRoute( + builder: (ctx) => GraphQLProvider( + client: GraphQLProvider.of(context), + child: EditProfileForm(_token))))), + Mutation( + options: MutationOptions( + document: gql(GQLApi.createInvite)), + builder: + (RunMutation runMutation, QueryResult? result) { + return IconButton( + icon: Icon(Icons.qr_code_sharp), + onPressed: () async { + final _inviteToken = uuid.v4( + options: {'rng': UuidUtil.cryptoRNG}); + runMutation({'ciaToken': _inviteToken}); + print('Created invite:' + _inviteToken); + Share.share(_inviteToken, + subject: '>~^>a >~^>a >~^>a'); + }); + }) + ])), + body: ListView( + padding: EdgeInsets.zero, + reverse: true, + children: List.from( + _fish.map((f) => FishSelector(f)))))); + }); + + return child; + } // +} diff --git a/ui/lib/components/menu.dart b/ui/lib/components/menu.dart new file mode 100644 index 0000000..d5ef965 --- /dev/null +++ b/ui/lib/components/menu.dart @@ -0,0 +1,71 @@ +import 'package:flutter/material.dart'; +import 'package:graphql_flutter/graphql_flutter.dart'; +import 'package:swarm/data/gql_api.dart'; +import 'package:swarm/screens/newSwarm.dart'; +import 'package:swarm/components/utils.dart'; +import 'package:swarm/screens/joinSwarm.dart'; + +class SwarmSelector extends StatelessWidget { + SwarmSelector(this._swarm, this._setSwarm); + final dynamic _swarm; + final Function(String swarmId, String swarmName) _setSwarm; + @override + Widget build(BuildContext context) { + return ListTile( + title: Text(_swarm['wrValue']), + onTap: () { + _setSwarm(_swarm['wrRef'], _swarm['wrValue']); + Navigator.pop(context); + }); + } +} + +class Menu extends StatelessWidget { + Menu(this._setSwarm); + final Function(String swarmId, String swarmName) _setSwarm; + @override + Widget build(BuildContext context) { + final _queryUserSwarm = GQLApi.queryUserSwarms; + return Query( + options: QueryOptions(document: gql(_queryUserSwarm)), + builder: (QueryResult result, + {VoidCallback? refetch, FetchMore? fetchMore}) { + print(result.exception.toString()); + return withQueryResult( + context: context, + result: result, + field: 'qUserSwarms', + refetch: refetch, + builder: (swarms) => Scaffold( + appBar: AppBar(title: Text('Choose a swarm')), + bottomNavigationBar: BottomAppBar( + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + mainAxisSize: MainAxisSize.max, + children: [ + IconButton( + icon: Icon(Icons.edit), + onPressed: () => Navigator.push( + context, + MaterialPageRoute( + builder: (ctx) => GraphQLProvider( + client: GraphQLProvider.of(context), + child: NewSwarmForm())))), + IconButton( + icon: Icon(Icons.qr_code), + onPressed: () => Navigator.push( + context, + MaterialPageRoute( + builder: (ctx) => GraphQLProvider( + client: GraphQLProvider.of(context), + child: JoinSwarmForm())))) + ], + )), + body: ListView( + padding: EdgeInsets.zero, + reverse: true, + children: List.from( + swarms.map((s) => SwarmSelector(s, _setSwarm)))))); + }); + } +} diff --git a/ui/lib/components/options_card.dart b/ui/lib/components/options_card.dart new file mode 100644 index 0000000..783c338 --- /dev/null +++ b/ui/lib/components/options_card.dart @@ -0,0 +1,252 @@ +import 'dart:async'; + +import 'package:flutter/material.dart'; +import 'package:graphql_flutter/graphql_flutter.dart'; +import 'package:swarm/data/gql_api.dart'; +import 'package:flutter_rating_bar/flutter_rating_bar.dart'; +import 'package:flutter_markdown/flutter_markdown.dart'; +import 'package:swarm/screens/viewArguments.dart'; +import 'package:swarm/components/utils.dart'; + +List optionCards(String _ballotId, List oIds) { + return List.from(oIds).map((oId) => OptionsCard(_ballotId, oId)).toList(); +} + +class OptionsCard extends StatefulWidget { + final String _ballotId; + final String _oId; + OptionsCard(this._ballotId, this._oId); + + @override + _OptionsCardState createState() => _OptionsCardState(); +} + +class _OptionsCardState extends State { + Map _stars = {}; + final StreamController _streamController = new StreamController(); + _OptionsCardState(); + + @override + dispose() { + _streamController.close(); + super.dispose(); + } + + _queryOption(context) async { + final _client = GraphQLProvider.of(context).value; + final _data0 = await _client.query(QueryOptions( + document: gql(GQLApi.queryOption), + variables: {'ballotId': widget._ballotId, 'oId': widget._oId})); + if (_data0.data?['qOption'] != null && !_streamController.isClosed) { + _streamController.add(_data0.data!['qOption']); + } + final _subscription = _client.subscribe(SubscriptionOptions( + document: gql(GQLApi.subscribeOption), + variables: {'ballotId': widget._ballotId, 'oId': widget._oId})); + _subscription.listen((result) { + if (result.data?['sOption'] != null && !_streamController.isClosed) { + print(result.data!['sOption']['oArguments']); + _streamController.add(result.data!['sOption']); + } + }); + } + + double _nrOfStarsToDouble(String nrOfStars) { + switch (nrOfStars) { + case 'ZeroStars': + return 0.0; + case 'OneStar': + return 1.0; + case 'TwoStars': + return 2.0; + case 'ThreeStars': + return 3.0; + case 'FourStars': + return 4.0; + case 'FiveStars': + return 5.0; + default: + return 0.0; + } + } + + String _doubleToNrOfStars(double stars) { + switch (stars.round()) { + case 0: + return 'ZeroStars'; + case 1: + return 'OneStar'; + case 2: + return 'TwoStars'; + case 3: + return 'ThreeStars'; + case 4: + return 'FourStars'; + case 5: + return 'FiveStars'; + default: + return 'ZeroStars'; + } + } + + @override + build(BuildContext context) { + _queryOption(context); + return StreamBuilder( + stream: _streamController.stream, + builder: (BuildContext context, AsyncSnapshot snapshot) { + return withSnapshot( + context: context, + snapshot: snapshot, + builder: (_option) { + final _votes = _option['oVotes']; + final _rating = _stars[widget._oId] ?? + (_votes.length == 0 + ? 0.0 + : _nrOfStarsToDouble(_votes[0]['value']['vStars'])); + return Card( + child: Column(children: [ + ListTile( + contentPadding: + ButtonBarTheme.of(context).buttonPadding ?? + EdgeInsets.only(left: 8.0), + title: Text(_option['oTitle'], + style: Theme.of(context).textTheme.headline6)), + Align( + alignment: Alignment.topLeft, + child: Container( + padding: ButtonBarTheme.of(context).buttonPadding ?? + EdgeInsets.only(left: 8.0), + child: MarkdownBody( + data: _option['oDescription'], + shrinkWrap: true, + ))), + BottomAppBar( + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Mutation( + options: MutationOptions( + document: gql(GQLApi.deleteOption)), + builder: (RunMutation runMutation, + QueryResult? result) { + return IconButton( + icon: Icon(Icons.delete), + onPressed: () { + runMutation({ + 'doaBallotId': widget._ballotId, + 'doaOptionId': widget._oId + }); + }); + }), + Stack(children: [ + IconButton( + icon: Icon(Icons.forum), + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (ctx) => + GraphQLProvider( + client: + GraphQLProvider.of( + context), + child: ArgumentsView( + widget._ballotId, + widget._oId, + IProContra.IPro)))); + }), + Positioned( + top: 3.0, + right: 4.0, + child: Text( + (List.from(_option['oArguments']) + ..retainWhere((arg) => + arg['value'] + ?['aProContra'] == + 'Pro')) + .length + .toString(), + style: TextStyle(color: Colors.pink))) + ]), + Stack(children: [ + IconButton( + icon: Icon(Icons.forum_outlined), + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (ctx) => + GraphQLProvider( + client: + GraphQLProvider.of( + context), + child: ArgumentsView( + widget._ballotId, + widget._oId, + IProContra + .IContra)))); + }), + Positioned( + top: 3.0, + right: 4.0, + child: Text( + (List.from(_option['oArguments']) + ..retainWhere((arg) => + arg['value'] + ?['aProContra'] == + 'Contra')) + .length + .toString(), + style: TextStyle(color: Colors.pink))) + ]), + Mutation( + options: MutationOptions( + document: gql(GQLApi.createVote), + ), + builder: (RunMutation runMutation, + QueryResult? result) { + return IconButton( + icon: Icon(Icons.how_to_vote), + onPressed: () async { + runMutation({ + 'cvaBallotId': widget._ballotId, + 'cvaOptionId': widget._oId, + 'cvaStars': _doubleToNrOfStars( + _stars[widget._oId] ?? 0.0) + }); + }); + }), + ]), + Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + RatingBar.builder( + initialRating: _rating, + itemSize: 30, + minRating: 0, + direction: Axis.horizontal, + allowHalfRating: false, + itemCount: 5, + itemPadding: + EdgeInsets.symmetric(horizontal: 4.0), + itemBuilder: (context, _) => Icon( + Icons.star, + color: Colors.black, + ), + onRatingUpdate: (rating) { + _stars[widget._oId] = rating; + setState(() {}); + }, + ), + ]) + ]), + ) + ])); + }); + }); + } +} diff --git a/ui/lib/components/statistic_card.dart b/ui/lib/components/statistic_card.dart new file mode 100644 index 0000000..fdcb3ea --- /dev/null +++ b/ui/lib/components/statistic_card.dart @@ -0,0 +1,120 @@ +import 'dart:async'; +import 'package:graphql_flutter/graphql_flutter.dart'; +import 'package:flutter/material.dart'; +import 'package:percent_indicator/percent_indicator.dart'; +import 'package:charts_flutter/flutter.dart' as charts; +import 'package:swarm/data/gql_api.dart'; +import 'package:swarm/components/utils.dart'; + +class StatisticCard extends StatefulWidget { + final String _ballotId; + StatisticCard(this._ballotId); + + @override + createState() { + return StatisticCardState(); + } +} + +class StatisticCardState extends State { + final StreamController _streamController = new StreamController(); + StatisticCardState(); + + @override + dispose() { + _streamController.close(); + super.dispose(); + } + + _queryResults(context) async { + final _client = GraphQLProvider.of(context).value; + final _data0 = await _client.query(QueryOptions( + document: gql(GQLApi.queryBallotResult), + variables: {'ballotId': widget._ballotId})); + if (_data0.data?['qBallotResult'] != null && !_streamController.isClosed) { + _streamController.add(_data0.data!['qBallotResult']); + } + _streamController.add(_data0.data?['qBallotResult']); + final _subscription = _client.subscribe(SubscriptionOptions( + document: gql(GQLApi.subscribeBallotResult), + variables: {'ballotId': widget._ballotId})); + _subscription.listen((result) { + if (result.data?['sBallotResult'] != null && + !_streamController.isClosed) { + _streamController.add(result.data!['sBallotResult']); + } + }); + } + + @override + build(BuildContext context) { + _queryResults(context); + return StreamBuilder( + stream: _streamController.stream, + builder: (context, AsyncSnapshot snapshot) { + return withSnapshot( + context: context, + snapshot: snapshot, + builder: (_ballotResult) { + Widget pieChart = Text('Something went wrong'); + Widget turnOut = Text('Something went wrong'); + final _nrOfOptions = List.from(_ballotResult['brVotes']).length; + if (_nrOfOptions == 0 || _ballotResult['brTurnout'] == 0) { + pieChart = Text('no votes yet'); + turnOut = Text(' - '); + } else { + final Map _idToTitle = Map.fromIterable( + snapshot.data['brOptions'], + key: (e) => e['wiId'], + value: (e) => e['wiValue']['oTitle']); + List> chartData = [ + new charts.Series( + id: 'Ballot Result', + colorFn: (_, i) => charts.ColorUtil.fromDartColor( + Colors.grey[i == null || i == 0 || i > 9 + ? 900 + : 900 - i * 100]!), + domainFn: (dynamic opt, _) => opt['key'], + measureFn: (dynamic opt, _) => opt['value']!, + labelAccessorFn: (dynamic opt, _) => + _idToTitle[opt['key']] ?? "no title", + outsideLabelStyleAccessorFn: (_, i) => + charts.TextStyleSpec( + color: charts.ColorUtil.fromDartColor( + Colors.pink)), + data: snapshot.data['brVotes']) + ]; + + pieChart = charts.PieChart( + chartData, + animate: true, + defaultRenderer: new charts.ArcRendererConfig( + arcWidth: 60, + arcRendererDecorators: [ + new charts.ArcLabelDecorator( + labelPosition: charts.ArcLabelPosition.auto) + ]), + ); + final double _turnOut = snapshot.data['brTurnout'].toDouble(); + turnOut = LinearPercentIndicator( + width: MediaQuery.of(context).size.width - 40, + percent: _turnOut.toDouble() / 1000.0, + progressColor: Colors.black, + animation: true, + lineHeight: 20.0, + animationDuration: 2000, + center: Text((_turnOut / 10.0).toString() + "%", + style: TextStyle(color: Colors.pink)), + linearStrokeCap: LinearStrokeCap.butt, + ); + } + return Card( + child: Column(children: [ + SizedBox(child: pieChart, height: 300), + Padding(padding: EdgeInsets.all(15.0), child: turnOut) + ]), + ); + }); + }); + } +} diff --git a/ui/lib/components/utils.dart b/ui/lib/components/utils.dart new file mode 100644 index 0000000..efc4f43 --- /dev/null +++ b/ui/lib/components/utils.dart @@ -0,0 +1,100 @@ +import 'package:flutter/material.dart'; +import 'package:fluttertoast/fluttertoast.dart'; +import 'package:graphql_flutter/graphql_flutter.dart'; + +class UtilFs { + static showToast(String message, BuildContext context) { + Fluttertoast.showToast( + msg: message, + toastLength: Toast.LENGTH_LONG, + gravity: ToastGravity.BOTTOM); + } +} + +Widget withQueryResult( + {required BuildContext context, + required QueryResult result, + required String field, + VoidCallback? refetch, + required Widget Function(dynamic data) builder}) { + Widget _child = Center( + child: Text('Something wen\'t wrong.', + style: Theme.of(context).textTheme.bodyText2)); + if (result.data?[field] != null) { + _child = builder(result.data![field]); + } + + if (result.isLoading) { + _child = Center( + child: + Text('loading ...', style: Theme.of(context).textTheme.bodyText2)); + } + + if (result.hasException) { + _child = Scaffold( + body: Center( + child: Text('Something wen\'t wrong.', + style: Theme.of(context).textTheme.bodyText2))); + if (result.exception is OperationException) { + _child = Scaffold( + body: Center( + child: GestureDetector( + child: Text('Network is down or server unreachable. Tap to retry.', + style: Theme.of(context).textTheme.bodyText2), + onTap: refetch), + )); + } + } + return _child; +} + +Widget withSnapshot( + {required BuildContext context, + required AsyncSnapshot snapshot, + required Widget Function(T data) builder}) { + Widget child = Center(child: Text('Something went wrong.')); + switch (snapshot.connectionState) { + case ConnectionState.none: + child = Center(child: Text('Connection: none.')); + break; + case ConnectionState.waiting: + child = Center(child: CircularProgressIndicator()); + break; + case ConnectionState.active: + if (snapshot.data != null) { + child = builder(snapshot.data!); + } else { + child = Center(child: Text('No data.')); + } + break; + case ConnectionState.done: + child = Center(child: Text('Connection done.')); + } + return child; +} + +class Maybe {} + +class Just extends Maybe { + final T a; + Just(this.a); + + T get content { + return a; + } +} + +class Nothing extends Maybe { + Nothing(); +} + +T fromMaybe(T def, Maybe m) { + if (m is Just) + return (m as Just).content; + else + return def; +} + +Maybe toMaybe(T? m) { + return m != null ? Just(m) : Nothing(); +} diff --git a/ui/lib/config/client.dart b/ui/lib/config/client.dart new file mode 100644 index 0000000..20f271b --- /dev/null +++ b/ui/lib/config/client.dart @@ -0,0 +1,71 @@ +import 'package:flutter/material.dart'; +import 'package:graphql_flutter/graphql_flutter.dart'; +import 'package:firebase_auth/firebase_auth.dart'; + +HttpLink httpLink({required String swarm}) { + return HttpLink('https://swarmapp.org/api/query', + defaultHeaders: {'swarm': swarm}); +} + +// HttpLink httpLink({required String swarm}) { +// return HttpLink('http://10.0.2.2:8000/api/query', +// defaultHeaders: {'swarm': swarm}); +// } + +AuthLink authLink(User user) { + return AuthLink(getToken: () => user.getIdToken()); +} + +Link link({required User user, required String swarm}) { + return Link.from([ + // common links run before every request + DedupeLink(), // dedupe requests + // TODO (drsk) factor out error handlers. + ErrorLink(onException: (request, forward, response) { + print( + 'link exception: ' + request.toString() + ' ' + response.toString()); + return (null); + }, onGraphQLError: (request, forward, response) { + print('graphql exception: ' + + request.toString() + + ' ' + + response.toString()); + return (null); + }), + ]).split( + (request) => request.isSubscription, + authLink(user).concat(wsLink(swarm: swarm)), + authLink(user).concat(httpLink(swarm: swarm))); +} + +WebSocketLink wsLink({required String swarm}) { + return WebSocketLink( + // 'ws://10.0.2.2:8000/api/subscribe', + 'wss://swarmapp.org/api/subscribe', + config: SocketClientConfig( + autoReconnect: true, + inactivityTimeout: null, + ), + ); +} + +class Config { + static ValueNotifier initializeClient( + {required User user, required String swarm}) { + ValueNotifier client = ValueNotifier(GraphQLClient( + // defaultPolicies: DefaultPolicies( + // query: Policies( + // fetch: FetchPolicy.noCache, + // error: ErrorPolicy.none, + // cacheReread: CacheRereadPolicy.ignoreAll, + // )), + link: link(user: user, swarm: swarm), + cache: new GraphQLCache()) + // cache: new GraphQLCache(store: HiveStore(), typePolicies: { + // 'WithId': TypePolicy(keyFields: {'wiId': true}), + // 'WithRef': TypePolicy(keyFields: {'wiRef': true}), + // })), + ); + return client; + } +} diff --git a/ui/lib/data/gql_api.dart b/ui/lib/data/gql_api.dart new file mode 100644 index 0000000..69a8863 --- /dev/null +++ b/ui/lib/data/gql_api.dart @@ -0,0 +1,312 @@ +class GQLApi { + // queries + static String queryAllBallots = """ + query QueryAllBallots { + qAllBallots + } + """; + + static String subscribeAllBallots = """ + subscription SubscribeAllBallots { + sAllBallots + } + """; + + static String queryAllOptions = """ + query QueryAllOptions(\$ballotId: String!) { + qAllOptions(qaoBId: \$ballotId) + } + """; + + static String subscribeAllOptions = """ + subscription SubscribeAllOptions(\$ballotId: String!) { + sAllOptions(qaoBId: \$ballotId) + } + """; + + // TODO (drsk) remove and only use queryOption + static String queryAllArguments = """ + query QueryAllArguments(\$ballotId: String!, \$oId: String!, \$proContra: IProContra!) { + qAllArguments(qaaBId: \$ballotId, qaaOId: \$oId, qaaProContra: \$proContra) + } + """; + + static String subscribeAllArguments = """ + subscription QueryAllArguments(\$ballotId: String!, \$oId: String!, \$proContra: IProContra!) { + sAllArguments(qaaBId: \$ballotId, qaaOId: \$oId, qaaProContra: \$proContra) + } + """; + + static String queryArgumentById = """ + query QueryArgumentById(\$ballotId: String!, \$optionId: String!, \$argId: String!) { + qArgumentById(qabBId: \$ballotId, qabOId: \$optionId, qabAId: \$argId) { + aUserId + aText + aProContra + aUpVotes { + uvUserId + } + } + } + """; + + static String subscribeArgumentById = """ + subscription SubscribeArgumentById(\$ballotId: String!, \$optionId: String!, \$argId: String!) { + sArgumentById(qabBId: \$ballotId, qabOId: \$optionId, qabAId: \$argId) { + aUserId + aText + aProContra + aUpVotes { + uvUserId + } + } + } + """; + + static String queryBallotResult = """ + query queryBallotResult(\$ballotId: String!) { + qBallotResult(qbrBId: \$ballotId) { + brVotes { + key + value + } + brTurnout + brOptions { + wiId + wiValue { + oTitle + oDescription + oUserId + oVotes { + key + value { + vStars + } + } + } + } + } + } + """; + + static String subscribeBallotResult = """ + subscription SubscribeBallotResult(\$ballotId: String!) { + sBallotResult(qbrBId: \$ballotId) { + brVotes { + key + value + } + brTurnout + brOptions { + wiId + wiValue { + oTitle + oDescription + oUserId + oVotes { + key + value { + vStars + } + } + } + } + } + } + """; + + static String queryBallotById = """ + query QueryBallotById(\$ballotId: String!) { + qBallotById(qbiBId: \$ballotId) { + bTitle + bDescription + bCreator + bDelegations { + dDelegatee + } + } + } + """; + + static String subscribeBallotById = """ + subscription QueryBallotById(\$ballotId: String!) { + sBallotById(qbiBId: \$ballotId) { + bTitle + bDescription + bCreator + bDelegations { + dDelegatee + } + } + } + """; + + static String queryOption = """ + query QueryOption(\$ballotId: String! \$oId: String!) { + qOption(qobBId: \$ballotId, qobOId : \$oId) { + oTitle + oDescription + oUserId + oVotes { + key + value { + vStars + } + } + oArguments { + key + value { + aProContra + } + } + } + } + """; + + static String subscribeOption = """ + subscription SubscribeOption(\$ballotId: String! \$oId: String!) { + sOption(qobBId: \$ballotId, qobOId : \$oId) { + oTitle + oDescription + oUserId + oVotes { + key + value { + vStars + } + } + oArguments { + key + value { + aProContra + } + } + } + } + """; + + static String queryUserSwarms = """ + query QueryUserSwarms { + qUserSwarms { + wrRef + wrValue + } + } + """; + + static String queryFish = """ + query QueryFish { + qFish { + fName + fUserId + fProfile + } + } + """; + + static String queryFishByUserId = """ + query QueryProfile (\$qfUserId: String!){ + qFishByUserId (qfUserId: \$qfUserId){ + fName + fUserId + fProfile + } + } + """; + + // mutations + static String updateFcmToken = """ + mutation UpdateFcmToken (\$uftToken : String!) { + mUpdateFcmToken ( + uftToken : \$uftToken + ) + } + """; + + static String createBallot = """ + mutation CreateBallot(\$cbaTitle: String!, \$cbaDescription: String!) { + mCreateBallot(cbaTitle: \$cbaTitle, cbaDescription: \$cbaDescription) + } + """; + + static String deleteBallot = """ + mutation DeleteBallot(\$dbaBallotId: String!) { + mDeleteBallot(dbaBallotId: \$dbaBallotId) + } + """; + + static String createVote = """ + mutation CreateVote (\$cvaBallotId: String!, \$cvaOptionId: String!, \$cvaStars: NrOfStars!) { + mCreateVote(cvaBallotId: \$cvaBallotId, cvaOptionId: \$cvaOptionId, cvaStars: \$cvaStars) + } + """; + + static String createDelegation = """ + mutation CreateDelegation (\$dmaBallotId: String!, \$dmaDelegateeId: String!) { + mCreateDelegation(dmaBallotId: \$dmaBallotId, dmaDelegateeId: \$dmaDelegateeId) + } + """; + + static String createArgument = """ + mutation CreateArgument(\$caaBallotId: String!, \$caaUserId: String!, \$caaOptionId: String!, + \$caaText: String!, \$caaProContra: IProContra!) { + mCreateArgument (caaBallotId: \$caaBallotId, caaUserId: \$caaUserId, caaOptionId: \$caaOptionId, caaText: \$caaText, caaProContra: \$caaProContra) + } + """; + + static String createUpVote = """ + mutation CreateUpVote(\$cuaBallotId: String!, \$cuaOptionId: String!, \$cuaArgumentId: String!) { + mCreateUpVote (cuaBallotId: \$cuaBallotId, cuaOptionId: \$cuaOptionId, cuaArgumentId: + \$cuaArgumentId) + } + """; + + static String deleteUpVote = """ + mutation CreateUpVote(\$cuaBallotId: String!, \$cuaOptionId: String!, \$cuaArgumentId: String!) { + mDeleteUpVote (duaBallotId: \$cuaBallotId, duaOptionId: \$cuaOptionId, duaArgumentId: + \$cuaArgumentId) + } + """; + + static String createOption = """ + mutation CreateOption(\$coaBallotId: String!, \$coaTitle: String!, \$coaDescription: String!) { + mCreateOption (coaTitle: \$coaTitle, coaDescription: \$coaDescription, coaBallotId: \$coaBallotId) + } + """; + + static String deleteOption = """ + mutation DeleteOption(\$doaBallotId: String!, \$doaOptionId: String!) { + mDeleteOption (doaBallotId: \$doaBallotId, doaOptionId: \$doaOptionId) + } + """; + + static String createSwarm = """ + mutation CreateSwarm (\$csaName: String!) { + mCreateSwarm (csaName: \$csaName) + } + """; + + static String createSwarm0 = """ + mutation CreateSwarm (\$csaName: String!) { + mCreateSwarm0 (csaName: \$csaName) + } + """; + + static String createInvite = """ + mutation CreateInvite (\$ciaToken: String!) { + mCreateInvite (ciaToken: \$ciaToken) + } + """; + + static String takeInvite = """ + mutation TakeInvite (\$tiaToken: String!) { + mTakeInvite (tiaToken: \$tiaToken) + } + """; + + static String updateProfile = """ + mutation UpdateProfile (\$upaBody: String!) { + mUpdateProfile(upaBody: \$upaBody) + } + """; +} diff --git a/ui/lib/firebase_options.dart b/ui/lib/firebase_options.dart new file mode 100644 index 0000000..f4199b5 --- /dev/null +++ b/ui/lib/firebase_options.dart @@ -0,0 +1,73 @@ +// File generated by FlutterFire CLI. +// ignore_for_file: lines_longer_than_80_chars +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; + } + // ignore: missing_enum_constant_in_switch + switch (defaultTargetPlatform) { + case TargetPlatform.android: + return android; + case TargetPlatform.iOS: + return ios; + case TargetPlatform.macOS: + throw UnsupportedError( + 'DefaultFirebaseOptions have not been configured for macos - ' + 'you can reconfigure this by running the FlutterFire CLI again.', + ); + } + + throw UnsupportedError( + 'DefaultFirebaseOptions are not supported for this platform.', + ); + } + + static const FirebaseOptions web = FirebaseOptions( + apiKey: 'AIzaSyBg1lDUiQ-xM3h8-PEw3Jhhy1iYkOqAKw4', + appId: '1:449991501895:web:78307267f7eaba936fa962', + messagingSenderId: '449991501895', + projectId: 'swarm-90059', + authDomain: 'swarm-90059.firebaseapp.com', + databaseURL: 'https://swarm-90059.firebaseio.com', + storageBucket: 'swarm-90059.appspot.com', + measurementId: 'G-5V8K1CXPW1', + ); + + static const FirebaseOptions android = FirebaseOptions( + apiKey: 'AIzaSyAxBDItoTn3q_PNCCB_j-I9Fmv_qjxtxPA', + appId: '1:449991501895:android:1086618353136c6e6fa962', + messagingSenderId: '449991501895', + projectId: 'swarm-90059', + databaseURL: 'https://swarm-90059.firebaseio.com', + storageBucket: 'swarm-90059.appspot.com', + ); + + static const FirebaseOptions ios = FirebaseOptions( + apiKey: 'AIzaSyDvQNSjZxMRTeYGoMbxT_2-VeSHUZGwhvU', + appId: '1:449991501895:ios:97ff37d5fb0413d16fa962', + messagingSenderId: '449991501895', + projectId: 'swarm-90059', + databaseURL: 'https://swarm-90059.firebaseio.com', + storageBucket: 'swarm-90059.appspot.com', + androidClientId: + '449991501895-b8bfb2742dbcblsgdgifr90sbo5pdg2j.apps.googleusercontent.com', + iosClientId: + '449991501895-uq8qqd42tr6uvmi5i4dqjk8j3bb4c3l2.apps.googleusercontent.com', + iosBundleId: 'com.swarmapp.swarm', + ); +} diff --git a/ui/lib/generated_plugin_registrant.dart b/ui/lib/generated_plugin_registrant.dart new file mode 100644 index 0000000..c6a4390 --- /dev/null +++ b/ui/lib/generated_plugin_registrant.dart @@ -0,0 +1,32 @@ +// +// Generated file. Do not edit. +// + +// ignore_for_file: directives_ordering +// ignore_for_file: lines_longer_than_80_chars + +import 'package:connectivity_plus_web/connectivity_plus_web.dart'; +import 'package:firebase_auth_web/firebase_auth_web.dart'; +import 'package:firebase_core_web/firebase_core_web.dart'; +import 'package:firebase_messaging_web/firebase_messaging_web.dart'; +import 'package:fluttertoast/fluttertoast_web.dart'; +import 'package:google_sign_in_web/google_sign_in_web.dart'; +import 'package:share_plus_web/share_plus_web.dart'; +import 'package:shared_preferences_web/shared_preferences_web.dart'; +import 'package:url_launcher_web/url_launcher_web.dart'; + +import 'package:flutter_web_plugins/flutter_web_plugins.dart'; + +// ignore: public_member_api_docs +void registerPlugins(Registrar registrar) { + ConnectivityPlusPlugin.registerWith(registrar); + FirebaseAuthWeb.registerWith(registrar); + FirebaseCoreWeb.registerWith(registrar); + FirebaseMessagingWeb.registerWith(registrar); + FluttertoastWebPlugin.registerWith(registrar); + GoogleSignInPlugin.registerWith(registrar); + SharePlusPlugin.registerWith(registrar); + SharedPreferencesPlugin.registerWith(registrar); + UrlLauncherPlugin.registerWith(registrar); + registrar.registerMessageHandler(); +} diff --git a/ui/lib/main.dart b/ui/lib/main.dart new file mode 100644 index 0000000..dca9e22 --- /dev/null +++ b/ui/lib/main.dart @@ -0,0 +1,35 @@ +import 'package:swarm/components/auth_gate.dart'; +import 'package:flutter/material.dart'; +import 'package:firebase_core/firebase_core.dart'; +import 'firebase_options.dart'; + +void main() => runApp(MyApp()); + +class MyApp extends StatelessWidget { + MyApp(); + // Create the initialization Future outside of `build`: + Future _initialization() async { + WidgetsFlutterBinding.ensureInitialized(); + return Firebase.initializeApp( + options: DefaultFirebaseOptions.currentPlatform, + ); + } + + @override + Widget build(BuildContext context) { + final ThemeData _theme = ThemeData( + primaryColor: Color(0xff263238), + primaryColorLight: Color(0xff4f5b62), + primaryColorDark: Color(0xff000a12), + appBarTheme: AppBarTheme(backgroundColor: Colors.black)); + return FutureBuilder( + future: _initialization(), + builder: (context, snapshot) { + Widget child = Center( + child: Text('loading ...', + style: Theme.of(context).textTheme.bodyText2)); + if (snapshot.hasData) child = AuthGate(); + return MaterialApp(title: '~~SWARM~~', theme: _theme, home: child); + }); + } +} diff --git a/ui/lib/screens/dashboard.dart b/ui/lib/screens/dashboard.dart new file mode 100644 index 0000000..0417789 --- /dev/null +++ b/ui/lib/screens/dashboard.dart @@ -0,0 +1,151 @@ +import 'dart:async'; + +import 'package:swarm/components/fish_menu.dart'; +import 'package:swarm/screens/newBallot.dart'; +import 'package:swarm/screens/tabs/dashboard/ballots.dart'; +import 'package:swarm/config/client.dart'; +import 'package:flutter/material.dart'; +import 'package:firebase_auth/firebase_auth.dart'; +import 'package:firebase_messaging/firebase_messaging.dart'; +import 'package:swarm/components/menu.dart'; +import 'package:graphql_flutter/graphql_flutter.dart'; +import 'package:swarm/data/gql_api.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:swarm/components/utils.dart'; + +class SwarmInfo { + String swarm; + String swarmName; + SwarmInfo(this.swarm, this.swarmName); +} + +class Dashboard extends StatefulWidget { + final User _user; + Dashboard(this._user); + + createState() { + return DashboardState(_user); + } +} + +class DashboardState extends State { + final User _user; + final StreamController _swarmInfoStream = new StreamController(); + + DashboardState(this._user) { + initMethod(); + } + + @override + dispose() { + print('############# calling dispose Dashboard'); + _swarmInfoStream.close(); + super.dispose(); + } + + Future saveFcmTokenToBackend( + {required User user, required String fcmToken}) async { + ValueNotifier client = + Config.initializeClient(user: user, swarm: 'public'); + await client.value.mutate(MutationOptions( + document: gql(GQLApi.updateFcmToken), + variables: {'uftToken': fcmToken})); + } + + initMethod() async { + SharedPreferences _prefs = await SharedPreferences.getInstance(); + FirebaseMessaging messaging = FirebaseMessaging.instance; + String? fcmToken = await messaging.getToken(); + if (fcmToken != null) { + print('fcmToken ' + fcmToken); + } + FirebaseMessaging.onMessage.listen((RemoteMessage message) { + print('Received message ' + (message.notification?.title ?? 'no title')); + }); + + if (fcmToken != null) { + await saveFcmTokenToBackend(user: _user, fcmToken: fcmToken); + messaging.onTokenRefresh + .listen((fcm) => saveFcmTokenToBackend(user: _user, fcmToken: fcm)); + } + + String? _s = _prefs.getString('swarm'); + String? _n = _prefs.getString('swarmName'); + _swarmInfoStream.add(SwarmInfo(_s ?? 'public', _n ?? 'public')); + } + + void setSwarm(String _newSwarm, String _newSwarmName) async { + SharedPreferences _prefs = await SharedPreferences.getInstance(); + _prefs.setString('swarm', _newSwarm); + _prefs.setString('swarmName', _newSwarmName); + _swarmInfoStream.add(SwarmInfo(_newSwarm, _newSwarmName)); + } + + @override + Widget build(BuildContext context) { + return StreamBuilder( + stream: _swarmInfoStream.stream, + builder: (BuildContext context, AsyncSnapshot snapshot1) { + return withSnapshot( + context: context, + snapshot: snapshot1, + builder: (SwarmInfo _swarmInfo) { + final String _swarm = _swarmInfo.swarm; + final String _swarmName = _swarmInfo.swarmName; + final ValueNotifier _client = + Config.initializeClient(user: _user, swarm: _swarm); + return GraphQLProvider( + client: _client, + child: Scaffold( + appBar: AppBar(title: Text(_swarmName), actions: [ + IconButton( + icon: Icon(Icons.menu), + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (ctx) => GraphQLProvider( + client: _client, + child: Menu(setSwarm)))); + }) + ]), + bottomNavigationBar: BottomAppBar( + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + mainAxisSize: MainAxisSize.max, + children: [ + IconButton( + icon: Icon(Icons.logout), + onPressed: () async { + FirebaseAuth.instance.signOut(); + }, + ), + IconButton( + icon: Icon(Icons.create), + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (ctx) => GraphQLProvider( + client: _client, + child: NewBallotForm()))); + }, + ), + IconButton( + icon: Icon(Icons.contacts), + onPressed: () async { + String _token = await _user.getIdToken(); + Navigator.push( + context, + MaterialPageRoute( + builder: (ctx) => GraphQLProvider( + client: _client, + child: FishView(_token)))); + }) + ])), + body: Ballots(), + )); + }); + }); + } +} diff --git a/ui/lib/screens/editProfile.dart b/ui/lib/screens/editProfile.dart new file mode 100644 index 0000000..485d2a6 --- /dev/null +++ b/ui/lib/screens/editProfile.dart @@ -0,0 +1,82 @@ +import 'package:swarm/data/gql_api.dart'; +import 'package:flutter/material.dart'; +import 'package:swarm/config/client.dart'; +import 'package:graphql_flutter/graphql_flutter.dart'; + +class EditProfileForm extends StatefulWidget { + final String _token; + EditProfileForm(this._token); + + @override + EditProfileFormState createState() { + return EditProfileFormState(_token); + } +} + +class EditProfileFormState extends State { + final String _token; + final _formKey = GlobalKey(); + TextEditingController _controller = new TextEditingController(); + EditProfileFormState(this._token); + @override + Widget build(BuildContext context) { + Widget child = Text('Something went wrong'); + child = Scaffold( + appBar: AppBar(title: Text('Edit your profile')), + body: Form( + child: Column(children: [ + Expanded( + child: Query( + options: QueryOptions( + document: gql(GQLApi.queryFishByUserId), + variables: {'qfUserId': _token}), + builder: (QueryResult result, + {VoidCallback? refetch, FetchMore? fetchMore}) { + Widget child = Text('Internal error'); + if (result.hasException) { + child = Text(result.exception.toString()); + } + + if (result.isLoading) { + child = Text('loading'); + } + + if (result.data == null) { + child = Text('No data'); + } + if (result.data != null) { + final _fish = result.data?['qFishByUserId']; + _controller = TextEditingController( + text: (_fish != null) + ? _fish['fProfile'] + : "Write your profile here!"); + child = TextFormField( + expands: true, + minLines: null, + maxLines: null, + key: _formKey, + controller: _controller, + keyboardType: TextInputType.multiline); + } + return child; + })) + ])), + bottomNavigationBar: BottomAppBar( + child: Row(mainAxisAlignment: MainAxisAlignment.center, children: [ + Mutation( + options: MutationOptions(document: gql(GQLApi.updateProfile)), + builder: (RunMutation runMutation, QueryResult? result) { + return IconButton( + icon: Icon(Icons.check), + onPressed: () { + runMutation({ + 'upaBody': _controller.text, + }); + Navigator.pop(context); + }); + }) + ])), + ); + return child; + } +} diff --git a/ui/lib/screens/joinSwarm.dart b/ui/lib/screens/joinSwarm.dart new file mode 100644 index 0000000..720cfc4 --- /dev/null +++ b/ui/lib/screens/joinSwarm.dart @@ -0,0 +1,70 @@ +import 'package:flutter/cupertino.dart'; +import 'package:graphql_flutter/graphql_flutter.dart'; +import 'package:flutter/material.dart'; +import 'package:swarm/data/gql_api.dart'; + +class JoinSwarmForm extends StatefulWidget { + JoinSwarmForm(); + @override + JoinSwarmFormState createState() { + return JoinSwarmFormState(); + } +} + +class JoinSwarmFormState extends State { + JoinSwarmFormState(); + final _formKey = GlobalKey(); + TextEditingController _swarmNameController = TextEditingController(); + + @override + void dispose() { + _swarmNameController.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + Widget children = Text('Something went wrong.'); + final _takeInvite = GQLApi.takeInvite; + children = Scaffold( + appBar: AppBar(title: Text('Paste your invitiation token')), + body: Form( + key: _formKey, + child: TextFormField( + controller: _swarmNameController, + decoration: InputDecoration( + labelText: "Token", + ), + keyboardType: TextInputType.text, + validator: (value) { + if (value != null && value.isEmpty) { + return 'Invalid invitation token.'; + } + return null; + }, + )), + bottomNavigationBar: BottomAppBar( + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + mainAxisSize: MainAxisSize.max, + children: [ + Mutation( + options: MutationOptions(document: gql(_takeInvite)), + builder: (RunMutation runMutation, QueryResult? result) { + return IconButton( + icon: Icon(Icons.check), + onPressed: () async { + FormState? s = _formKey.currentState; + if (s != null && s.validate()) { + runMutation({ + 'tiaToken': _swarmNameController.text, + }); + Navigator.pop(context); + } + }); + }) + ])), + ); + return children; + } +} diff --git a/ui/lib/screens/login.dart b/ui/lib/screens/login.dart new file mode 100644 index 0000000..3088fe9 --- /dev/null +++ b/ui/lib/screens/login.dart @@ -0,0 +1,177 @@ +import 'package:firebase_auth/firebase_auth.dart'; +import 'package:flutter/material.dart'; +import 'package:swarm/screens/signup.dart'; +import 'package:google_sign_in/google_sign_in.dart'; + +Future signInWithGoogle() async { + // Trigger the authentication flow + final GoogleSignInAccount? googleUser = await GoogleSignIn().signIn(); + + // Obtain the auth details from the request + final GoogleSignInAuthentication? googleAuth = + await googleUser?.authentication; + + // Create a new credential + final OAuthCredential credential = GoogleAuthProvider.credential( + accessToken: googleAuth?.accessToken, + idToken: googleAuth?.idToken, + ); + + // Once signed in, return the UserCredential + await FirebaseAuth.instance.signInWithCredential(credential); +} + +class Login extends StatefulWidget { + Login(); + @override + createState() { + GoogleSignIn().signInSilently(); + return LoginState(); + } +} + +class LoginState extends State { + final TextEditingController emailController = TextEditingController(); + final TextEditingController passwordController = TextEditingController(); + final _formKey = GlobalKey(); + + @override + Widget build(BuildContext context) { + return Scaffold( + body: Container( + // decoration: BoxDecoration( + // image: DecorationImage( + // image: AssetImage('assets/images/login.jpg'), + // alignment: Alignment.bottomLeft, + // scale: 2.0, + // fit: BoxFit.none + // ), + // ), + child: Center( + child: Form( + key: _formKey, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Container( + width: MediaQuery.of(context).size.width / 1.3, + child: Column( + children: [ + TextFormField( + controller: emailController, + decoration: InputDecoration(labelText: "Email"), + keyboardType: TextInputType.emailAddress, + validator: (value) { + String pattern = + r'^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$'; + RegExp regex = new RegExp(pattern); + if (value != null && !regex.hasMatch(value)) + return 'Enter Valid Email'; + else + return null; + }, + ), + TextFormField( + controller: passwordController, + decoration: InputDecoration(labelText: "Password"), + validator: (value) { + return value != null && value.length < 4 + ? "Password must be at least 4 characters long" + : null; + }, + obscureText: true, + ), + ], + ), + ), + ButtonBar( + alignment: MainAxisAlignment.center, + children: [ + IconButton( + icon: Icon(Icons.login), + onPressed: () async { + if (_formKey.currentState != null && + _formKey.currentState!.validate()) { + try { + await FirebaseAuth.instance + .signInWithEmailAndPassword( + email: emailController.text, + password: passwordController.text); + } on FirebaseAuthException catch (e) { + if (e.code == 'user-not-found') { + print('No user found for that email.'); + } else if (e.code == 'wrong-password') { + print('Wrong password provided for that user.'); + } + } + } + }), + // RaisedButton( + // child: Text('Anonymous'), + // onPressed: () async { + // print('signing in'); + // try { + // _credentials = await FirebaseAuth.instance + // .signInAnonymously(); + // } on FirebaseAuthException catch (e) { + // print(e.message); + // } + // if (_credentials != null) { + // print('loading dashboard'); + // await Navigator.push( + // context, + // MaterialPageRoute( + // builder: (context) => + // Splash())); + // } else { + // print('error'); + // } + // }), + ], + ), + Padding( + padding: const EdgeInsets.all(10.0), + child: TextButton( + onPressed: () async { + print('signing in'); + try { + await signInWithGoogle(); + } on FirebaseAuthException catch (e) { + print(e.message); + } + }, + child: Container( + height: 20, + child: Text( + "Login with Google", + style: TextStyle( + decoration: TextDecoration.underline, + color: Colors.black), + ), + ), + ), + ), + Padding( + padding: const EdgeInsets.all(10.0), + child: TextButton( + onPressed: () { + Navigator.push(context, + MaterialPageRoute(builder: (context) => Signup())); + }, + child: Container( + height: 20, + child: Text( + "Be part of the swarm, sign up!", + style: TextStyle( + decoration: TextDecoration.underline, + color: Colors.black), + ), + ), + ), + ) + ], + ), + ), + ))); + } +} diff --git a/ui/lib/screens/markdown_preview.dart b/ui/lib/screens/markdown_preview.dart new file mode 100644 index 0000000..d330e62 --- /dev/null +++ b/ui/lib/screens/markdown_preview.dart @@ -0,0 +1,14 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_markdown/flutter_markdown.dart'; + +class MarkdownPreview extends StatelessWidget { + final String _content; + MarkdownPreview(this._content); + + @override + build(BuildContext context) { + return Scaffold( + appBar: AppBar(title: Text('Preview')), + body: MarkdownBody(data: _content)); + } +} diff --git a/ui/lib/screens/newArgument.dart b/ui/lib/screens/newArgument.dart new file mode 100644 index 0000000..0181fa1 --- /dev/null +++ b/ui/lib/screens/newArgument.dart @@ -0,0 +1,93 @@ +import 'package:flutter/cupertino.dart'; +import 'package:swarm/data/gql_api.dart'; +import 'package:flutter/material.dart'; +import 'package:graphql_flutter/graphql_flutter.dart'; +import 'package:swarm/screens/markdown_preview.dart'; +import 'package:swarm/screens/viewArguments.dart'; + +class NewArgumentForm extends StatefulWidget { + NewArgumentForm(this._ballotId, this._optionRef, this._proContra); + final String _ballotId; + final String _optionRef; + final IProContra _proContra; + + @override + NewArgumentFormState createState() { + return NewArgumentFormState(); + } +} + +class NewArgumentFormState extends State { + NewArgumentFormState(); + final _formKey = GlobalKey(); + TextEditingController _argumentController = TextEditingController(); + + @override + void dispose() { + _argumentController.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + Widget children = Text('Something went wrong.'); + children = Scaffold( + appBar: AppBar(title: Text('Create a new argument')), + body: Form( + key: _formKey, + child: Column(children: [ + Expanded( + child: TextFormField( + expands: true, + minLines: null, + maxLines: null, + controller: _argumentController, + decoration: InputDecoration( + labelText: "Argument. Use Markdown for text formatting!", + ), + keyboardType: TextInputType.multiline, + validator: (value) { + if (value != null && value.isEmpty) { + return 'Please give an argument pro/contra for the option!'; + } + return null; + }, + )), + ])), + bottomNavigationBar: BottomAppBar( + child: Row(mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ + IconButton( + icon: Icon(Icons.preview), + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => + MarkdownPreview(_argumentController.text))); + }), + Mutation( + options: MutationOptions(document: gql(GQLApi.createArgument)), + builder: (RunMutation runMutation, QueryResult? result) { + return IconButton( + icon: Icon(Icons.check), + onPressed: () async { + FormState? s = _formKey.currentState; + if (s != null && s.validate()) { + runMutation({ + 'caaBallotId': widget._ballotId, + 'caaOptionId': widget._optionRef, + 'caaProContra': showIProContra(widget._proContra), + 'caaUserId': 'drsk', + 'caaText': _argumentController.text, + }); + Navigator.pop(context); + } + }, + ); + }) + ]), + ), + ); + return children; + } +} diff --git a/ui/lib/screens/newBallot.dart b/ui/lib/screens/newBallot.dart new file mode 100644 index 0000000..45ccf9b --- /dev/null +++ b/ui/lib/screens/newBallot.dart @@ -0,0 +1,111 @@ +import 'package:flutter/cupertino.dart'; +import 'package:swarm/data/gql_api.dart'; +import 'package:flutter/material.dart'; +import 'package:graphql_flutter/graphql_flutter.dart'; +import 'package:swarm/screens/markdown_preview.dart'; + +class NewBallotForm extends StatefulWidget { + NewBallotForm(); + @override + NewBallotFormState createState() { + return NewBallotFormState(); + } +} + +class NewBallotFormState extends State { + NewBallotFormState(); + final _formKey = GlobalKey(); + TextEditingController _titleController = TextEditingController(); + TextEditingController _descriptionController = TextEditingController(); + + @override + void dispose() { + _descriptionController.dispose(); + _titleController.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + Widget children = Text('Something went wrong.'); + children = Scaffold( + appBar: AppBar(title: Text('Create a new ballot')), + bottomNavigationBar: BottomAppBar( + child: Row( + mainAxisSize: MainAxisSize.max, + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + IconButton( + icon: Icon(Icons.preview), + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => + MarkdownPreview(_descriptionController.text))); + }), + Mutation( + options: MutationOptions(document: gql(GQLApi.createBallot)), + builder: (RunMutation runMutation, QueryResult? result) { + return IconButton( + icon: Icon(Icons.check), + onPressed: () async { + FormState? s = _formKey.currentState; + if (s != null && s.validate()) { + runMutation({ + "cbaTitle": _titleController.text, + "cbaDescription": _descriptionController.text, + }); + Navigator.pop(context); + } + }); + }) + ])), + body: Form( + key: _formKey, + child: Column( + children: [ + TextFormField( + controller: _titleController, + decoration: InputDecoration( + labelText: "Ballot Title", + // border: new OutlineInputBorder( + // borderRadius: new BorderRadius.circular(25.0), + // borderSide: new BorderSide(), + // ), + ), + keyboardType: TextInputType.text, + validator: (value) { + if (value != null && value.isEmpty) { + return 'Please give a name for the ballot!'; + } + return null; + }, + ), + Expanded( + child: TextFormField( + controller: _descriptionController, + expands: true, + minLines: null, + maxLines: null, + decoration: InputDecoration( + labelText: + "Ballot Description. Use Markdown for text formatting!", + // border: new OutlineInputBorder( + // borderRadius: new BorderRadius.circular(25.0), + // borderSide: new BorderSide(), + // ), + ), + keyboardType: TextInputType.multiline, + validator: (value) { + if (value != null && value.isEmpty) { + return 'Please give a description of the ballot!'; + } + return null; + }, + )) + ], + ))); + return children; + } +} diff --git a/ui/lib/screens/newDelegation.dart b/ui/lib/screens/newDelegation.dart new file mode 100644 index 0000000..7efa851 --- /dev/null +++ b/ui/lib/screens/newDelegation.dart @@ -0,0 +1,55 @@ +import 'package:flutter/material.dart'; +import 'package:swarm/data/gql_api.dart'; +import 'package:graphql_flutter/graphql_flutter.dart'; +import 'package:swarm/components/utils.dart'; + +class FishSelector extends StatelessWidget { + FishSelector(this._ballotId, this._fish); + final dynamic _fish; + final String _ballotId; + @override + Widget build(BuildContext context) { + Widget child = Text('Something went wrong'); + child = Mutation( + options: MutationOptions(document: gql(GQLApi.createDelegation)), + builder: (RunMutation runMutation, QueryResult? result) { + return ListTile( + title: Text(_fish['fName']), + onTap: () { + runMutation({ + 'dmaBallotId': _ballotId, + 'dmaDelegateeId': _fish['fUserId'] + }); + Navigator.pop(context); + }, + ); + }); + return child; + } +} + +class NewDelegation extends StatelessWidget { + final String _ballotId; + NewDelegation(this._ballotId); + @override + Widget build(BuildContext context) { + Widget child = Text('Something went wrong'); + child = Query( + options: QueryOptions(document: gql(GQLApi.queryFish)), + builder: (QueryResult result, + {VoidCallback? refetch, FetchMore? fetchMore}) { + return withQueryResult( + context: context, + result: result, + field: 'qFish', + builder: (_fish) => ListView( + padding: EdgeInsets.zero, + reverse: true, + children: List.from( + _fish.map((f) => FishSelector(_ballotId, f))))); + }); + + return Scaffold( + appBar: AppBar(title: Text('Delegate this ballot')), body: child); + } +} diff --git a/ui/lib/screens/newOption.dart b/ui/lib/screens/newOption.dart new file mode 100644 index 0000000..bdb1d73 --- /dev/null +++ b/ui/lib/screens/newOption.dart @@ -0,0 +1,115 @@ +import 'package:flutter/cupertino.dart'; +import 'package:graphql_flutter/graphql_flutter.dart'; +import 'package:flutter/material.dart'; +import 'package:swarm/data/gql_api.dart'; +import 'package:swarm/screens/markdown_preview.dart'; + +class NewOptionForm extends StatefulWidget { + final String _ballotId; + NewOptionForm(this._ballotId); + + @override + NewOptionFormState createState() { + return NewOptionFormState(_ballotId); + } +} + +class NewOptionFormState extends State { + NewOptionFormState(this._ballotId); + final String _ballotId; + final _formKey = GlobalKey(); + final TextEditingController _titleController = TextEditingController(); + final TextEditingController _descriptionController = TextEditingController(); + + String get title { + return _titleController.text; + } + + String get description { + return _descriptionController.text; + } + + @override + Widget build(BuildContext context) { + Widget children = Text('Something went wrong.'); + children = Scaffold( + appBar: AppBar(title: Text('Create a new option')), + bottomNavigationBar: BottomAppBar( + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + mainAxisSize: MainAxisSize.max, + children: [ + IconButton( + icon: Icon(Icons.preview), + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => + MarkdownPreview(_descriptionController.text))); + }), + Mutation( + options: MutationOptions(document: gql(GQLApi.createOption)), + builder: (RunMutation runMutation, QueryResult? result) { + return IconButton( + icon: Icon(Icons.check), + onPressed: () async { + FormState? s = _formKey.currentState; + if (s != null && s.validate()) { + runMutation({ + 'coaBallotId': _ballotId, + 'coaUserId': 'drsk', + 'coaTitle': _titleController.text, + 'coaDescription': _descriptionController.text + }); + Navigator.pop(context); + } + }, + ); + }) + ])), + body: Form( + key: _formKey, + child: Column(children: [ + TextFormField( + controller: _titleController, + decoration: InputDecoration( + labelText: "Option Title", + // border: new OutlineInputBorder( + // borderRadius: new BorderRadius.circular(25.0), + // borderSide: new BorderSide(), + // ), + ), + keyboardType: TextInputType.text, + validator: (value) { + if (value != null && value.isEmpty) { + return 'Please give a name for the option!'; + } + return null; + }), + Expanded( + child: TextFormField( + controller: _descriptionController, + expands: true, + minLines: null, + maxLines: null, + decoration: InputDecoration( + labelText: + "Option Description. Use Markdown for text formatting!", + // border: new OutlineInputBorder( + // borderRadius: new BorderRadius.circular(25.0), + // borderSide: new BorderSide(), + // ), + ), + keyboardType: TextInputType.multiline, + validator: (value) { + if (value != null && value.isEmpty) { + return 'Please give a description for the option!'; + } + return null; + })) + ])), + ); + return children; + } // +} diff --git a/ui/lib/screens/newSwarm.dart b/ui/lib/screens/newSwarm.dart new file mode 100644 index 0000000..c07f6f7 --- /dev/null +++ b/ui/lib/screens/newSwarm.dart @@ -0,0 +1,70 @@ +import 'package:flutter/cupertino.dart'; +import 'package:graphql_flutter/graphql_flutter.dart'; +import 'package:flutter/material.dart'; +import 'package:swarm/data/gql_api.dart'; + +class NewSwarmForm extends StatefulWidget { + NewSwarmForm(); + @override + NewSwarmFormState createState() { + return NewSwarmFormState(); + } +} + +class NewSwarmFormState extends State { + NewSwarmFormState(); + final _formKey = GlobalKey(); + TextEditingController _swarmNameController = TextEditingController(); + + @override + void dispose() { + _swarmNameController.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + Widget children = Text('Something went wrong.'); + final _createSwarm = GQLApi.createSwarm; + children = Scaffold( + appBar: AppBar(title: Text('Create a new swarm')), + body: Form( + key: _formKey, + child: TextFormField( + controller: _swarmNameController, + decoration: InputDecoration( + labelText: "Name", + ), + keyboardType: TextInputType.text, + validator: (value) { + if (value != null && value.isEmpty) { + return 'Please give a for the new swarm!'; + } + return null; + }, + )), + bottomNavigationBar: BottomAppBar( + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + mainAxisSize: MainAxisSize.max, + children: [ + Mutation( + options: MutationOptions(document: gql(_createSwarm)), + builder: (RunMutation runMutation, QueryResult? result) { + return IconButton( + icon: Icon(Icons.check), + onPressed: () async { + FormState? s = _formKey.currentState; + if (s != null && s.validate()) { + runMutation({ + 'csaName': _swarmNameController.text, + }); + Navigator.pop(context); + } + }); + }) + ])), + ); + return children; + } +} diff --git a/ui/lib/screens/signup.dart b/ui/lib/screens/signup.dart new file mode 100644 index 0000000..b88c3f1 --- /dev/null +++ b/ui/lib/screens/signup.dart @@ -0,0 +1,122 @@ +import 'package:swarm/components/utils.dart'; +import 'package:flutter/material.dart'; +import 'package:firebase_auth/firebase_auth.dart'; + +class Signup extends StatefulWidget { + _SignupState createState() => _SignupState(); +} + +class _SignupState extends State { + TextEditingController emailController = TextEditingController(); + TextEditingController passwordController = TextEditingController(); + final _formKey = GlobalKey(); + bool busyView = false; + + @override + Widget build(BuildContext context) { + if (!busyView) { + return Scaffold( + body: Center( + child: Form( + key: _formKey, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Container( + width: MediaQuery.of(context).size.width / 1.3, + child: Column( + children: [ + TextFormField( + controller: emailController, + decoration: InputDecoration(labelText: "Email"), + keyboardType: TextInputType.emailAddress, + validator: (value) { + String pattern = + r'^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$'; + RegExp regex = new RegExp(pattern); + if (value != null && !regex.hasMatch(value)) + return 'Enter Valid Email'; + else + return null; + }, + ), + TextFormField( + controller: passwordController, + decoration: InputDecoration(labelText: "Password"), + validator: (value) { + return value != null && value.length < 4 + ? "Password must be at least 4 characters long" + : null; + }, + obscureText: true, + ), + ], + ), + ), + Column( + children: [ + Padding( + padding: const EdgeInsets.all(10.0), + child: TextButton( + onPressed: () async { + FormState? s = _formKey.currentState; + if (s == null ? false : s.validate()) { + setState(() { + busyView = true; + }); + UserCredential? _userCredential; + try { + _userCredential = await FirebaseAuth.instance + .createUserWithEmailAndPassword( + email: emailController.text, + password: passwordController.text); + } on FirebaseAuthException catch (e) { + if (e.code == 'weak-password') { + print('The password provided is too weak.'); + } else if (e.code == 'email-already-in-use') { + print( + 'The account already exists for that email.'); + } + } catch (e) { + print(e); + UtilFs.showToast(e.toString(), context); + } + + if (_userCredential != null) { + UtilFs.showToast("SignUp Successful", context); + Navigator.pop(context); + } else { + FocusScope.of(context) + .requestFocus(new FocusNode()); + UtilFs.showToast("SignUp Failed", context); + } + setState(() { + busyView = false; + }); + } + }, + child: Container( + height: 20, + child: Text("Sign up!", + style: TextStyle( + decoration: TextDecoration.underline, + color: Colors.black)), + ), + ), + ) + ], + ) + ], + ), + ), + ), + ); + } else { + return Scaffold( + body: Center( + child: CircularProgressIndicator(), + ), + ); + } + } +} diff --git a/ui/lib/screens/tabs/dashboard/ballots.dart b/ui/lib/screens/tabs/dashboard/ballots.dart new file mode 100644 index 0000000..f08f98d --- /dev/null +++ b/ui/lib/screens/tabs/dashboard/ballots.dart @@ -0,0 +1,67 @@ +import 'dart:async'; +import 'package:swarm/data/gql_api.dart'; +import 'package:flutter/material.dart'; +import 'package:graphql_flutter/graphql_flutter.dart'; +import 'package:swarm/components/ballot_card.dart'; +import 'package:swarm/components/utils.dart'; + +class Ballots extends StatefulWidget { + @override + createState() { + return BallotsState(); + } +} + +class BallotsState extends State { + final StreamController _streamController = new StreamController(); + BallotsState(); + @override + dispose() { + print('############ calling dispose Ballots'); + _streamController.close(); + super.dispose(); + } + + _queryBallots(context) async { + final _client = GraphQLProvider.of(context).value; + final _data0 = await _client + .query(QueryOptions(document: gql(GQLApi.queryAllBallots))); + if (_data0.data?['qAllBallots'] != null && !_streamController.isClosed) { + print('ballots query event'); + print(_data0.data); + _streamController.add(_data0.data!['qAllBallots']); + } + final _subscription = _client.subscribe( + SubscriptionOptions(document: gql(GQLApi.subscribeAllBallots))); + _subscription.listen((result) { + print("ballots stream event"); + print(result.data); + if (result.data?['sAllBallots'] != null && !_streamController.isClosed) { + _streamController.add(result.data!['sAllBallots']); + } + }); + } + + @override + Widget build(BuildContext context) { + _queryBallots(context); + return StreamBuilder( + stream: _streamController.stream, + builder: (context, AsyncSnapshot snapshot) { + return withSnapshot( + context: context, + snapshot: snapshot, + builder: (dynamic data) { + final _ballots = List.from(data); + print('############### _ballots'); + print(_ballots.toString()); + return new ListView.builder( + itemCount: _ballots.length, + itemBuilder: (context, index) { + print(_ballots[index].toString()); + return BallotCard(_ballots[index]); + }); + }); + }); + } +} diff --git a/ui/lib/screens/viewArguments.dart b/ui/lib/screens/viewArguments.dart new file mode 100644 index 0000000..21f676b --- /dev/null +++ b/ui/lib/screens/viewArguments.dart @@ -0,0 +1,108 @@ +import 'dart:async'; + +import 'package:flutter/material.dart'; +import 'package:graphql_flutter/graphql_flutter.dart'; +import 'package:swarm/data/gql_api.dart'; +import 'package:swarm/components/arguments_card.dart'; +import 'package:swarm/screens/newArgument.dart'; +import 'package:swarm/components/utils.dart'; + +enum IProContra { IPro, IContra } + +String showIProContra(IProContra pc) { + if (pc == IProContra.IPro) + return 'IPro'; + else + return 'IContra'; +} + +class ArgumentsView extends StatefulWidget { + final String _ballotId; + final String _oId; + final IProContra _proContra; + ArgumentsView(this._ballotId, this._oId, this._proContra); + + @override + createState() { + return ArgumentsViewState(); + } +} + +class ArgumentsViewState extends State { + final StreamController> _streamController = + new StreamController(); + ArgumentsViewState(); + + @override + dispose() { + _streamController.close(); + super.dispose(); + } + + _queryArguments(context) async { + final _client = GraphQLProvider.of(context).value; + final _data0 = await _client.query( + QueryOptions(document: gql(GQLApi.queryAllArguments), variables: { + 'ballotId': widget._ballotId, + 'oId': widget._oId, + 'proContra': showIProContra(widget._proContra) + })); + if (_data0.data?['qAllArguments'] != null && !_streamController.isClosed) { + _streamController.add(_data0.data!['qAllArguments']); + } + final _subscription = _client.subscribe(SubscriptionOptions( + document: gql(GQLApi.subscribeAllArguments), + variables: { + 'ballotId': widget._ballotId, + 'oId': widget._oId, + 'proContra': showIProContra(widget._proContra) + })); + _subscription.listen((result) { + if (result.data?['sAllArguments'] != null && + !_streamController.isClosed) { + _streamController.add(result.data!['sAllArguments']); + } + }); + } + + @override + build(BuildContext context) { + _queryArguments(context); + return StreamBuilder>( + stream: _streamController.stream, + builder: (context, AsyncSnapshot snapshot) { + return withSnapshot( + context: context, + snapshot: snapshot, + builder: (_argumentIds) { + return Scaffold( + appBar: AppBar(title: Text('Discussion')), + body: ListView.builder( + itemCount: _argumentIds.length, + itemBuilder: (context, index) { + return ArgumentCard(widget._ballotId, widget._oId, + _argumentIds[index]); + }), + bottomNavigationBar: BottomAppBar( + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + mainAxisSize: MainAxisSize.max, + children: [ + IconButton( + icon: Icon(Icons.create), + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (ctx) => GraphQLProvider( + client: GraphQLProvider.of(context), + child: NewArgumentForm( + widget._ballotId, + widget._oId, + widget._proContra)))); + }) + ]))); + }); + }); + } +} diff --git a/ui/lib/screens/viewBallot.dart b/ui/lib/screens/viewBallot.dart new file mode 100644 index 0000000..c8cc67a --- /dev/null +++ b/ui/lib/screens/viewBallot.dart @@ -0,0 +1,87 @@ +import 'dart:async'; +import 'package:flutter/material.dart'; +import 'package:swarm/components/ballot_card.dart'; +import 'package:graphql_flutter/graphql_flutter.dart'; +import 'package:swarm/components/statistic_card.dart'; +import 'package:swarm/components/options_card.dart'; +import 'package:swarm/data/gql_api.dart'; +import 'package:swarm/screens/newOption.dart'; +import 'package:swarm/components/utils.dart'; + +class BallotView extends StatefulWidget { + final String _ballotId; + BallotView(this._ballotId); + @override + createState() { + return BallotViewState(); + } +} + +class BallotViewState extends State { + final StreamController _streamController = new StreamController(); + BallotViewState(); + + @override + dispose() { + print('########### calling dispose BallotView'); + _streamController.close(); + super.dispose(); + } + + _queryNrOptions(context) async { + final _client = GraphQLProvider.of(context).value; + final _data0 = await _client.query(QueryOptions( + document: gql(GQLApi.queryAllOptions), + variables: {'ballotId': widget._ballotId})); + if (_data0.data?['qAllOptions'] != null && !_streamController.isClosed) + _streamController.add(_data0.data!['qAllOptions']); + final _subscription = _client.subscribe(SubscriptionOptions( + document: gql(GQLApi.subscribeAllOptions), + variables: {'ballotId': widget._ballotId})); + _subscription.listen((result) { + if (result.data != null && !_streamController.isClosed) { + _streamController.add(result.data!['sAllOptions']); + } + }); + } + + @override + build(BuildContext context) { + _queryNrOptions(context); + return StreamBuilder( + stream: _streamController.stream, + builder: (BuildContext context, AsyncSnapshot snapshot) { + return withSnapshot( + context: context, + snapshot: snapshot, + builder: (_ballot) { + return Scaffold( + appBar: AppBar(title: Text('Ballot details')), + body: ListView( + children: ([ + StatisticCard(widget._ballotId), + BallotCard(widget._ballotId), + ] + + optionCards(widget._ballotId, _ballot))), + bottomNavigationBar: BottomAppBar( + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + mainAxisSize: MainAxisSize.max, + children: [ + IconButton( + icon: Icon(Icons.edit), + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (ctx) => GraphQLProvider( + client: GraphQLProvider.of(context), + child: NewOptionForm( + widget._ballotId)))); + }), + ])), + ); + }); + }); + } +} diff --git a/ui/lib/screens/viewProfile.dart b/ui/lib/screens/viewProfile.dart new file mode 100644 index 0000000..ba0f197 --- /dev/null +++ b/ui/lib/screens/viewProfile.dart @@ -0,0 +1,16 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_markdown/flutter_markdown.dart'; + +class ProfileView extends StatelessWidget { + final String _profile; + ProfileView(this._profile); + @override + build(BuildContext context) { + return Scaffold( + appBar: AppBar(title: Text('Profile')), + body: SingleChildScrollView( + child: MarkdownBody( + data: _profile, + ))); + } +} diff --git a/ui/linux/.gitignore b/ui/linux/.gitignore new file mode 100644 index 0000000..d3896c9 --- /dev/null +++ b/ui/linux/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/ui/linux/CMakeLists.txt b/ui/linux/CMakeLists.txt new file mode 100644 index 0000000..5077262 --- /dev/null +++ b/ui/linux/CMakeLists.txt @@ -0,0 +1,95 @@ +cmake_minimum_required(VERSION 3.10) +project(runner LANGUAGES CXX) + +set(BINARY_NAME "ui") + +cmake_policy(SET CMP0063 NEW) + +set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") + +# Configure build 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. +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() + +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") + +# Flutter library and tool build rules. +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) + +# Application build +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) +apply_standard_settings(${BINARY_NAME}) +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) +add_dependencies(${BINARY_NAME} flutter_assemble) + +# 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) + +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. +if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") + install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() diff --git a/ui/linux/flutter/CMakeLists.txt b/ui/linux/flutter/CMakeLists.txt new file mode 100644 index 0000000..94f43ff --- /dev/null +++ b/ui/linux/flutter/CMakeLists.txt @@ -0,0 +1,86 @@ +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" + linux-x64 ${CMAKE_BUILD_TYPE} +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} +) diff --git a/ui/linux/flutter/generated_plugin_registrant.cc b/ui/linux/flutter/generated_plugin_registrant.cc new file mode 100644 index 0000000..f6f23bf --- /dev/null +++ b/ui/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) url_launcher_linux_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin"); + url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar); +} diff --git a/ui/linux/flutter/generated_plugin_registrant.h b/ui/linux/flutter/generated_plugin_registrant.h new file mode 100644 index 0000000..e0f0a47 --- /dev/null +++ b/ui/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/ui/linux/flutter/generated_plugins.cmake b/ui/linux/flutter/generated_plugins.cmake new file mode 100644 index 0000000..1fc8ed3 --- /dev/null +++ b/ui/linux/flutter/generated_plugins.cmake @@ -0,0 +1,16 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST + url_launcher_linux +) + +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) diff --git a/ui/linux/main.cc b/ui/linux/main.cc new file mode 100644 index 0000000..058e617 --- /dev/null +++ b/ui/linux/main.cc @@ -0,0 +1,10 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + // Only X11 is currently supported. + // Wayland support is being developed: https://github.com/flutter/flutter/issues/57932. + gdk_set_allowed_backends("x11"); + + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/ui/linux/my_application.cc b/ui/linux/my_application.cc new file mode 100644 index 0000000..bb6822a --- /dev/null +++ b/ui/linux/my_application.cc @@ -0,0 +1,44 @@ +#include "my_application.h" + +#include + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + GtkHeaderBar *header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "swarm"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + + 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)); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), nullptr)); +} diff --git a/ui/linux/my_application.h b/ui/linux/my_application.h new file mode 100644 index 0000000..72271d5 --- /dev/null +++ b/ui/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/ui/pubspec.lock b/ui/pubspec.lock new file mode 100644 index 0000000..95bb5f3 --- /dev/null +++ b/ui/pubspec.lock @@ -0,0 +1,775 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + args: + dependency: transitive + description: + name: args + url: "https://pub.dartlang.org" + source: hosted + version: "2.3.0" + async: + dependency: transitive + description: + name: async + url: "https://pub.dartlang.org" + source: hosted + version: "2.8.2" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + characters: + dependency: transitive + description: + name: characters + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0" + charcode: + dependency: transitive + description: + name: charcode + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.1" + charts_common: + dependency: transitive + description: + name: charts_common + url: "https://pub.dartlang.org" + source: hosted + version: "0.12.0" + charts_flutter: + dependency: "direct main" + description: + name: charts_flutter + url: "https://pub.dartlang.org" + source: hosted + version: "0.12.0" + clock: + dependency: transitive + description: + name: clock + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + collection: + dependency: transitive + description: + name: collection + url: "https://pub.dartlang.org" + source: hosted + version: "1.15.0" + connectivity_plus: + dependency: transitive + description: + name: connectivity_plus + url: "https://pub.dartlang.org" + source: hosted + version: "1.4.0" + connectivity_plus_linux: + dependency: transitive + description: + name: connectivity_plus_linux + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.1" + connectivity_plus_macos: + dependency: transitive + description: + name: connectivity_plus_macos + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.1" + connectivity_plus_platform_interface: + dependency: transitive + description: + name: connectivity_plus_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.1" + connectivity_plus_web: + dependency: transitive + description: + name: connectivity_plus_web + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0+1" + connectivity_plus_windows: + dependency: transitive + description: + name: connectivity_plus_windows + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0" + crypto: + dependency: transitive + description: + name: crypto + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.1" + cupertino_icons: + dependency: "direct main" + description: + name: cupertino_icons + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.4" + dbus: + dependency: transitive + description: + name: dbus + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.6" + fake_async: + dependency: transitive + description: + name: fake_async + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0" + ffi: + dependency: transitive + description: + name: ffi + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.2" + file: + dependency: transitive + description: + name: file + url: "https://pub.dartlang.org" + source: hosted + version: "6.1.2" + firebase_auth: + dependency: "direct main" + description: + name: firebase_auth + url: "https://pub.dartlang.org" + source: hosted + version: "3.3.4" + firebase_auth_platform_interface: + dependency: transitive + description: + name: firebase_auth_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "6.1.9" + firebase_auth_web: + dependency: transitive + description: + name: firebase_auth_web + url: "https://pub.dartlang.org" + source: hosted + version: "3.3.5" + firebase_core: + dependency: "direct main" + description: + name: firebase_core + url: "https://pub.dartlang.org" + source: hosted + version: "1.10.6" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "4.2.3" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + url: "https://pub.dartlang.org" + source: hosted + version: "1.5.3" + firebase_messaging: + dependency: "direct main" + description: + name: firebase_messaging + url: "https://pub.dartlang.org" + source: hosted + version: "11.2.4" + firebase_messaging_platform_interface: + dependency: transitive + description: + name: firebase_messaging_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.4" + firebase_messaging_web: + dependency: transitive + description: + name: firebase_messaging_web + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.5" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_markdown: + dependency: "direct main" + description: + name: flutter_markdown + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.9" + flutter_rating_bar: + dependency: "direct main" + description: + name: flutter_rating_bar + url: "https://pub.dartlang.org" + source: hosted + version: "4.0.0" + 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" + fluttertoast: + dependency: "direct main" + description: + name: fluttertoast + url: "https://pub.dartlang.org" + source: hosted + version: "8.0.8" + google_sign_in: + dependency: "direct main" + description: + name: google_sign_in + url: "https://pub.dartlang.org" + source: hosted + version: "5.2.1" + google_sign_in_platform_interface: + dependency: transitive + description: + name: google_sign_in_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + google_sign_in_web: + dependency: transitive + description: + name: google_sign_in_web + url: "https://pub.dartlang.org" + source: hosted + version: "0.10.0+3" + gql: + dependency: transitive + description: + name: gql + url: "https://pub.dartlang.org" + source: hosted + version: "0.13.0" + gql_dedupe_link: + dependency: transitive + description: + name: gql_dedupe_link + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" + gql_error_link: + dependency: transitive + description: + name: gql_error_link + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.0" + gql_exec: + dependency: transitive + description: + name: gql_exec + url: "https://pub.dartlang.org" + source: hosted + version: "0.3.0" + gql_http_link: + dependency: transitive + description: + name: gql_http_link + url: "https://pub.dartlang.org" + source: hosted + version: "0.4.0" + gql_link: + dependency: transitive + description: + name: gql_link + url: "https://pub.dartlang.org" + source: hosted + version: "0.4.0" + gql_transform_link: + dependency: transitive + description: + name: gql_transform_link + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.0" + graphql: + dependency: transitive + description: + name: graphql + url: "https://pub.dartlang.org" + source: hosted + version: "5.0.0" + graphql_flutter: + dependency: "direct main" + description: + name: graphql_flutter + url: "https://pub.dartlang.org" + source: hosted + version: "5.0.0" + hive: + dependency: transitive + description: + name: hive + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.5" + http: + dependency: "direct main" + description: + name: http + url: "https://pub.dartlang.org" + source: hosted + version: "0.13.4" + http_parser: + dependency: transitive + description: + name: http_parser + url: "https://pub.dartlang.org" + source: hosted + version: "4.0.0" + intl: + dependency: transitive + description: + name: intl + url: "https://pub.dartlang.org" + source: hosted + version: "0.17.0" + js: + dependency: transitive + description: + name: js + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.3" + logging: + dependency: transitive + description: + name: logging + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.2" + markdown: + dependency: transitive + description: + name: markdown + url: "https://pub.dartlang.org" + source: hosted + version: "4.0.1" + matcher: + dependency: transitive + description: + name: matcher + url: "https://pub.dartlang.org" + source: hosted + version: "0.12.11" + meta: + dependency: transitive + description: + name: meta + url: "https://pub.dartlang.org" + source: hosted + version: "1.7.0" + mime: + dependency: transitive + description: + name: mime + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" + nm: + dependency: transitive + description: + name: nm + url: "https://pub.dartlang.org" + source: hosted + version: "0.4.2" + normalize: + dependency: "direct main" + description: + name: normalize + url: "https://pub.dartlang.org" + source: hosted + version: "0.5.5" + path: + dependency: transitive + description: + name: path + url: "https://pub.dartlang.org" + source: hosted + version: "1.8.0" + path_provider: + dependency: transitive + description: + name: path_provider + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.8" + path_provider_android: + dependency: transitive + description: + name: path_provider_android + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.11" + path_provider_ios: + dependency: transitive + description: + name: path_provider_ios + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.7" + path_provider_linux: + dependency: transitive + description: + name: path_provider_linux + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.4" + path_provider_macos: + dependency: transitive + description: + name: path_provider_macos + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.4" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.1" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.4" + percent_indicator: + dependency: "direct main" + description: + name: percent_indicator + url: "https://pub.dartlang.org" + source: hosted + version: "3.4.0" + petitparser: + dependency: transitive + description: + name: petitparser + url: "https://pub.dartlang.org" + source: hosted + version: "4.4.0" + platform: + dependency: transitive + description: + name: platform + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.0" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.2" + process: + dependency: transitive + description: + name: process + url: "https://pub.dartlang.org" + source: hosted + version: "4.2.4" + quiver: + dependency: transitive + description: + name: quiver + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.1+1" + rxdart: + dependency: transitive + description: + name: rxdart + url: "https://pub.dartlang.org" + source: hosted + version: "0.26.0" + share_plus: + dependency: "direct main" + description: + name: share_plus + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.4" + share_plus_linux: + dependency: transitive + description: + name: share_plus_linux + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.4" + share_plus_macos: + dependency: transitive + description: + name: share_plus_macos + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.2" + share_plus_platform_interface: + dependency: transitive + description: + name: share_plus_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.1" + share_plus_web: + dependency: transitive + description: + name: share_plus_web + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.4" + share_plus_windows: + dependency: transitive + description: + name: share_plus_windows + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.3" + shared_preferences: + dependency: "direct main" + description: + name: shared_preferences + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.11" + shared_preferences_android: + dependency: transitive + description: + name: shared_preferences_android + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.9" + shared_preferences_ios: + dependency: transitive + description: + name: shared_preferences_ios + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.8" + shared_preferences_linux: + dependency: transitive + description: + name: shared_preferences_linux + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.3" + shared_preferences_macos: + dependency: transitive + description: + name: shared_preferences_macos + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.2" + shared_preferences_platform_interface: + dependency: transitive + description: + name: shared_preferences_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" + shared_preferences_web: + dependency: transitive + description: + name: shared_preferences_web + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.2" + shared_preferences_windows: + dependency: transitive + description: + name: shared_preferences_windows + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.3" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_span: + dependency: transitive + description: + name: source_span + url: "https://pub.dartlang.org" + source: hosted + version: "1.8.1" + stack_trace: + dependency: transitive + description: + name: stack_trace + url: "https://pub.dartlang.org" + source: hosted + version: "1.10.0" + stream_channel: + dependency: transitive + description: + name: stream_channel + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + string_scanner: + dependency: transitive + description: + name: string_scanner + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + term_glyph: + dependency: transitive + description: + name: term_glyph + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0" + test_api: + dependency: transitive + description: + name: test_api + url: "https://pub.dartlang.org" + source: hosted + version: "0.4.3" + typed_data: + dependency: transitive + description: + name: typed_data + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.0" + url_launcher: + dependency: transitive + description: + name: url_launcher + url: "https://pub.dartlang.org" + source: hosted + version: "6.0.17" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + url: "https://pub.dartlang.org" + source: hosted + version: "6.0.13" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + url: "https://pub.dartlang.org" + source: hosted + version: "6.0.13" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.2" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.2" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.4" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.5" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.2" + uuid: + dependency: "direct main" + description: + name: uuid + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.5" + vector_math: + dependency: transitive + description: + name: vector_math + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.1" + web_socket_channel: + dependency: transitive + description: + name: web_socket_channel + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + win32: + dependency: transitive + description: + name: win32 + url: "https://pub.dartlang.org" + source: hosted + version: "2.3.3" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + url: "https://pub.dartlang.org" + source: hosted + version: "0.2.0" + xml: + dependency: transitive + description: + name: xml + url: "https://pub.dartlang.org" + source: hosted + version: "5.3.1" +sdks: + dart: ">=2.14.0 <3.0.0" + flutter: ">=2.5.0" diff --git a/ui/pubspec.yaml b/ui/pubspec.yaml new file mode 100644 index 0000000..d022cb3 --- /dev/null +++ b/ui/pubspec.yaml @@ -0,0 +1,87 @@ +name: swarm +description: The swarm UI. + +# 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 used as CFBundleVersion. +# Read more about iOS versioning at +# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html +version: 0.0.0+1 + +environment: + sdk: ">=2.12.0 <3.0.0" + +dependencies: + flutter: + sdk: flutter + http: ^0.13.1 + fluttertoast: ^8.0.8 + graphql_flutter: ^5.0.0-nullsafety.1 + charts_flutter: ^0.12.0 + flutter_rating_bar: ^4.0.0 + firebase_core: ^1.0.2 + firebase_auth: ^3.3.4 + google_sign_in: ^5.0.1 + share_plus: ^3.0.4 + uuid: ^3.0.3 + percent_indicator: ^3.0.1 + flutter_markdown: ^0.6.1 + shared_preferences: ^2.0.5 + firebase_messaging: ^11.2.4 + normalize: ^0.5.1-0.1.nullsafety.0 + + # The following adds the Cupertino Icons font to your application. + # Use with the CupertinoIcons class for iOS style icons. + cupertino_icons: ^1.0.2 + +dev_dependencies: + flutter_test: + sdk: flutter + + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec + +# The following section is specific to Flutter. +flutter: + + # 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 diff --git a/ui/test/widget_test.dart b/ui/test/widget_test.dart new file mode 100644 index 0000000..2f13f78 --- /dev/null +++ b/ui/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 that Flutter provides. 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:swarm/main.dart'; + +void main() { + testWidgets('Counter increments smoke test', (WidgetTester tester) async { + // Build our app and trigger a frame. + await tester.pumpWidget(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/ui/web/favicon.png b/ui/web/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaa46ac1ae21512746f852a42ba87e4165dfdd1 GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0X7 zltGxWVyS%@P(fs7NJL45ua8x7ey(0(N`6wRUPW#JP&EUCO@$SZnVVXYs8ErclUHn2 zVXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7O#^-S~(l1AfjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3raHc^AtelCMM;Vme?vOfh>Xph&xL%(-1c06+^uR^q@XSM&D4+Kp$>4P^%3{)XKjo zGZknv$b36P8?Z_gF{nK@`XI}Z90TzwSQO}0J1!f2c(B=V`5aP@1P1a|PZ!4!3&Gl8 zTYqUsf!gYFyJnXpu0!n&N*SYAX-%d(5gVjrHJWqXQshj@!Zm{!01WsQrH~9=kTxW#6SvuapgMqt>$=j#%eyGrQzr zP{L-3gsMA^$I1&gsBAEL+vxi1*Igl=8#8`5?A-T5=z-sk46WA1IUT)AIZHx1rdUrf zVJrJn<74DDw`j)Ki#gt}mIT-Q`XRa2-jQXQoI%w`nb|XblvzK${ZzlV)m-XcwC(od z71_OEC5Bt9GEXosOXaPTYOia#R4ID2TiU~`zVMl08TV_C%DnU4^+HE>9(CE4D6?Fz oujB08i7adh9xk7*FX66dWH6F5TM;?E2b5PlUHx3vIVCg!0Dx9vYXATM literal 0 HcmV?d00001 diff --git a/ui/web/firebase-messaging-sw.js b/ui/web/firebase-messaging-sw.js new file mode 100644 index 0000000..a7fc96e --- /dev/null +++ b/ui/web/firebase-messaging-sw.js @@ -0,0 +1,29 @@ +// importScripts('https://www.gstatic.com/firebasejs/8.4.1/firebase-app.js'); +// importScripts('https://www.gstatic.com/firebasejs/8.4.1/firebase-messaging.js'); + +// /*Update with yours config*/ +// const firebaseConfig = { +// apiKey: "YOur Key-EW_U6NZU-A", +// authDomain: "flutter-dasd-tes-fec9d.firebaseapp.com", +// projectId: "flutter-notification-tes-fec9d", +// storageBucket: "flutter-dsd-tes-fec9d.dasda.com", +// messagingSenderId: "263307381024", +// appId: "1:263307381024:web:dsds", +// measurementId: "G-dsada" +// }; +// firebase.initializeApp(firebaseConfig); +// const messaging = firebase.messaging(); + +// /*messaging.onMessage((payload) => { +// console.log('Message received. ', payload);*/ +// messaging.onBackgroundMessage(function(payload) { +// console.log('Received background message ', payload); + +// const notificationTitle = payload.notification.title; +// const notificationOptions = { +// body: payload.notification.body, +// }; + +// self.registration.showNotification(notificationTitle, +// notificationOptions); +// }); diff --git a/ui/web/icons/Icon-192.png b/ui/web/icons/Icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..b749bfef07473333cf1dd31e9eed89862a5d52aa GIT binary patch literal 5292 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 literal 0 HcmV?d00001 diff --git a/ui/web/icons/Icon-512.png b/ui/web/icons/Icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..88cfd48dff1169879ba46840804b412fe02fefd6 GIT binary patch literal 8252 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 literal 0 HcmV?d00001 diff --git a/ui/web/icons/Icon-maskable-192.png b/ui/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000000000000000000000000000000000000..eb9b4d76e525556d5d89141648c724331630325d GIT binary patch literal 5594 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 X>c!)3PgKfL&lX^$Z>Cpu&6)6jvi^Z! literal 0 HcmV?d00001 diff --git a/ui/web/icons/Icon-maskable-512.png b/ui/web/icons/Icon-maskable-512.png new file mode 100644 index 0000000000000000000000000000000000000000..d69c56691fbdb0b7efa65097c7cc1edac12a6d3e GIT binary patch literal 20998 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 MPgg&ebxsLQ025IeI{*Lx literal 0 HcmV?d00001 diff --git a/ui/web/index.html b/ui/web/index.html new file mode 100644 index 0000000..877251e --- /dev/null +++ b/ui/web/index.html @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + ui + + + + + + + diff --git a/ui/web/manifest.json b/ui/web/manifest.json new file mode 100644 index 0000000..7b98054 --- /dev/null +++ b/ui/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "ui", + "short_name": "ui", + "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" + } + ] +}