From 02bd3e4817d0aae490b12f48ee23a8e32f3c9bac Mon Sep 17 00:00:00 2001
From: Ilia <58937357+Izchomatik@users.noreply.github.com>
Date: Fri, 12 Jul 2024 20:12:23 +0200
Subject: [PATCH 01/92] Move old project to _temp_storage (#102)
Next PRs will add flutter project, later we will move back some parts of the old project.
---
{.github => _temp_storage/.github}/FUNDING.yml | 0
.../.github}/workflows/build.yaml | 0
LICENSE => _temp_storage/LICENSE | 0
README.md => _temp_storage/README.md | 0
{app => _temp_storage/app}/.gitignore | 0
{app => _temp_storage/app}/build.gradle | 0
{app => _temp_storage/app}/gradle.properties | 0
.../app}/src/main/AndroidManifest.xml | 0
.../app}/src/main/ic_launcher-playstore.png | Bin
.../java/org/rocstreaming/rocdroid/AboutActivity.kt | 0
.../java/org/rocstreaming/rocdroid/MainActivity.kt | 0
.../rocstreaming/rocdroid/ReceiverTileService.kt | 0
.../rocstreaming/rocdroid/SenderReceiverService.kt | 0
.../rocdroid/adapter/ViewPagerAdapter.kt | 0
.../rocstreaming/rocdroid/component/CopyBlock.kt | 0
.../rocdroid/fragment/ReceiverFragment.kt | 0
.../rocdroid/fragment/SenderFragment.kt | 0
.../src/main/res/drawable-hdpi/ic_notification.png | Bin
.../src/main/res/drawable-mdpi/ic_notification.png | Bin
.../src/main/res/drawable-xhdpi/ic_notification.png | Bin
.../main/res/drawable-xxhdpi/ic_notification.png | Bin
.../main/res/drawable-xxxhdpi/ic_notification.png | Bin
.../app}/src/main/res/drawable/copy_block.xml | 0
.../app}/src/main/res/drawable/divider.xml | 0
.../app}/src/main/res/drawable/dropdown_button.xml | 0
.../app}/src/main/res/drawable/ic_code.xml | 0
.../app}/src/main/res/drawable/ic_copy.xml | 0
.../app}/src/main/res/drawable/ic_done.xml | 0
.../app}/src/main/res/drawable/ic_stop.xml | 0
.../app}/src/main/res/drawable/round_indicator.xml | 0
.../app}/src/main/res/drawable/triangle.xml | 0
.../app}/src/main/res/font/montserrat_regular.ttf | Bin
.../app}/src/main/res/font/open_sans_regular.ttf | Bin
.../app}/src/main/res/layout/activity_about.xml | 0
.../app}/src/main/res/layout/activity_main.xml | 0
.../src/main/res/layout/copy_block_component.xml | 0
.../app}/src/main/res/layout/receiver_fragment.xml | 0
.../app}/src/main/res/layout/sender_fragment.xml | 0
.../app}/src/main/res/menu/menu.xml | 0
.../app}/src/main/res/mipmap-anydpi/ic_launcher.xml | 0
.../main/res/mipmap-anydpi/ic_launcher_round.xml | 0
.../main/res/mipmap-hdpi/ic_launcher_foreground.png | Bin
.../main/res/mipmap-mdpi/ic_launcher_foreground.png | Bin
.../res/mipmap-xhdpi/ic_launcher_foreground.png | Bin
.../res/mipmap-xxhdpi/ic_launcher_foreground.png | Bin
.../res/mipmap-xxxhdpi/ic_launcher_foreground.png | Bin
.../app}/src/main/res/raw/app_icon.png | Bin
.../app}/src/main/res/raw/bug_report.png | Bin
.../app}/src/main/res/raw/contributors.png | Bin
.../app}/src/main/res/values/attrs.xml | 0
.../app}/src/main/res/values/colors.xml | 0
.../app}/src/main/res/values/dimen.xml | 0
.../src/main/res/values/ic_launcher_background.xml | 0
.../app}/src/main/res/values/strings.xml | 0
.../app}/src/main/res/values/styles.xml | 0
build.gradle => _temp_storage/build.gradle | 0
.../gradle.properties | 0
.../gradle}/wrapper/gradle-wrapper.jar | Bin
.../gradle}/wrapper/gradle-wrapper.properties | 0
gradlew => _temp_storage/gradlew | 0
gradlew.bat => _temp_storage/gradlew.bat | 0
.../metadata}/android/en-US/full_description.txt | 0
.../metadata}/android/en-US/images/icon.png | Bin
.../images/phoneScreenshots/screenshot-about.png | Bin
.../phoneScreenshots/screenshot-premission.png | Bin
.../images/phoneScreenshots/screenshot-receive.png | Bin
.../images/phoneScreenshots/screenshot-send.png | Bin
.../sevenInchScreenshots/screenshot-about.png | Bin
.../sevenInchScreenshots/screenshot-premission.png | Bin
.../sevenInchScreenshots/screenshot-receive.png | Bin
.../images/sevenInchScreenshots/screenshot-send.png | Bin
.../metadata}/android/en-US/privacy_policy.txt | 0
.../metadata}/android/en-US/short_description.txt | 0
.../metadata}/android/en-US/title.txt | 0
screenshot.webp => _temp_storage/screenshot.webp | Bin
settings.gradle => _temp_storage/settings.gradle | 0
tag.py => _temp_storage/tag.py | 0
77 files changed, 0 insertions(+), 0 deletions(-)
rename {.github => _temp_storage/.github}/FUNDING.yml (100%)
rename {.github => _temp_storage/.github}/workflows/build.yaml (100%)
rename LICENSE => _temp_storage/LICENSE (100%)
rename README.md => _temp_storage/README.md (100%)
rename {app => _temp_storage/app}/.gitignore (100%)
rename {app => _temp_storage/app}/build.gradle (100%)
rename {app => _temp_storage/app}/gradle.properties (100%)
rename {app => _temp_storage/app}/src/main/AndroidManifest.xml (100%)
rename {app => _temp_storage/app}/src/main/ic_launcher-playstore.png (100%)
rename {app => _temp_storage/app}/src/main/java/org/rocstreaming/rocdroid/AboutActivity.kt (100%)
rename {app => _temp_storage/app}/src/main/java/org/rocstreaming/rocdroid/MainActivity.kt (100%)
rename {app => _temp_storage/app}/src/main/java/org/rocstreaming/rocdroid/ReceiverTileService.kt (100%)
rename {app => _temp_storage/app}/src/main/java/org/rocstreaming/rocdroid/SenderReceiverService.kt (100%)
rename {app => _temp_storage/app}/src/main/java/org/rocstreaming/rocdroid/adapter/ViewPagerAdapter.kt (100%)
rename {app => _temp_storage/app}/src/main/java/org/rocstreaming/rocdroid/component/CopyBlock.kt (100%)
rename {app => _temp_storage/app}/src/main/java/org/rocstreaming/rocdroid/fragment/ReceiverFragment.kt (100%)
rename {app => _temp_storage/app}/src/main/java/org/rocstreaming/rocdroid/fragment/SenderFragment.kt (100%)
rename {app => _temp_storage/app}/src/main/res/drawable-hdpi/ic_notification.png (100%)
rename {app => _temp_storage/app}/src/main/res/drawable-mdpi/ic_notification.png (100%)
rename {app => _temp_storage/app}/src/main/res/drawable-xhdpi/ic_notification.png (100%)
rename {app => _temp_storage/app}/src/main/res/drawable-xxhdpi/ic_notification.png (100%)
rename {app => _temp_storage/app}/src/main/res/drawable-xxxhdpi/ic_notification.png (100%)
rename {app => _temp_storage/app}/src/main/res/drawable/copy_block.xml (100%)
rename {app => _temp_storage/app}/src/main/res/drawable/divider.xml (100%)
rename {app => _temp_storage/app}/src/main/res/drawable/dropdown_button.xml (100%)
rename {app => _temp_storage/app}/src/main/res/drawable/ic_code.xml (100%)
rename {app => _temp_storage/app}/src/main/res/drawable/ic_copy.xml (100%)
rename {app => _temp_storage/app}/src/main/res/drawable/ic_done.xml (100%)
rename {app => _temp_storage/app}/src/main/res/drawable/ic_stop.xml (100%)
rename {app => _temp_storage/app}/src/main/res/drawable/round_indicator.xml (100%)
rename {app => _temp_storage/app}/src/main/res/drawable/triangle.xml (100%)
rename {app => _temp_storage/app}/src/main/res/font/montserrat_regular.ttf (100%)
rename {app => _temp_storage/app}/src/main/res/font/open_sans_regular.ttf (100%)
rename {app => _temp_storage/app}/src/main/res/layout/activity_about.xml (100%)
rename {app => _temp_storage/app}/src/main/res/layout/activity_main.xml (100%)
rename {app => _temp_storage/app}/src/main/res/layout/copy_block_component.xml (100%)
rename {app => _temp_storage/app}/src/main/res/layout/receiver_fragment.xml (100%)
rename {app => _temp_storage/app}/src/main/res/layout/sender_fragment.xml (100%)
rename {app => _temp_storage/app}/src/main/res/menu/menu.xml (100%)
rename {app => _temp_storage/app}/src/main/res/mipmap-anydpi/ic_launcher.xml (100%)
rename {app => _temp_storage/app}/src/main/res/mipmap-anydpi/ic_launcher_round.xml (100%)
rename {app => _temp_storage/app}/src/main/res/mipmap-hdpi/ic_launcher_foreground.png (100%)
rename {app => _temp_storage/app}/src/main/res/mipmap-mdpi/ic_launcher_foreground.png (100%)
rename {app => _temp_storage/app}/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png (100%)
rename {app => _temp_storage/app}/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png (100%)
rename {app => _temp_storage/app}/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png (100%)
rename {app => _temp_storage/app}/src/main/res/raw/app_icon.png (100%)
rename {app => _temp_storage/app}/src/main/res/raw/bug_report.png (100%)
rename {app => _temp_storage/app}/src/main/res/raw/contributors.png (100%)
rename {app => _temp_storage/app}/src/main/res/values/attrs.xml (100%)
rename {app => _temp_storage/app}/src/main/res/values/colors.xml (100%)
rename {app => _temp_storage/app}/src/main/res/values/dimen.xml (100%)
rename {app => _temp_storage/app}/src/main/res/values/ic_launcher_background.xml (100%)
rename {app => _temp_storage/app}/src/main/res/values/strings.xml (100%)
rename {app => _temp_storage/app}/src/main/res/values/styles.xml (100%)
rename build.gradle => _temp_storage/build.gradle (100%)
rename gradle.properties => _temp_storage/gradle.properties (100%)
rename {gradle => _temp_storage/gradle}/wrapper/gradle-wrapper.jar (100%)
rename {gradle => _temp_storage/gradle}/wrapper/gradle-wrapper.properties (100%)
rename gradlew => _temp_storage/gradlew (100%)
mode change 100755 => 100644
rename gradlew.bat => _temp_storage/gradlew.bat (100%)
rename {metadata => _temp_storage/metadata}/android/en-US/full_description.txt (100%)
rename {metadata => _temp_storage/metadata}/android/en-US/images/icon.png (100%)
rename {metadata => _temp_storage/metadata}/android/en-US/images/phoneScreenshots/screenshot-about.png (100%)
rename {metadata => _temp_storage/metadata}/android/en-US/images/phoneScreenshots/screenshot-premission.png (100%)
rename {metadata => _temp_storage/metadata}/android/en-US/images/phoneScreenshots/screenshot-receive.png (100%)
rename {metadata => _temp_storage/metadata}/android/en-US/images/phoneScreenshots/screenshot-send.png (100%)
rename {metadata => _temp_storage/metadata}/android/en-US/images/sevenInchScreenshots/screenshot-about.png (100%)
rename {metadata => _temp_storage/metadata}/android/en-US/images/sevenInchScreenshots/screenshot-premission.png (100%)
rename {metadata => _temp_storage/metadata}/android/en-US/images/sevenInchScreenshots/screenshot-receive.png (100%)
rename {metadata => _temp_storage/metadata}/android/en-US/images/sevenInchScreenshots/screenshot-send.png (100%)
rename {metadata => _temp_storage/metadata}/android/en-US/privacy_policy.txt (100%)
rename {metadata => _temp_storage/metadata}/android/en-US/short_description.txt (100%)
rename {metadata => _temp_storage/metadata}/android/en-US/title.txt (100%)
rename screenshot.webp => _temp_storage/screenshot.webp (100%)
rename settings.gradle => _temp_storage/settings.gradle (100%)
rename tag.py => _temp_storage/tag.py (100%)
mode change 100755 => 100644
diff --git a/.github/FUNDING.yml b/_temp_storage/.github/FUNDING.yml
similarity index 100%
rename from .github/FUNDING.yml
rename to _temp_storage/.github/FUNDING.yml
diff --git a/.github/workflows/build.yaml b/_temp_storage/.github/workflows/build.yaml
similarity index 100%
rename from .github/workflows/build.yaml
rename to _temp_storage/.github/workflows/build.yaml
diff --git a/LICENSE b/_temp_storage/LICENSE
similarity index 100%
rename from LICENSE
rename to _temp_storage/LICENSE
diff --git a/README.md b/_temp_storage/README.md
similarity index 100%
rename from README.md
rename to _temp_storage/README.md
diff --git a/app/.gitignore b/_temp_storage/app/.gitignore
similarity index 100%
rename from app/.gitignore
rename to _temp_storage/app/.gitignore
diff --git a/app/build.gradle b/_temp_storage/app/build.gradle
similarity index 100%
rename from app/build.gradle
rename to _temp_storage/app/build.gradle
diff --git a/app/gradle.properties b/_temp_storage/app/gradle.properties
similarity index 100%
rename from app/gradle.properties
rename to _temp_storage/app/gradle.properties
diff --git a/app/src/main/AndroidManifest.xml b/_temp_storage/app/src/main/AndroidManifest.xml
similarity index 100%
rename from app/src/main/AndroidManifest.xml
rename to _temp_storage/app/src/main/AndroidManifest.xml
diff --git a/app/src/main/ic_launcher-playstore.png b/_temp_storage/app/src/main/ic_launcher-playstore.png
similarity index 100%
rename from app/src/main/ic_launcher-playstore.png
rename to _temp_storage/app/src/main/ic_launcher-playstore.png
diff --git a/app/src/main/java/org/rocstreaming/rocdroid/AboutActivity.kt b/_temp_storage/app/src/main/java/org/rocstreaming/rocdroid/AboutActivity.kt
similarity index 100%
rename from app/src/main/java/org/rocstreaming/rocdroid/AboutActivity.kt
rename to _temp_storage/app/src/main/java/org/rocstreaming/rocdroid/AboutActivity.kt
diff --git a/app/src/main/java/org/rocstreaming/rocdroid/MainActivity.kt b/_temp_storage/app/src/main/java/org/rocstreaming/rocdroid/MainActivity.kt
similarity index 100%
rename from app/src/main/java/org/rocstreaming/rocdroid/MainActivity.kt
rename to _temp_storage/app/src/main/java/org/rocstreaming/rocdroid/MainActivity.kt
diff --git a/app/src/main/java/org/rocstreaming/rocdroid/ReceiverTileService.kt b/_temp_storage/app/src/main/java/org/rocstreaming/rocdroid/ReceiverTileService.kt
similarity index 100%
rename from app/src/main/java/org/rocstreaming/rocdroid/ReceiverTileService.kt
rename to _temp_storage/app/src/main/java/org/rocstreaming/rocdroid/ReceiverTileService.kt
diff --git a/app/src/main/java/org/rocstreaming/rocdroid/SenderReceiverService.kt b/_temp_storage/app/src/main/java/org/rocstreaming/rocdroid/SenderReceiverService.kt
similarity index 100%
rename from app/src/main/java/org/rocstreaming/rocdroid/SenderReceiverService.kt
rename to _temp_storage/app/src/main/java/org/rocstreaming/rocdroid/SenderReceiverService.kt
diff --git a/app/src/main/java/org/rocstreaming/rocdroid/adapter/ViewPagerAdapter.kt b/_temp_storage/app/src/main/java/org/rocstreaming/rocdroid/adapter/ViewPagerAdapter.kt
similarity index 100%
rename from app/src/main/java/org/rocstreaming/rocdroid/adapter/ViewPagerAdapter.kt
rename to _temp_storage/app/src/main/java/org/rocstreaming/rocdroid/adapter/ViewPagerAdapter.kt
diff --git a/app/src/main/java/org/rocstreaming/rocdroid/component/CopyBlock.kt b/_temp_storage/app/src/main/java/org/rocstreaming/rocdroid/component/CopyBlock.kt
similarity index 100%
rename from app/src/main/java/org/rocstreaming/rocdroid/component/CopyBlock.kt
rename to _temp_storage/app/src/main/java/org/rocstreaming/rocdroid/component/CopyBlock.kt
diff --git a/app/src/main/java/org/rocstreaming/rocdroid/fragment/ReceiverFragment.kt b/_temp_storage/app/src/main/java/org/rocstreaming/rocdroid/fragment/ReceiverFragment.kt
similarity index 100%
rename from app/src/main/java/org/rocstreaming/rocdroid/fragment/ReceiverFragment.kt
rename to _temp_storage/app/src/main/java/org/rocstreaming/rocdroid/fragment/ReceiverFragment.kt
diff --git a/app/src/main/java/org/rocstreaming/rocdroid/fragment/SenderFragment.kt b/_temp_storage/app/src/main/java/org/rocstreaming/rocdroid/fragment/SenderFragment.kt
similarity index 100%
rename from app/src/main/java/org/rocstreaming/rocdroid/fragment/SenderFragment.kt
rename to _temp_storage/app/src/main/java/org/rocstreaming/rocdroid/fragment/SenderFragment.kt
diff --git a/app/src/main/res/drawable-hdpi/ic_notification.png b/_temp_storage/app/src/main/res/drawable-hdpi/ic_notification.png
similarity index 100%
rename from app/src/main/res/drawable-hdpi/ic_notification.png
rename to _temp_storage/app/src/main/res/drawable-hdpi/ic_notification.png
diff --git a/app/src/main/res/drawable-mdpi/ic_notification.png b/_temp_storage/app/src/main/res/drawable-mdpi/ic_notification.png
similarity index 100%
rename from app/src/main/res/drawable-mdpi/ic_notification.png
rename to _temp_storage/app/src/main/res/drawable-mdpi/ic_notification.png
diff --git a/app/src/main/res/drawable-xhdpi/ic_notification.png b/_temp_storage/app/src/main/res/drawable-xhdpi/ic_notification.png
similarity index 100%
rename from app/src/main/res/drawable-xhdpi/ic_notification.png
rename to _temp_storage/app/src/main/res/drawable-xhdpi/ic_notification.png
diff --git a/app/src/main/res/drawable-xxhdpi/ic_notification.png b/_temp_storage/app/src/main/res/drawable-xxhdpi/ic_notification.png
similarity index 100%
rename from app/src/main/res/drawable-xxhdpi/ic_notification.png
rename to _temp_storage/app/src/main/res/drawable-xxhdpi/ic_notification.png
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_notification.png b/_temp_storage/app/src/main/res/drawable-xxxhdpi/ic_notification.png
similarity index 100%
rename from app/src/main/res/drawable-xxxhdpi/ic_notification.png
rename to _temp_storage/app/src/main/res/drawable-xxxhdpi/ic_notification.png
diff --git a/app/src/main/res/drawable/copy_block.xml b/_temp_storage/app/src/main/res/drawable/copy_block.xml
similarity index 100%
rename from app/src/main/res/drawable/copy_block.xml
rename to _temp_storage/app/src/main/res/drawable/copy_block.xml
diff --git a/app/src/main/res/drawable/divider.xml b/_temp_storage/app/src/main/res/drawable/divider.xml
similarity index 100%
rename from app/src/main/res/drawable/divider.xml
rename to _temp_storage/app/src/main/res/drawable/divider.xml
diff --git a/app/src/main/res/drawable/dropdown_button.xml b/_temp_storage/app/src/main/res/drawable/dropdown_button.xml
similarity index 100%
rename from app/src/main/res/drawable/dropdown_button.xml
rename to _temp_storage/app/src/main/res/drawable/dropdown_button.xml
diff --git a/app/src/main/res/drawable/ic_code.xml b/_temp_storage/app/src/main/res/drawable/ic_code.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_code.xml
rename to _temp_storage/app/src/main/res/drawable/ic_code.xml
diff --git a/app/src/main/res/drawable/ic_copy.xml b/_temp_storage/app/src/main/res/drawable/ic_copy.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_copy.xml
rename to _temp_storage/app/src/main/res/drawable/ic_copy.xml
diff --git a/app/src/main/res/drawable/ic_done.xml b/_temp_storage/app/src/main/res/drawable/ic_done.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_done.xml
rename to _temp_storage/app/src/main/res/drawable/ic_done.xml
diff --git a/app/src/main/res/drawable/ic_stop.xml b/_temp_storage/app/src/main/res/drawable/ic_stop.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_stop.xml
rename to _temp_storage/app/src/main/res/drawable/ic_stop.xml
diff --git a/app/src/main/res/drawable/round_indicator.xml b/_temp_storage/app/src/main/res/drawable/round_indicator.xml
similarity index 100%
rename from app/src/main/res/drawable/round_indicator.xml
rename to _temp_storage/app/src/main/res/drawable/round_indicator.xml
diff --git a/app/src/main/res/drawable/triangle.xml b/_temp_storage/app/src/main/res/drawable/triangle.xml
similarity index 100%
rename from app/src/main/res/drawable/triangle.xml
rename to _temp_storage/app/src/main/res/drawable/triangle.xml
diff --git a/app/src/main/res/font/montserrat_regular.ttf b/_temp_storage/app/src/main/res/font/montserrat_regular.ttf
similarity index 100%
rename from app/src/main/res/font/montserrat_regular.ttf
rename to _temp_storage/app/src/main/res/font/montserrat_regular.ttf
diff --git a/app/src/main/res/font/open_sans_regular.ttf b/_temp_storage/app/src/main/res/font/open_sans_regular.ttf
similarity index 100%
rename from app/src/main/res/font/open_sans_regular.ttf
rename to _temp_storage/app/src/main/res/font/open_sans_regular.ttf
diff --git a/app/src/main/res/layout/activity_about.xml b/_temp_storage/app/src/main/res/layout/activity_about.xml
similarity index 100%
rename from app/src/main/res/layout/activity_about.xml
rename to _temp_storage/app/src/main/res/layout/activity_about.xml
diff --git a/app/src/main/res/layout/activity_main.xml b/_temp_storage/app/src/main/res/layout/activity_main.xml
similarity index 100%
rename from app/src/main/res/layout/activity_main.xml
rename to _temp_storage/app/src/main/res/layout/activity_main.xml
diff --git a/app/src/main/res/layout/copy_block_component.xml b/_temp_storage/app/src/main/res/layout/copy_block_component.xml
similarity index 100%
rename from app/src/main/res/layout/copy_block_component.xml
rename to _temp_storage/app/src/main/res/layout/copy_block_component.xml
diff --git a/app/src/main/res/layout/receiver_fragment.xml b/_temp_storage/app/src/main/res/layout/receiver_fragment.xml
similarity index 100%
rename from app/src/main/res/layout/receiver_fragment.xml
rename to _temp_storage/app/src/main/res/layout/receiver_fragment.xml
diff --git a/app/src/main/res/layout/sender_fragment.xml b/_temp_storage/app/src/main/res/layout/sender_fragment.xml
similarity index 100%
rename from app/src/main/res/layout/sender_fragment.xml
rename to _temp_storage/app/src/main/res/layout/sender_fragment.xml
diff --git a/app/src/main/res/menu/menu.xml b/_temp_storage/app/src/main/res/menu/menu.xml
similarity index 100%
rename from app/src/main/res/menu/menu.xml
rename to _temp_storage/app/src/main/res/menu/menu.xml
diff --git a/app/src/main/res/mipmap-anydpi/ic_launcher.xml b/_temp_storage/app/src/main/res/mipmap-anydpi/ic_launcher.xml
similarity index 100%
rename from app/src/main/res/mipmap-anydpi/ic_launcher.xml
rename to _temp_storage/app/src/main/res/mipmap-anydpi/ic_launcher.xml
diff --git a/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml b/_temp_storage/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml
similarity index 100%
rename from app/src/main/res/mipmap-anydpi/ic_launcher_round.xml
rename to _temp_storage/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/_temp_storage/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
similarity index 100%
rename from app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
rename to _temp_storage/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/_temp_storage/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
similarity index 100%
rename from app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
rename to _temp_storage/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/_temp_storage/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
similarity index 100%
rename from app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
rename to _temp_storage/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/_temp_storage/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
similarity index 100%
rename from app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
rename to _temp_storage/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/_temp_storage/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
similarity index 100%
rename from app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
rename to _temp_storage/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
diff --git a/app/src/main/res/raw/app_icon.png b/_temp_storage/app/src/main/res/raw/app_icon.png
similarity index 100%
rename from app/src/main/res/raw/app_icon.png
rename to _temp_storage/app/src/main/res/raw/app_icon.png
diff --git a/app/src/main/res/raw/bug_report.png b/_temp_storage/app/src/main/res/raw/bug_report.png
similarity index 100%
rename from app/src/main/res/raw/bug_report.png
rename to _temp_storage/app/src/main/res/raw/bug_report.png
diff --git a/app/src/main/res/raw/contributors.png b/_temp_storage/app/src/main/res/raw/contributors.png
similarity index 100%
rename from app/src/main/res/raw/contributors.png
rename to _temp_storage/app/src/main/res/raw/contributors.png
diff --git a/app/src/main/res/values/attrs.xml b/_temp_storage/app/src/main/res/values/attrs.xml
similarity index 100%
rename from app/src/main/res/values/attrs.xml
rename to _temp_storage/app/src/main/res/values/attrs.xml
diff --git a/app/src/main/res/values/colors.xml b/_temp_storage/app/src/main/res/values/colors.xml
similarity index 100%
rename from app/src/main/res/values/colors.xml
rename to _temp_storage/app/src/main/res/values/colors.xml
diff --git a/app/src/main/res/values/dimen.xml b/_temp_storage/app/src/main/res/values/dimen.xml
similarity index 100%
rename from app/src/main/res/values/dimen.xml
rename to _temp_storage/app/src/main/res/values/dimen.xml
diff --git a/app/src/main/res/values/ic_launcher_background.xml b/_temp_storage/app/src/main/res/values/ic_launcher_background.xml
similarity index 100%
rename from app/src/main/res/values/ic_launcher_background.xml
rename to _temp_storage/app/src/main/res/values/ic_launcher_background.xml
diff --git a/app/src/main/res/values/strings.xml b/_temp_storage/app/src/main/res/values/strings.xml
similarity index 100%
rename from app/src/main/res/values/strings.xml
rename to _temp_storage/app/src/main/res/values/strings.xml
diff --git a/app/src/main/res/values/styles.xml b/_temp_storage/app/src/main/res/values/styles.xml
similarity index 100%
rename from app/src/main/res/values/styles.xml
rename to _temp_storage/app/src/main/res/values/styles.xml
diff --git a/build.gradle b/_temp_storage/build.gradle
similarity index 100%
rename from build.gradle
rename to _temp_storage/build.gradle
diff --git a/gradle.properties b/_temp_storage/gradle.properties
similarity index 100%
rename from gradle.properties
rename to _temp_storage/gradle.properties
diff --git a/gradle/wrapper/gradle-wrapper.jar b/_temp_storage/gradle/wrapper/gradle-wrapper.jar
similarity index 100%
rename from gradle/wrapper/gradle-wrapper.jar
rename to _temp_storage/gradle/wrapper/gradle-wrapper.jar
diff --git a/gradle/wrapper/gradle-wrapper.properties b/_temp_storage/gradle/wrapper/gradle-wrapper.properties
similarity index 100%
rename from gradle/wrapper/gradle-wrapper.properties
rename to _temp_storage/gradle/wrapper/gradle-wrapper.properties
diff --git a/gradlew b/_temp_storage/gradlew
old mode 100755
new mode 100644
similarity index 100%
rename from gradlew
rename to _temp_storage/gradlew
diff --git a/gradlew.bat b/_temp_storage/gradlew.bat
similarity index 100%
rename from gradlew.bat
rename to _temp_storage/gradlew.bat
diff --git a/metadata/android/en-US/full_description.txt b/_temp_storage/metadata/android/en-US/full_description.txt
similarity index 100%
rename from metadata/android/en-US/full_description.txt
rename to _temp_storage/metadata/android/en-US/full_description.txt
diff --git a/metadata/android/en-US/images/icon.png b/_temp_storage/metadata/android/en-US/images/icon.png
similarity index 100%
rename from metadata/android/en-US/images/icon.png
rename to _temp_storage/metadata/android/en-US/images/icon.png
diff --git a/metadata/android/en-US/images/phoneScreenshots/screenshot-about.png b/_temp_storage/metadata/android/en-US/images/phoneScreenshots/screenshot-about.png
similarity index 100%
rename from metadata/android/en-US/images/phoneScreenshots/screenshot-about.png
rename to _temp_storage/metadata/android/en-US/images/phoneScreenshots/screenshot-about.png
diff --git a/metadata/android/en-US/images/phoneScreenshots/screenshot-premission.png b/_temp_storage/metadata/android/en-US/images/phoneScreenshots/screenshot-premission.png
similarity index 100%
rename from metadata/android/en-US/images/phoneScreenshots/screenshot-premission.png
rename to _temp_storage/metadata/android/en-US/images/phoneScreenshots/screenshot-premission.png
diff --git a/metadata/android/en-US/images/phoneScreenshots/screenshot-receive.png b/_temp_storage/metadata/android/en-US/images/phoneScreenshots/screenshot-receive.png
similarity index 100%
rename from metadata/android/en-US/images/phoneScreenshots/screenshot-receive.png
rename to _temp_storage/metadata/android/en-US/images/phoneScreenshots/screenshot-receive.png
diff --git a/metadata/android/en-US/images/phoneScreenshots/screenshot-send.png b/_temp_storage/metadata/android/en-US/images/phoneScreenshots/screenshot-send.png
similarity index 100%
rename from metadata/android/en-US/images/phoneScreenshots/screenshot-send.png
rename to _temp_storage/metadata/android/en-US/images/phoneScreenshots/screenshot-send.png
diff --git a/metadata/android/en-US/images/sevenInchScreenshots/screenshot-about.png b/_temp_storage/metadata/android/en-US/images/sevenInchScreenshots/screenshot-about.png
similarity index 100%
rename from metadata/android/en-US/images/sevenInchScreenshots/screenshot-about.png
rename to _temp_storage/metadata/android/en-US/images/sevenInchScreenshots/screenshot-about.png
diff --git a/metadata/android/en-US/images/sevenInchScreenshots/screenshot-premission.png b/_temp_storage/metadata/android/en-US/images/sevenInchScreenshots/screenshot-premission.png
similarity index 100%
rename from metadata/android/en-US/images/sevenInchScreenshots/screenshot-premission.png
rename to _temp_storage/metadata/android/en-US/images/sevenInchScreenshots/screenshot-premission.png
diff --git a/metadata/android/en-US/images/sevenInchScreenshots/screenshot-receive.png b/_temp_storage/metadata/android/en-US/images/sevenInchScreenshots/screenshot-receive.png
similarity index 100%
rename from metadata/android/en-US/images/sevenInchScreenshots/screenshot-receive.png
rename to _temp_storage/metadata/android/en-US/images/sevenInchScreenshots/screenshot-receive.png
diff --git a/metadata/android/en-US/images/sevenInchScreenshots/screenshot-send.png b/_temp_storage/metadata/android/en-US/images/sevenInchScreenshots/screenshot-send.png
similarity index 100%
rename from metadata/android/en-US/images/sevenInchScreenshots/screenshot-send.png
rename to _temp_storage/metadata/android/en-US/images/sevenInchScreenshots/screenshot-send.png
diff --git a/metadata/android/en-US/privacy_policy.txt b/_temp_storage/metadata/android/en-US/privacy_policy.txt
similarity index 100%
rename from metadata/android/en-US/privacy_policy.txt
rename to _temp_storage/metadata/android/en-US/privacy_policy.txt
diff --git a/metadata/android/en-US/short_description.txt b/_temp_storage/metadata/android/en-US/short_description.txt
similarity index 100%
rename from metadata/android/en-US/short_description.txt
rename to _temp_storage/metadata/android/en-US/short_description.txt
diff --git a/metadata/android/en-US/title.txt b/_temp_storage/metadata/android/en-US/title.txt
similarity index 100%
rename from metadata/android/en-US/title.txt
rename to _temp_storage/metadata/android/en-US/title.txt
diff --git a/screenshot.webp b/_temp_storage/screenshot.webp
similarity index 100%
rename from screenshot.webp
rename to _temp_storage/screenshot.webp
diff --git a/settings.gradle b/_temp_storage/settings.gradle
similarity index 100%
rename from settings.gradle
rename to _temp_storage/settings.gradle
diff --git a/tag.py b/_temp_storage/tag.py
old mode 100755
new mode 100644
similarity index 100%
rename from tag.py
rename to _temp_storage/tag.py
From ccf6e33bac64a9ebcfa10c7324da43eb49d6f8ae Mon Sep 17 00:00:00 2001
From: Ilia <58937357+Izchomatik@users.noreply.github.com>
Date: Sat, 13 Jul 2024 15:15:49 +0200
Subject: [PATCH 02/92] Project initialization (#101)
Prepare Flutter project for future development.z
---
.gitignore | 64 +-
.metadata | 45 ++
.vscode/launch.json | 25 +
README.md | 35 +
analysis_options.yaml | 47 ++
android/.gitignore | 13 +
android/app/build.gradle | 58 ++
android/app/src/debug/AndroidManifest.xml | 7 +
android/app/src/main/AndroidManifest.xml | 45 ++
.../com/example/roc_droid/MainActivity.kt | 5 +
.../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 +
android/app/src/main/res/values/styles.xml | 18 +
android/app/src/profile/AndroidManifest.xml | 7 +
android/build.gradle | 18 +
android/gradle.properties | 3 +
.../gradle/wrapper/gradle-wrapper.properties | 5 +
android/settings.gradle | 25 +
docs/architecture_agent.md | 7 +
docs/architecture_model.md | 24 +
docs/architecture_overview.md | 31 +
docs/architecture_ui.md | 87 +++
docs/diagrams/architecture.drawio | 69 ++
docs/diagrams/model.drawio | 78 ++
docs/diagrams/widget_tree.drawio | 93 +++
docs/diagrams/widget_types.drawio | 81 ++
docs/images/architecture.png | Bin 0 -> 38799 bytes
docs/images/model.png | Bin 0 -> 20912 bytes
docs/images/widget_tree.png | Bin 0 -> 36679 bytes
docs/images/widget_types.png | Bin 0 -> 24031 bytes
docs/install_win.md | 64 ++
docs/unit_tests.md | 35 +
ios/.gitignore | 34 +
ios/Flutter/AppFrameworkInfo.plist | 26 +
ios/Flutter/Debug.xcconfig | 1 +
ios/Flutter/Release.xcconfig | 1 +
ios/Runner.xcodeproj/project.pbxproj | 616 +++++++++++++++
.../contents.xcworkspacedata | 7 +
.../xcshareddata/IDEWorkspaceChecks.plist | 8 +
.../xcshareddata/WorkspaceSettings.xcsettings | 8 +
.../xcshareddata/xcschemes/Runner.xcscheme | 98 +++
.../contents.xcworkspacedata | 7 +
.../xcshareddata/IDEWorkspaceChecks.plist | 8 +
.../xcshareddata/WorkspaceSettings.xcsettings | 8 +
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 -> 295 bytes
.../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 0 -> 406 bytes
.../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 0 -> 450 bytes
.../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 0 -> 282 bytes
.../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 0 -> 462 bytes
.../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 0 -> 704 bytes
.../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 0 -> 406 bytes
.../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 0 -> 586 bytes
.../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 0 -> 862 bytes
.../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 0 -> 862 bytes
.../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 0 -> 1674 bytes
.../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 0 -> 762 bytes
.../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 0 -> 1226 bytes
.../Icon-App-83.5x83.5@2x.png | Bin 0 -> 1418 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 +
ios/Runner/Base.lproj/LaunchScreen.storyboard | 37 +
ios/Runner/Base.lproj/Main.storyboard | 26 +
ios/Runner/Info.plist | 49 ++
ios/Runner/Runner-Bridging-Header.h | 1 +
ios/RunnerTests/RunnerTests.swift | 12 +
lib/main.dart | 9 +
lib/src/agent.dart | 3 +
lib/src/agent/android_service.dart | 4 +
lib/src/agent/desktop_service.dart | 4 +
lib/src/model.dart | 2 +
lib/src/model/model_root.dart | 12 +
lib/src/model/receiver.dart | 4 +
lib/src/model/sender.dart | 4 +
lib/src/ui.dart | 2 +
lib/src/ui/app_root.dart | 25 +
lib/src/ui/fragments/message_popup.dart | 9 +
lib/src/ui/fragments/settings_pane.dart | 9 +
lib/src/ui/fragments/source_selector.dart | 9 +
lib/src/ui/main_screen.dart | 9 +
lib/src/ui/receiver_page.dart | 9 +
lib/src/ui/sender_page.dart | 9 +
linux/.gitignore | 1 +
linux/CMakeLists.txt | 145 ++++
linux/flutter/CMakeLists.txt | 88 +++
linux/flutter/generated_plugin_registrant.cc | 11 +
linux/flutter/generated_plugin_registrant.h | 15 +
linux/flutter/generated_plugins.cmake | 23 +
linux/main.cc | 6 +
linux/my_application.cc | 124 +++
linux/my_application.h | 18 +
macos/.gitignore | 7 +
macos/Flutter/Flutter-Debug.xcconfig | 1 +
macos/Flutter/Flutter-Release.xcconfig | 1 +
macos/Flutter/GeneratedPluginRegistrant.swift | 10 +
macos/Runner.xcodeproj/project.pbxproj | 705 ++++++++++++++++++
.../xcshareddata/IDEWorkspaceChecks.plist | 8 +
.../xcshareddata/xcschemes/Runner.xcscheme | 98 +++
.../contents.xcworkspacedata | 7 +
.../xcshareddata/IDEWorkspaceChecks.plist | 8 +
macos/Runner/AppDelegate.swift | 9 +
.../AppIcon.appiconset/Contents.json | 68 ++
.../AppIcon.appiconset/app_icon_1024.png | Bin 0 -> 102994 bytes
.../AppIcon.appiconset/app_icon_128.png | Bin 0 -> 5680 bytes
.../AppIcon.appiconset/app_icon_16.png | Bin 0 -> 520 bytes
.../AppIcon.appiconset/app_icon_256.png | Bin 0 -> 14142 bytes
.../AppIcon.appiconset/app_icon_32.png | Bin 0 -> 1066 bytes
.../AppIcon.appiconset/app_icon_512.png | Bin 0 -> 36406 bytes
.../AppIcon.appiconset/app_icon_64.png | Bin 0 -> 2218 bytes
macos/Runner/Base.lproj/MainMenu.xib | 343 +++++++++
macos/Runner/Configs/AppInfo.xcconfig | 14 +
macos/Runner/Configs/Debug.xcconfig | 2 +
macos/Runner/Configs/Release.xcconfig | 2 +
macos/Runner/Configs/Warnings.xcconfig | 13 +
macos/Runner/DebugProfile.entitlements | 12 +
macos/Runner/Info.plist | 32 +
macos/Runner/MainFlutterWindow.swift | 15 +
macos/Runner/Release.entitlements | 8 +
macos/RunnerTests/RunnerTests.swift | 12 +
pubspec.lock | 477 ++++++++++++
pubspec.yaml | 21 +
test/model/model_root_test.dart | 16 +
test/ui/app_root_test.dart | 20 +
web/favicon.png | Bin 0 -> 917 bytes
web/icons/Icon-192.png | Bin 0 -> 5292 bytes
web/icons/Icon-512.png | Bin 0 -> 8252 bytes
web/icons/Icon-maskable-192.png | Bin 0 -> 5594 bytes
web/icons/Icon-maskable-512.png | Bin 0 -> 20998 bytes
web/index.html | 38 +
web/manifest.json | 35 +
windows/.gitignore | 17 +
windows/CMakeLists.txt | 108 +++
windows/flutter/CMakeLists.txt | 109 +++
.../flutter/generated_plugin_registrant.cc | 11 +
windows/flutter/generated_plugin_registrant.h | 15 +
windows/flutter/generated_plugins.cmake | 23 +
windows/runner/CMakeLists.txt | 40 +
windows/runner/Runner.rc | 121 +++
windows/runner/flutter_window.cpp | 71 ++
windows/runner/flutter_window.h | 33 +
windows/runner/main.cpp | 43 ++
windows/runner/resource.h | 16 +
windows/runner/resources/app_icon.ico | Bin 0 -> 33772 bytes
windows/runner/runner.exe.manifest | 20 +
windows/runner/utils.cpp | 65 ++
windows/runner/utils.h | 19 +
windows/runner/win32_window.cpp | 288 +++++++
windows/runner/win32_window.h | 102 +++
159 files changed, 5766 insertions(+), 12 deletions(-)
create mode 100644 .metadata
create mode 100644 .vscode/launch.json
create mode 100644 README.md
create mode 100644 analysis_options.yaml
create mode 100644 android/.gitignore
create mode 100644 android/app/build.gradle
create mode 100644 android/app/src/debug/AndroidManifest.xml
create mode 100644 android/app/src/main/AndroidManifest.xml
create mode 100644 android/app/src/main/kotlin/com/example/roc_droid/MainActivity.kt
create mode 100644 android/app/src/main/res/drawable-v21/launch_background.xml
create mode 100644 android/app/src/main/res/drawable/launch_background.xml
create mode 100644 android/app/src/main/res/mipmap-hdpi/ic_launcher.png
create mode 100644 android/app/src/main/res/mipmap-mdpi/ic_launcher.png
create mode 100644 android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
create mode 100644 android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
create mode 100644 android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
create mode 100644 android/app/src/main/res/values-night/styles.xml
create mode 100644 android/app/src/main/res/values/styles.xml
create mode 100644 android/app/src/profile/AndroidManifest.xml
create mode 100644 android/build.gradle
create mode 100644 android/gradle.properties
create mode 100644 android/gradle/wrapper/gradle-wrapper.properties
create mode 100644 android/settings.gradle
create mode 100644 docs/architecture_agent.md
create mode 100644 docs/architecture_model.md
create mode 100644 docs/architecture_overview.md
create mode 100644 docs/architecture_ui.md
create mode 100644 docs/diagrams/architecture.drawio
create mode 100644 docs/diagrams/model.drawio
create mode 100644 docs/diagrams/widget_tree.drawio
create mode 100644 docs/diagrams/widget_types.drawio
create mode 100644 docs/images/architecture.png
create mode 100644 docs/images/model.png
create mode 100644 docs/images/widget_tree.png
create mode 100644 docs/images/widget_types.png
create mode 100644 docs/install_win.md
create mode 100644 docs/unit_tests.md
create mode 100644 ios/.gitignore
create mode 100644 ios/Flutter/AppFrameworkInfo.plist
create mode 100644 ios/Flutter/Debug.xcconfig
create mode 100644 ios/Flutter/Release.xcconfig
create mode 100644 ios/Runner.xcodeproj/project.pbxproj
create mode 100644 ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
create mode 100644 ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
create mode 100644 ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
create mode 100644 ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
create mode 100644 ios/Runner.xcworkspace/contents.xcworkspacedata
create mode 100644 ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
create mode 100644 ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
create mode 100644 ios/Runner/AppDelegate.swift
create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
create mode 100644 ios/Runner/Base.lproj/LaunchScreen.storyboard
create mode 100644 ios/Runner/Base.lproj/Main.storyboard
create mode 100644 ios/Runner/Info.plist
create mode 100644 ios/Runner/Runner-Bridging-Header.h
create mode 100644 ios/RunnerTests/RunnerTests.swift
create mode 100644 lib/main.dart
create mode 100644 lib/src/agent.dart
create mode 100644 lib/src/agent/android_service.dart
create mode 100644 lib/src/agent/desktop_service.dart
create mode 100644 lib/src/model.dart
create mode 100644 lib/src/model/model_root.dart
create mode 100644 lib/src/model/receiver.dart
create mode 100644 lib/src/model/sender.dart
create mode 100644 lib/src/ui.dart
create mode 100644 lib/src/ui/app_root.dart
create mode 100644 lib/src/ui/fragments/message_popup.dart
create mode 100644 lib/src/ui/fragments/settings_pane.dart
create mode 100644 lib/src/ui/fragments/source_selector.dart
create mode 100644 lib/src/ui/main_screen.dart
create mode 100644 lib/src/ui/receiver_page.dart
create mode 100644 lib/src/ui/sender_page.dart
create mode 100644 linux/.gitignore
create mode 100644 linux/CMakeLists.txt
create mode 100644 linux/flutter/CMakeLists.txt
create mode 100644 linux/flutter/generated_plugin_registrant.cc
create mode 100644 linux/flutter/generated_plugin_registrant.h
create mode 100644 linux/flutter/generated_plugins.cmake
create mode 100644 linux/main.cc
create mode 100644 linux/my_application.cc
create mode 100644 linux/my_application.h
create mode 100644 macos/.gitignore
create mode 100644 macos/Flutter/Flutter-Debug.xcconfig
create mode 100644 macos/Flutter/Flutter-Release.xcconfig
create mode 100644 macos/Flutter/GeneratedPluginRegistrant.swift
create mode 100644 macos/Runner.xcodeproj/project.pbxproj
create mode 100644 macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
create mode 100644 macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
create mode 100644 macos/Runner.xcworkspace/contents.xcworkspacedata
create mode 100644 macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
create mode 100644 macos/Runner/AppDelegate.swift
create mode 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
create mode 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png
create mode 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png
create mode 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png
create mode 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png
create mode 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png
create mode 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png
create mode 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png
create mode 100644 macos/Runner/Base.lproj/MainMenu.xib
create mode 100644 macos/Runner/Configs/AppInfo.xcconfig
create mode 100644 macos/Runner/Configs/Debug.xcconfig
create mode 100644 macos/Runner/Configs/Release.xcconfig
create mode 100644 macos/Runner/Configs/Warnings.xcconfig
create mode 100644 macos/Runner/DebugProfile.entitlements
create mode 100644 macos/Runner/Info.plist
create mode 100644 macos/Runner/MainFlutterWindow.swift
create mode 100644 macos/Runner/Release.entitlements
create mode 100644 macos/RunnerTests/RunnerTests.swift
create mode 100644 pubspec.lock
create mode 100644 pubspec.yaml
create mode 100644 test/model/model_root_test.dart
create mode 100644 test/ui/app_root_test.dart
create mode 100644 web/favicon.png
create mode 100644 web/icons/Icon-192.png
create mode 100644 web/icons/Icon-512.png
create mode 100644 web/icons/Icon-maskable-192.png
create mode 100644 web/icons/Icon-maskable-512.png
create mode 100644 web/index.html
create mode 100644 web/manifest.json
create mode 100644 windows/.gitignore
create mode 100644 windows/CMakeLists.txt
create mode 100644 windows/flutter/CMakeLists.txt
create mode 100644 windows/flutter/generated_plugin_registrant.cc
create mode 100644 windows/flutter/generated_plugin_registrant.h
create mode 100644 windows/flutter/generated_plugins.cmake
create mode 100644 windows/runner/CMakeLists.txt
create mode 100644 windows/runner/Runner.rc
create mode 100644 windows/runner/flutter_window.cpp
create mode 100644 windows/runner/flutter_window.h
create mode 100644 windows/runner/main.cpp
create mode 100644 windows/runner/resource.h
create mode 100644 windows/runner/resources/app_icon.ico
create mode 100644 windows/runner/runner.exe.manifest
create mode 100644 windows/runner/utils.cpp
create mode 100644 windows/runner/utils.h
create mode 100644 windows/runner/win32_window.cpp
create mode 100644 windows/runner/win32_window.h
diff --git a/.gitignore b/.gitignore
index b98248d..ceb8bae 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,12 +1,52 @@
-*.iml
-.gradle
-*.jks
-/local.properties
-/.idea/*
-.DS_Store
-/build
-/captures
-.externalNativeBuild
-.cxx
-.idea
-.vscode
+# Kotlin related
+*.iml
+.gradle
+*.jks
+/local.properties
+/.idea/*
+.DS_Store
+/build
+/captures
+.externalNativeBuild
+.cxx
+.idea
+
+# VS Code related
+.vscode
+
+# Miscellaneous
+*.class
+*.log
+*.pyc
+*.swp
+.DS_Store
+.atom/
+.buildlog/
+.history
+.svn/
+
+# IntelliJ related
+*.iml
+*.ipr
+*.iws
+.idea/
+
+# Flutter/Dart/Pub related
+**/doc/api/
+**/ios/Flutter/.last_build_id
+.dart_tool/
+.flutter-plugins
+.flutter-plugins-dependencies
+.packages
+.pub-cache/
+.pub/
+/build/
+
+# Web related
+lib/generated_plugin_registrant.dart
+
+# Symbolication related
+app.*.symbols
+
+# Obfuscation related
+app.*.map.json
\ No newline at end of file
diff --git a/.metadata b/.metadata
new file mode 100644
index 0000000..6eb54a1
--- /dev/null
+++ b/.metadata
@@ -0,0 +1,45 @@
+# This file tracks properties of this Flutter project.
+# Used by Flutter tool to assess capabilities and perform upgrades etc.
+#
+# This file should be version controlled and should not be manually edited.
+
+version:
+ revision: "761747bfc538b5af34aa0d3fac380f1bc331ec49"
+ channel: "stable"
+
+project_type: app
+
+# Tracks metadata for the flutter migrate command
+migration:
+ platforms:
+ - platform: root
+ create_revision: 761747bfc538b5af34aa0d3fac380f1bc331ec49
+ base_revision: 761747bfc538b5af34aa0d3fac380f1bc331ec49
+ - platform: android
+ create_revision: 761747bfc538b5af34aa0d3fac380f1bc331ec49
+ base_revision: 761747bfc538b5af34aa0d3fac380f1bc331ec49
+ - platform: ios
+ create_revision: 761747bfc538b5af34aa0d3fac380f1bc331ec49
+ base_revision: 761747bfc538b5af34aa0d3fac380f1bc331ec49
+ - platform: linux
+ create_revision: 761747bfc538b5af34aa0d3fac380f1bc331ec49
+ base_revision: 761747bfc538b5af34aa0d3fac380f1bc331ec49
+ - platform: macos
+ create_revision: 761747bfc538b5af34aa0d3fac380f1bc331ec49
+ base_revision: 761747bfc538b5af34aa0d3fac380f1bc331ec49
+ - platform: web
+ create_revision: 761747bfc538b5af34aa0d3fac380f1bc331ec49
+ base_revision: 761747bfc538b5af34aa0d3fac380f1bc331ec49
+ - platform: windows
+ create_revision: 761747bfc538b5af34aa0d3fac380f1bc331ec49
+ base_revision: 761747bfc538b5af34aa0d3fac380f1bc331ec49
+
+ # User provided section
+
+ # List of Local paths (relative to this file) that should be
+ # ignored by the migrate tool.
+ #
+ # Files that are not part of the templates will be ignored by default.
+ unmanaged_files:
+ - 'lib/main.dart'
+ - 'ios/Runner.xcodeproj/project.pbxproj'
diff --git a/.vscode/launch.json b/.vscode/launch.json
new file mode 100644
index 0000000..1125187
--- /dev/null
+++ b/.vscode/launch.json
@@ -0,0 +1,25 @@
+{
+ // Use IntelliSense to learn about possible attributes.
+ // Hover to view descriptions of existing attributes.
+ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
+ "version": "0.2.0",
+ "configurations": [
+ {
+ "name": "roc-droid",
+ "request": "launch",
+ "type": "dart"
+ },
+ {
+ "name": "roc-droid (profile mode)",
+ "request": "launch",
+ "type": "dart",
+ "flutterMode": "profile"
+ },
+ {
+ "name": "roc-droid (release mode)",
+ "request": "launch",
+ "type": "dart",
+ "flutterMode": "release"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..337a6dc
--- /dev/null
+++ b/README.md
@@ -0,0 +1,35 @@
+# roc droid
+
+**Table of contents:**
+
+- [roc droid](#roc-droid)
+ - [Temporary organization of files](#temporary-organization-of-files)
+ - [Documentation](#documentation)
+
+## Temporary organization of files
+
+* roc-droid Kotlin implementation files are temporarily stored in special temp folder
+
+* folder location: [temp_storage](/temp_storage/)
+
+* This part is planned to be reimplemented/copied back in the issue: https://github.com/roc-streaming/roc-droid/issues/98
+
+## Documentation
+
+Architecture:
+
+* **Overview** – [Application architecture description](/docs/architecture_overview.md)
+
+* **UI** – [User interface architecture description](/docs/architecture_ui.md)
+
+* **Model** – [Model architecture description](/docs/architecture_model.md)
+
+* **Agent** – [Agent architecture description](/docs/architecture_agent.md)
+
+Tests:
+
+* **Unit testing** - [Unit testing description](/docs/unit_tests.md)
+
+Setups:
+
+* **Flutter - Windows** - [Windows Flutter setup](/docs/install_win.md)
diff --git a/analysis_options.yaml b/analysis_options.yaml
new file mode 100644
index 0000000..abbf301
--- /dev/null
+++ b/analysis_options.yaml
@@ -0,0 +1,47 @@
+analyzer:
+ exclude:
+ # @TODO - check this
+ - 'build/**'
+ - '**/*.g.dart'
+ strong-mode:
+ implicit-casts: false
+ implicit-dynamic: false
+ errors:
+ todo: ignore
+
+linter:
+ rules:
+ # based on effective_dart rules
+ # https://github.com/tenhobi/effective_dart/blob/master/lib/analysis_options.1.2.0.yaml
+ # https://dart-lang.github.io/linter/lints/
+ - annotate_overrides
+ - avoid_catches_without_on_clauses
+ - avoid_catching_errors
+ - avoid_relative_lib_imports
+ - avoid_return_types_on_setters
+ - avoid_returning_null
+ - camel_case_extensions
+ - camel_case_types
+ - constant_identifier_names
+ - curly_braces_in_flow_control_structures
+ - directives_ordering
+ - empty_constructor_bodies
+ - file_names
+ - hash_and_equals
+ - implementation_imports
+ - library_names
+ - library_prefixes
+ - no_leading_underscores_for_library_prefixes
+ - no_leading_underscores_for_local_identifiers
+ - non_constant_identifier_names
+ - prefer_equal_for_default_values
+ - prefer_generic_function_type_aliases
+ - prefer_mixin
+ - prefer_relative_imports
+ - slash_for_doc_comments
+ - type_annotate_public_apis
+ - type_init_formals
+ - unawaited_futures
+ - unnecessary_const
+ - unnecessary_new
+ - use_rethrow_when_possible
diff --git a/android/.gitignore b/android/.gitignore
new file mode 100644
index 0000000..6f56801
--- /dev/null
+++ b/android/.gitignore
@@ -0,0 +1,13 @@
+gradle-wrapper.jar
+/.gradle
+/captures/
+/gradlew
+/gradlew.bat
+/local.properties
+GeneratedPluginRegistrant.java
+
+# Remember to never publicly share your keystore.
+# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
+key.properties
+**/*.keystore
+**/*.jks
diff --git a/android/app/build.gradle b/android/app/build.gradle
new file mode 100644
index 0000000..8c1e8b7
--- /dev/null
+++ b/android/app/build.gradle
@@ -0,0 +1,58 @@
+plugins {
+ id "com.android.application"
+ id "kotlin-android"
+ // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.
+ id "dev.flutter.flutter-gradle-plugin"
+}
+
+def localProperties = new Properties()
+def localPropertiesFile = rootProject.file("local.properties")
+if (localPropertiesFile.exists()) {
+ localPropertiesFile.withReader("UTF-8") { reader ->
+ localProperties.load(reader)
+ }
+}
+
+def flutterVersionCode = localProperties.getProperty("flutter.versionCode")
+if (flutterVersionCode == null) {
+ flutterVersionCode = "1"
+}
+
+def flutterVersionName = localProperties.getProperty("flutter.versionName")
+if (flutterVersionName == null) {
+ flutterVersionName = "1.0"
+}
+
+android {
+ namespace = "com.example.roc_droid"
+ compileSdk = flutter.compileSdkVersion
+ ndkVersion = flutter.ndkVersion
+
+ compileOptions {
+ sourceCompatibility = JavaVersion.VERSION_1_8
+ targetCompatibility = JavaVersion.VERSION_1_8
+ }
+
+ defaultConfig {
+ // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
+ applicationId = "com.example.roc_droid"
+ // You can update the following values to match your application needs.
+ // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
+ minSdk = flutter.minSdkVersion
+ targetSdk = flutter.targetSdkVersion
+ versionCode = flutterVersionCode.toInteger()
+ versionName = flutterVersionName
+ }
+
+ buildTypes {
+ release {
+ // TODO: Add your own signing config for the release build.
+ // Signing with the debug keys for now, so `flutter run --release` works.
+ signingConfig = signingConfigs.debug
+ }
+ }
+}
+
+flutter {
+ source = "../.."
+}
diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml
new file mode 100644
index 0000000..399f698
--- /dev/null
+++ b/android/app/src/debug/AndroidManifest.xml
@@ -0,0 +1,7 @@
+
+
+
+
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..35fcea9
--- /dev/null
+++ b/android/app/src/main/AndroidManifest.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android/app/src/main/kotlin/com/example/roc_droid/MainActivity.kt b/android/app/src/main/kotlin/com/example/roc_droid/MainActivity.kt
new file mode 100644
index 0000000..ec7f965
--- /dev/null
+++ b/android/app/src/main/kotlin/com/example/roc_droid/MainActivity.kt
@@ -0,0 +1,5 @@
+package com.example.roc_droid
+
+import io.flutter.embedding.android.FlutterActivity
+
+class MainActivity: FlutterActivity()
diff --git a/android/app/src/main/res/drawable-v21/launch_background.xml b/android/app/src/main/res/drawable-v21/launch_background.xml
new file mode 100644
index 0000000..f74085f
--- /dev/null
+++ b/android/app/src/main/res/drawable-v21/launch_background.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
diff --git a/android/app/src/main/res/drawable/launch_background.xml b/android/app/src/main/res/drawable/launch_background.xml
new file mode 100644
index 0000000..304732f
--- /dev/null
+++ b/android/app/src/main/res/drawable/launch_background.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/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/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/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@@q0|W-^A&VhjhO+044$%!YxiPI;`p4Q#=k
za-F;6dk-j1J*_nBlG2>3KywUtLX8Ua?`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/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/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/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/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/android/app/src/main/res/values-night/styles.xml b/android/app/src/main/res/values-night/styles.xml
new file mode 100644
index 0000000..06952be
--- /dev/null
+++ b/android/app/src/main/res/values-night/styles.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml
new file mode 100644
index 0000000..cb1ef88
--- /dev/null
+++ b/android/app/src/main/res/values/styles.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
diff --git a/android/app/src/profile/AndroidManifest.xml b/android/app/src/profile/AndroidManifest.xml
new file mode 100644
index 0000000..399f698
--- /dev/null
+++ b/android/app/src/profile/AndroidManifest.xml
@@ -0,0 +1,7 @@
+
+
+
+
diff --git a/android/build.gradle b/android/build.gradle
new file mode 100644
index 0000000..d2ffbff
--- /dev/null
+++ b/android/build.gradle
@@ -0,0 +1,18 @@
+allprojects {
+ repositories {
+ google()
+ mavenCentral()
+ }
+}
+
+rootProject.buildDir = "../build"
+subprojects {
+ project.buildDir = "${rootProject.buildDir}/${project.name}"
+}
+subprojects {
+ project.evaluationDependsOn(":app")
+}
+
+tasks.register("clean", Delete) {
+ delete rootProject.buildDir
+}
diff --git a/android/gradle.properties b/android/gradle.properties
new file mode 100644
index 0000000..3b5b324
--- /dev/null
+++ b/android/gradle.properties
@@ -0,0 +1,3 @@
+org.gradle.jvmargs=-Xmx4G -XX:+HeapDumpOnOutOfMemoryError
+android.useAndroidX=true
+android.enableJetifier=true
diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..e1ca574
--- /dev/null
+++ b/android/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip
diff --git a/android/settings.gradle b/android/settings.gradle
new file mode 100644
index 0000000..536165d
--- /dev/null
+++ b/android/settings.gradle
@@ -0,0 +1,25 @@
+pluginManagement {
+ def flutterSdkPath = {
+ def properties = new Properties()
+ file("local.properties").withInputStream { properties.load(it) }
+ def flutterSdkPath = properties.getProperty("flutter.sdk")
+ assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
+ return flutterSdkPath
+ }()
+
+ includeBuild("$flutterSdkPath/packages/flutter_tools/gradle")
+
+ repositories {
+ google()
+ mavenCentral()
+ gradlePluginPortal()
+ }
+}
+
+plugins {
+ id "dev.flutter.flutter-plugin-loader" version "1.0.0"
+ id "com.android.application" version "7.3.0" apply false
+ id "org.jetbrains.kotlin.android" version "1.7.10" apply false
+}
+
+include ":app"
diff --git a/docs/architecture_agent.md b/docs/architecture_agent.md
new file mode 100644
index 0000000..56cfa76
--- /dev/null
+++ b/docs/architecture_agent.md
@@ -0,0 +1,7 @@
+# Agent architecture description
+
+**Table of contents:**
+
+- [Agent architecture description](#agent-architecture-description)
+
+TODO - add a description of the agent module when it becomes clear
diff --git a/docs/architecture_model.md b/docs/architecture_model.md
new file mode 100644
index 0000000..6f048c6
--- /dev/null
+++ b/docs/architecture_model.md
@@ -0,0 +1,24 @@
+# Model architecture description
+
+**Table of contents:**
+
+- [Model architecture description](#model-architecture-description)
+ - [Model tree](#model-tree)
+
+## Model tree
+
+
+
+The roc-droid `Model` module is responsible for managing the data model of the application's graphical interface. Data changes in the model are initiated by the `Agent` module and then utilized by the `UI` module.
+
+Description of the model tree:
+
+* The roc-droid client application's model is based on the `ModelRoot` class, highlighted in violet.
+
+ * Class implementation: [ModelRoot](/lib/src/model/model_root.dart)
+
+* The `ModelRoot` class itself is derived from two base classes: `Receiver` and `Sender`, both highlighted in red.
+
+ * Receiver implementation: [Receiver](/lib/src/model/receiver.dart)
+
+ * Sender implementation: [Sender](/lib/src/model/sender.dart)
diff --git a/docs/architecture_overview.md b/docs/architecture_overview.md
new file mode 100644
index 0000000..92f817f
--- /dev/null
+++ b/docs/architecture_overview.md
@@ -0,0 +1,31 @@
+# Application architecture description
+
+**Table of contents:**
+
+- [Application architecture description](#application-architecture-description)
+ - [Architecture overview](#architecture-overview)
+ - [Description of modules](#description-of-modules)
+
+## Architecture overview
+
+
+
+roc-droid is responsible for implementing and managing the functionality of the roc-toolkit logic in the form of an application.
+
+The roc-droid implementation is comprised of three modules:
+
+* **UI** – (lib/src/ui): This module is responsible for rendering the user interface and handling user interactions with the application functionality.
+
+* **Model** – (lib/src/model): This module contains all the primary classes and entities necessary for updating the visual display of the graphical interface.
+
+* **Agent** – (lib/src/agent): This module manages client interaction with the core logic of the roc-toolkit.
+
+## Description of modules
+
+The roc-droid modules are described in the following documents:
+
+* **UI** – [User interface architecture description](/docs/architecture_ui.md)
+
+* **Model** – [Model architecture description](/docs/architecture_model.md)
+
+* **Agent** – [Agent architecture description](/docs/architecture_agent.md)
\ No newline at end of file
diff --git a/docs/architecture_ui.md b/docs/architecture_ui.md
new file mode 100644
index 0000000..2a75cb0
--- /dev/null
+++ b/docs/architecture_ui.md
@@ -0,0 +1,87 @@
+# User interface architecture description
+
+**Table of contents:**
+
+- [User interface architecture description](#user-interface-architecture-description)
+ - [Widget types](#widget-types)
+ - [Widget tree](#widget-tree)
+
+## Widget types
+
+
+
+Widgets can be categorized into the following types:
+
+* **Content Layer**
+
+ Widgets at this level define the application's structure (layout) and the binding of the content (models) to the representation (components from the representation layer). These widgets actively interact with the model layer using the Observer pattern.
+
+ Sublevels:
+
+ * `Screen`: This widget corresponds to the entire screen.
+
+ * `Page`: This widget represents a page within the screen. Switching between pages is done via the lower tab bar.
+
+ * `Fragment`: This widget represents a smaller fragment of the UI, such as a separate block or item in a list.
+
+* **Representation Layer**
+
+ Widgets at this level, known as components, are the building blocks of the UI. A component defines its appearance and user interaction but is not tied to specific content (model).
+
+ Sublevels:
+
+ * `roc Component`: Custom components that can implement application-specific styles or interface elements.
+
+ * `Flutter Component`: Standard components from the Flutter SDK.
+
+ Fragment vs. Component
+
+ It's important to understand the difference between a fragment and a component:
+
+ * `Fragment`: Responsible for communication with specific data (models or defined data). However, it is not responsible for a specific representation; this task is delegated to the components.
+
+ * `Component`: Not tied to specific data—it receives data from above and does not interact with models. It is responsible for implementing a specific representation, such as styles and responses to clicks.
+
+ > **Note:** In our code, custom component classes are prefixed with `roc` to distinguish them from standard components. Other types of widgets do not have a special prefix.
+
+ > **Note:** In some frameworks, an entity similar to a fragment is called a `widget`. We use the term `fragment` for clarity (like in Android SDK).
+
+## Widget tree
+
+
+
+The UI diagram of the Rock Droid application client illustrates a tree of widgets that form the visual presentation for the user.
+
+Designations:
+
+* **Purple:** Root class of the UI application (`Content Layer`)
+
+ * roc-droid classes:
+
+ * [AppRoot](/lib/src/ui/app_root.dart)
+
+* **Red:** Screen-level widgets (`Content Layer`)
+
+ * roc-droid classes:
+
+ * [MainScreen](/lib/src/ui/main_screen.dart)
+
+* **Orange:** Page-level widgets (`Content Layer`)
+
+ * roc-droid classes:
+
+ * [ReceiverPage](/lib/src/ui/receiver_page.dart)
+
+ * [SenderPage](/lib/src/ui/sender_page.dart)
+
+* **Yellow:** Fragment-level widgets (`Content Layer`)
+
+ * Classes:
+
+ * [MessagePopup](/lib/src/ui/fragments/message_popup.dart)
+
+ * [SettingsPane](/lib/src/ui/fragments/settings_pane.dart)
+
+ * [SourceSelector](/lib/src/ui/fragments/source_selector.dart)
+
+* **Gray:** Native Flutter class (`Representation Layer`)
diff --git a/docs/diagrams/architecture.drawio b/docs/diagrams/architecture.drawio
new file mode 100644
index 0000000..d5947f3
--- /dev/null
+++ b/docs/diagrams/architecture.drawio
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/diagrams/model.drawio b/docs/diagrams/model.drawio
new file mode 100644
index 0000000..3c29a96
--- /dev/null
+++ b/docs/diagrams/model.drawio
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/diagrams/widget_tree.drawio b/docs/diagrams/widget_tree.drawio
new file mode 100644
index 0000000..2bc472b
--- /dev/null
+++ b/docs/diagrams/widget_tree.drawio
@@ -0,0 +1,93 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/diagrams/widget_types.drawio b/docs/diagrams/widget_types.drawio
new file mode 100644
index 0000000..8bce142
--- /dev/null
+++ b/docs/diagrams/widget_types.drawio
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/images/architecture.png b/docs/images/architecture.png
new file mode 100644
index 0000000000000000000000000000000000000000..5490dc6bb646e057cd683b0d4e5e60dbef630ff4
GIT binary patch
literal 38799
zcmeFZ2UL{Hwk`_T2&hOKd=B7=M|Zl2z*Bs>!8
zzkczEi+Z2~gLot~c*MmW{rrSoJRRKw9DM?XeO-gVBkFV-}MqE@}Qb<%r
zNKDj1OqNGNRa6Z8PfS)=Oh(4)7rmpqtM6}yhUjolZ*NB)aV;rfQNW51;pyvw4h;l9
zjV!?b#6-bk2{rHwypWds^%Em4$q$~W`uTagB3zyHJ;6A%q$Fg7C8WV)K7AbvLjxXh
zb@1EU6Xgp2(sp%5p@~h@Jp#}^;E9%)xU?`}{j*PVM>od+&wpY;oRe#iqx-M<=()KV
z25X3`nTP3Ud4@Yn35n_1|C&dLYe1kU+V}UgC55GhC4apL3iEUQ_0+{R#M2pcD9$6H
z2}Jr^c7VUHBN)d|nVJA`2#Nh_==ocQT7DQ$4=a0V7s+r{AJtGdGo+EzFD5cpeoju(
zhLT#kKqy)kjuuuPqMoX%VF(jxgqV1czPKpN3*qQy7APgDtLm!}DCvk2C5i|9vGTIi
z@KAL(#rWx{JDE87yQ7_rCEdK7!7FcBv}(9&sJKD6kF%CHc%bR0VW#S6tc8%&mekR4
zH#Tu}QFAuaF$hBWdz!)m^(|4B8h(gCO@nX`7im*peIFlfQzszn8kZ
zxuvc;(oahb6YME%>?5Xa?uPI;2h;KiRt<93Hw^~8SXyc5po0Bm#Qcfl)8r9X(?pAT
zxQRPC!NODx{KH`WrWh}El(dwtu8FFIs;aaxEKJ%&OUhl_OhPBb5iGKno=kX{xRVXc)rDSI0{<*vsEQ7A2?UuC1Z#AK))5s_q`_4f6tvr-np_x`)CwJ-yt0
z9HpH7Ji|iNWnii@VyU{^%eN(8vUCr
z?Pa2+t%@`aM5?>PQDW-e-X{8%W)|jZQu_WD5@MFB2xl=Vv<@2M;-e$!9vemTdzfQ@32Pa7Xksk=WQ|}h8lf0oxi!ZM3^l2
zAswJ8>*OBfW#(ay)KM3eGVlqJFjCV*YK4ZXI%1^7%+y?s{A8WYRfF`^i4Bpm0XisA
zRT()meNlH+O{BN0nWZV{L>uX6>EWWK=C2l}?t<|&m9az^tAu<<
zf`gp>bu``GM1x_$NL3FD4R1u@dpbUMDU3`7b{j~hdG-b6M{miw3
zz4SHJe2_+ZR?fN_uHGR=7)v7)36#3Ggu1$a2yho#`oih?QxumYj=8uu-sIFw!wtG)&IV1mSKF
z9HeS4VP)!Lf-=!DR}WG5kn=$6iesF_^~LoO>i&Ux-l5J$;o@Q1A^PeVNmJhtjJJt_
zp}VPcKqy*TR8v)2Ts+X-7b%MoMQgjFoMrsXy#i!{P#(w-2~+^eRZ=Qc+9lLa%t;*S
z5^N3+Py-8~h163=J0ZRNFeoFKte-kY*U}s5FH6+ha8qaRV1&7tir6jar;X&cRfrBM>lLMBb=B%o#=Z4V@0e&kO
z9wLL%GYL0y5A?Be40Z|&_Hj1>-2=W_sBl0l;TjY!8zk*59bzPIg7DGOGw_wwc5;@p
z(l7$<9jOr_DHb4x@CX!>a0?HVk@PY&2{o6J7IQICH3$$_GgO!Jw~|s77ZX?4Muqx&
zVe~^pLotSaYFZ(l`r@I^I$sR1XL?&=+-cR)v8PgsO&nxrFN?
z#r4DGq@`RO!Q{1Mocu%F+$H=FjxOL|#@<>Xl0IfgM@e5X5XrQ{bWDM?d;nwc$I-FLs>EZ-
zf?qogqba<>OzIh?VYuZisYXwE(?K-$qQmJ76D|kO*e}RO#xD^jA{2_+c#Gnz)&(Bc
z+n>D7oXEVUgEw0^4^3+wk_g=Yx?0`$V05poF2Bgw)jcXOdUW?j#Z+AzD{7(PLDa_A
ztXK|86%sPqD7*c;RR2vU8cs&p_vf7e
zjiZ+0yjL7tl}PwFj`(~yqk`A!xy`NiyTwg8QV4XFRAu{DKctk`ACSaJg%`5Y9kuAB
z;zZt|A?ZjWjstY;um(E)ATfFEsD+CWNmEB8iHXv$_atObK&Lkz@M|ahZowHyMhTxf
zc4g(l?}49FB!!^X4CJ_uTHFDn66YYfP4jzVul@v`K5_4$J8JRf9!Xr*Hp#=tqlsx5
zlQc0anx|3zEsFn2QJ^OmtNQIm^d7TQx@dm;>Ym?)wM$voCuv$492A76#iVRpuSw4W?s%q)@g4%{FD)rD)udf1pU5jKv(PzXzteM
zH$BOP>}I)V9agV8-RD2Mu5o31t~l>=oP*eL8@g}Q12B31OA=(Aqn*qP^)`@qVex^`
zbeTVgE*mvGpcIW!48CPWE7*1gN>;C0=f&IVqIG3E&$8uyPO5_(+Rt}#`S^Y7_Tv6C
zq*LWZzGf%mTF?1uUXk%Y%s(uM?5*>pQ)oBpP&?tc$@-?3S?w%AzHCKy#y~0$YITJu8J%DKrwP@!@qXw?
zm^*KB*y@y2{;BiNQ%F{;Ve?#HNg=d?iPwnpmKp43@vXT~Voy-=9YG&igI?PH>}{}?wO3Ju;GOEQ)XTOK8>-d{}EUY$;gSZt`?
zy(_;^f_Ar^;gGe66Oc1lMM5uZ|vn=
z<6q>_&kjP2Iw{T!EyolM=JB^b+q?a>p!OYC?l`Wd>y8BPk1rMR4PFIf9eZrP2P@bR
zS{3}j2i|9_nZTUlRW2&iexMq
zm#7Rc6^6k+qhc%w4F)iJq|FT|+E1k1w}5)5)jGOi!;T?Pc;vER`3m&{+^*c=V5%3r
z*vo|+k-ujdRj;~<#*{0<#IS;#%hKccblX2NpG3#O)_ocs5$~MJ8ZK6hmbQ)`Uwxia
zg4}#K9m>#iN5fZKZuMMh6I!ctwCOrVGlG&6IX}a2=d|h-nLiJ1?$~~Rw_Cc?@Iugd
znNVK0P)n8fVwVcOQ~jLzGdkGw+6$WXOuK5*Pm7=Q%oUL36ouL7h>bHPD}?m{2W5+u
zJN4JL^K_p`@Skbwc>3Yx?YAszesNVkgDC5rT`yY>K-7^t*mo7&rT0P#v_kE6Cac0?)zY*VlX*E=o+wKE9$QUBRH4D{=woR#XAz@|e2cPC*
z^k$vBv9*X2mXp1-ezbVDDPPkQik9S!
zDL8?8;eW=s9zv!CT*(dT#OGdgDtIqP?l%I!O_hcu)^m#HlKjiT{N099=WiMOYZ=6D
z9q*!naK5)A>rvYEj=04eNO=}m^eGBTm4{Lg|A)y1%9R8)x^^NBk6sfOcK{y=$iqBtX#U{FgYB9O;W)DzNKDFZ`C+aph4e!
z5r*=4Dj+M1&JcnG5Xpw3ypmMj0Wu-fxfwN1XF%50RTM<|{01OS>XX>gAoEr
zDsx0`sPk0noYsKsMQM>A<@0nv*7zVp3=%*j8wi_CR5=Oqav^VKesxZBKvsC8$eZ$c
z1|VxI%aDMqTm)oaL$Qe}P(W7d&7!N$sSn7qeTqCNpWgyx-HjPikN_gtmte0%6@4N%
zA68FwPIW+*XjtSz`8*4d^>t^+KvuW`S%08Fq6&)0&4(>nol_o=g$NZnP(IHAWFsRP
za*zNb8A#i%s-zOR`LY+Qb4ma*H|ioA%I9|g+0;UYJY)rUsL5V5_Noew$jz7ItvV+Z
zkiq8*k(AH#0NKJph9V?@NcP#s>#E8-A~!VWj5;SbAk*q9w4i)`ACPUF&Qyl1TmWRB
zPy$y~=7`+T7sypOSpb=IX`u<_^L#*dz-~qg2_TYv^qft&a*T{JJN}Xx8AKdBa{cJh
zk#L0qJW3KaI|f=_I`7LxGM<2s=wQe3BpRRf@hV^
z%H;fZ8?bs_ahsep9k5EbEx1Iv1y*qT2Nb6IiU+WAwdOxTCJa~!59*oHF6jbRUlG{2
zE81jJenuqm%_}C+BskKt%-%FPVf+kdAYV)=z_^Dd4k#UhEYek|ugmE+m&q^M!BMz?A;D
zbDNA5=q?YL24In({)!IF#Z-cyoQ#VUq7S(SSWqQh0gIpg#LeskL<9Vwqy;SKPm^i`
zL1=e9Jxh5F{Gj6mEH1K=r2z{{yQ|AjOAAE7r2<&!$o`K5eE^xuvp=-L^oSkuM`C8k
z$JWvx@MeYy@5RRK7;P<4q|<0O?AOG$4=-;yk9B@BnuXYhw+1`rN4cj7(wv6G`UA(&
zW|%vn{!kJ0T!8@mrdX;IDvb`~{oWQTQ@7X8K{7f6$8?7h<$Nkb8jc1$)w
zVP8V0I=iEv?h^J7gApkq^Wg#|mi}&AmCE}TGI@5p53zRgUm1#?>)keDoG`a*wGK25
zd4b+lorVufA#4ULhr@d~BJmM(Wsf4hIj}g?B%@HMDqRKiR>TX
z><`SQt13p!jpQp^#vTw}qS7a>`Eaq4nX8dB-KFom2O%p3c9iVHtc4#RDa4i6Tokkl
zQ2kPK5SM1tFe8MX_a2YlOG*#9io2(0>NZZux>~rkr%iXuT9}|raWS6cHQK0|ygW}g6
zG|z93PoqzWY-b&7t~l)19j5-?3cEL+0$bkHg{KgpzKq7t%(5%6&px73p@x$T6+u5P
zYL#!dfK%#$$(qi#lp&hhU|i$e#zYwt-9vJ%}VABe8>%QD8<#Ee%5L5
zI2GK~p=0#%+-7ORip=6pgY=0Z8NzZ^BTk7w9Xp7IspWL%!v{W2(C^Im>P=t6nRt>5
zl#UcwC&kb5l|4=_y#QneK%Bb)-|x|qxdHWcLIIv47m718oCI2}QJ!csQ=3b9Aq00*
z*yI=egyV_<7fSnh9tm`eKA$0c{_5O|J1t#f`~p`$!VHYaO8X53Sr^a=jg5E+G`VZn
zSRU0}Spbsw%5$6fX|mYWrLGzd?C3ESbAzD?*j{q=`NPS4jvopWSg&$;uhyC!&dD`a
zU;^6K8j~7UM7?mhv!Ar9qEZ#=;lFdo#MleyrBNenI2}c4=*KS@CKQvxuC00H@K?
z7eNCn0%m(rB5(Olesw`abOfB8^j_yxVkrB9FT7=B<;pTuLE~yFpj?L?RVoYc9!TKe
zXtRo@um8f{d_lATm_2`M*IP~p5Q=zSxW8u?TwY255Tp=rz*T=(K0OgD23APp)&DVW
z`R{@LM+dsUCHjB3L}MAxY^`OnH1i5y77>(Ne7uyzfjpb(u>Tgu(ozd^Pm;(fKfNd)
z?4Js~7!39{!lV$K@XP%63qSL#_fBNS2V2QY@`3JG?J*;(%_5E8$j6d7=1++nOr9Sb
zjoJCM)ET32rZIYSW2u>`p{A7~^D>0f1SIva9M(9VOc3OhC`&AtKP*kl?D=C>-tt~L
zyY{FOp0E|O2Wlc=AnSYGSotgO65^#rRGf}j*Khe$_h1(OZ1efdSQ&c%N-r*ZGkfjA
zL*M|}38RmA3
z4^3s)xu@})9lFN+$H-0qf=BH_Y8mWfv`gxoWlp75jeI4@%8Uj?^ne}@?H`6DP1qa0
zp`1{nJPhf!zRDPjX3@O;uKjJhd^pqogT;?bqVHrN=99iDDrZYZ6(Wm^@9A9PAd87<
zuO;p-(2H4INT;NqX>1|LE(!-SY{iM&pHN#-(3I&{Q<6AWEZbL}cn8=1fPQjrq*KIy
zbOROPxb^!n7(N@n4^w{IJnx$KN25e-Hr?}SQ1AzI*)cy>{60pEuurjt__^8(+e8G*
zj)&U!ua5G5>Xcusl^Hr1CD3)-Zya>siynku7F3%4*tl&l73qT!it9}j&X~Z1aN?-D
zj$tD%=g`?$R&vx-w8Uk_a~CDk_x;>uLwgJH;jJ?lTKT$I3QG9HkSUsY!Qgls3y_fO
z{7lG!0Mp`Nc1_{)O@Yk}h#29a-Oy3$e)}j#+2vvM+!|k5xb13D%z333k*Zr$4Vy_V
zqv3kfo7(#$EX~yYkqUbs*F5ht6tT(2u)Y}CD)4L1DVr$?(#)``*y-p-eOi3nS!z=$
zcW;Ga@l?9fizk(FFUB5Aw5-iUB(W$(pteSijncRaT~1~YG_QRi9C_xW|ca82yg{1s%
zMbMYjc)^BZ7!XgU@*|C=rN`qo+4^5LFvXmARG)jB%-G@e_
zM%NGJqdtj7b1(nFJxUwBH<8bYOq`}FR&_WBMlX7Mr#_K^xWO!>{LY0ee0a+sha>`j
z?$iTds7^Bf(I)txZ{&aX@K3&Ti2Ko#qq6}23&-0_U}Gw4xLksaaz!pRPBbT`cAxrG
zv^Y$S`H>{wl3a9;sc~!cK)@zu{p#53P=b)c`sYuM%W^r1UHOg0;%yeI)EDC&&U=vY
zU%w7w!Q-DO1koBUAPrCJKybP{_aZ)noIQi@mt!P_oNV$6P~k!vew-e90`R?LjlcAa
z5`OC#eUn$F(lomi2u&ALh~Nd$Al2}9S#N^3YjT@^5Mc?^BcH?=*Zcj72LA5To|oDn
zSkWi{L`Dq3zJs>p62-;1-iuM)ie5w)d-ljnTy>C=6MMp$wY4SEfI|`>;pECDRDKY
zfxvQ;U5z=WDPC)i8U?|z%RKh}8Q_U93J9Jm_?_yB?z#o)B*OabMv==~QspPC%NzJu
z*H|jUGIuX(%fw0PI@AvVo7eZIIT9AiPd)_-gOv-Hc`p|Q9A6b|Bx}0MDq`mYus)s*
zilYHZ*~o{Nx(qKDpqlGjPA{-SnwZnv!x`eF>UFSku@&lB)9KaAnj)w5xxPeEW1H)mTJ>B=F@-Wz!@OjO#hoiYdt2d@=
z7J8I8jKX^ciSaQso#~L>aj&K4a9VzZo-x|Ra5C)U=%vUb`yi$TR53U_A^g6RIg$lj|RAFX8`Zj9Nw4%W~@-Z(^p?Iqe)rOzcR1>6gkN1e)?LIR7QjkY88(W=$~M
zP6}IlKi7Ax_0sEpdtye_Mll`w)Mu)(4&6F@pd3=6%jK)OEgqp{fa-D~~3r~8376%6V_B|G)U%&FL7gX@u*B1}xxU;IeK}7v_
zC=MkiX-hwo5L|iv4#VN@QuPCIRi}?ixW}&;$Y;i4zDh6k*@tOj>zQFA`7kAS5!36(
zc!$LWQ{6Jl=gJ%Xnmh7}n-U!?(G=Usz=i#SNI`BVO$DdVc`V7`m`y&%Ydn7!-vMLH
z!S>=;yv(ysY4YQCimjH3S={BvOq;%4@;|;AAz|#T`*7DWY-XdA-3)6(O)j%vfeW(f
z*$`Vmo*;`&y=v4*gfBBe^;rLTWPYv0+!b`
zQCj_cEGoAF)~diB<=xH>wVPDf_3=xWYghOr)Uxs|xmv+qJTN~N=T&&z_5zTYm-`#s
zX|TCDU8Q#Fx4^(821yO8p^EDs^x+8Hxuj
zjz(3l;<|E#XqH242LiL$Q6`bO9{xRj@}mcJW7Rag8MX_0j{}C%-X3ee1R6^i`f|+p`Bt$5PekOO#)FIU}oQfA~$U
z^o~Up3H$nAeR`Ud@-rw%_VR45%Kn08tPH-rKiOk<-Mc)oHy$Rh^%djGI_$qWzhX)B33a
zNXYhZM)^ch^mo<`JGmKtR}~ddwc%f@(d7FG(5-07*RT@UJEp4)DCuXL9mdwh5V9(e
zpjUmEKkY*P3peQ58|{(#1sXApELZNO6guS)G5pfs{_L?sSJ>`wVF1^iNXntZZS`Yu
zS;mA01jzl_w2pSxcf7Pi-f|+pRt*I=f$7^FrT^K*Auc(m;<9Yt*)m;sNS@dH|Es}!
zcvHAnKiCI#=(p$+4mXxE_cy4RY@W&4G`d;V9CC1+>W^Ajb!=%T?xp4%DCXn|{^*+h
zG<3o$6TyC=rK~81`CzU{nQ7{f15HIZKoJBu$}v}1d~2m5*UJxIxU(%+jcyku)du$r
zg|_MRD8ne!@r5ap(|1k~H#6sd#n>wpO?NkIY09}&47vJli$S-EqN!UT}rIsF#zH&r|qj*s4M6*&P8NPY7A
zoHt7A`(%M0H|unX(>dOt?qd3(UG$@1joL$>tI
zl&>OlZ@%!BH}H4LuStzv{bc_>qmZZQ{^#we$gUgtgoeQDTa|y-uRBh(=LGq>KEUjR
zjXfPzuHCI&L`S&9z19?qm`6eV$PQE$$Iu;YdTi1io}$*DCwEhljlHiUvBb=wr<%~vxe^d**=yD@(uSWzvwRq
z==5M70X^jM7fn^@Nz+cDxBX9)hs4JE+%7L}bA-jnPIjJ@=Q@Wd4WCz3#~T`KEm`VyoB)VQ+m)~sh~x}h8n}Bz2ch4;bljj;v5If
zWPuKA)5e9y%|@!cfp>8XXeq{+@e{+3D0*B0nCH!PX9&z>obn&b&;d1BCMdrQ_pDj#
zn7dp}`VOb4`C+Ci)8YU=-c>zsM=d|~MrNUc$?G!|>0Y{1K5Tuvwdp6amh8g$id``H
z6em(ZbzF#Ui4W;d1Gmc1i@=Y|P^6~2^DPtzEH(+0Unv;Gc+&Jq^z3QpZZtCmbM%-n
z-nWbEMbq>dKN#r!n$LhH-x!R~l78FXVAa~SKg9K168DA&L000BeE)Z*P1G080yJGA
zdcW0hewlZHkfLmgef<8ZHJS*h^%tTyTY)Bo0*z>yj9Fp2zmM46TS-l{Yf6ce?gUU=
zm~^={`@wQk%#8P&bY<8m#s!GOg6ljbKCU1Q?7De$>Uqd~7zFiCy)958WtX(dXUo_C
zFL^c~zn0-|!0Mj>tN#T^^`BiG_|IR5D~NwYjHx-_*(D{+0iqw{+Uf5;Fn4B=-c9H$y3v_3u|28R00>#HcX&1Pyu62n~isgp*Rg}t}F
z+;QA_-k_a%t16xo*>_n@>1R!cN$s~O-b{7S{IlOa8k7)fs)M(AN%aUS_`+xpE~I(S
zJ&81MG>+%l@1S|}mP4u4Gtqm5t$o`A&n(I&FJB!lWLL#>C-EXovcYdR^_>%m-XCsh
z-T<5S+^WOQ1)*2%?4#$66!z=!^BL{UL|=`JY0Za^bU^iy<<=pSgE#!E1P?5Rxmc(A
zE>=?-8lK6FePsf2{YRqf(R9CeqpT3rThAEU=(X4B^1BraTkimn)z8Mdu-DcwwiNo{
zV+M9Bh8Qu%^~~w-J>EK704;TCoha;DYtRtbS89|lyQ}G`
zA9hw|f(h-&g%rA@@{}r;4A?R2Y2Y=8yE0Curpx0?{lV~($LC5x1o2yF&ASY>f>p1i
za9NC;%ZESA#Iypx!If>Fcafi}Z~t)1fj7wx>Y%Agbi)6bdBxHA=t@F4R`cb#&c-Oc
za8X6Rj1HWRY1ft+idu|11IM%PkENAK7Feeg-*4SFUmmr4Hmam(ZyjyW!qm7|)g2bT
zf3_9isc#`%hQO^z)r!43(f21Z;OP_;f;bog!99BP
zrkaw4tjDum?FvBup}&{F1_D)j@M!PGtCi>yY=fD(e<~gvSBrD?x_k2!BoQFG)K`l)
zQ-5!tzh6X7qL&H=V_?QM<&|$6FsbF3vgo{_35P#2`TzAw(3gx?lcb7U@F4fuKbb_2
z@468G3Xk;9J-Zok;a^Id7t~DXA8oyQ9~~osUx?R=P&~LGP1t+*0ZX`b&Ed}7OBavD
zJ_2q--O-6$|Fs52pAy4RlKrhm$x!;GyE4Rv6ckuPp8c91IMMUp0Qp2Y$%pUr=dEx=
z!S7;vsblEUynnyr`qx#zv@-WjaPxZQ$54~2;7^Zr#N;b^|_ZJ
zPnDbNXCAvcj?A5Y@V@AI%6eh{Aso^8mvKkgF4O2}TmHp
znVxL5juZKc&QH6-fT-JH8~uDGcN}2*{Kvaz+VsHkEdPc2hg3i5Kfa08mbq^2gFDs_S3B)z-T(4rWG~Tg
zmg69L>xuHVjr*}(;Qzj{Lv3alzk`@};z^`HeQ}co_jw5JxTIPqu{zTCS9RpSZ}}mX
z54orEP?wCbl$I|Q7T!$_uEBx@ynTf9EMYBsXhw$GzDpK=mh=+e>*R3^dLCddvMFrqm|qm1Xf*tByCC!H9K>ptx+Y|l0lIy=sY
z(3z#Zq5|&3!fgYT(*cA9PN6?+g*@0>J~I|N)qR4nR6l*yKCp^c#EPcOaY{2)Yx_c?*^5Ir2
z$cAK74lngj{%AW^IPLuKyLALe$gC~Bo+TD(eS+^dT9sdQb
zrCTR(DS~tONh&t2R#lOv$O<>^i1NMXS$do%pgs#@8D3DCgCcWEWDQHe$^M_$;I9~x
zxtG>9yEzfha(NrFKu|4-)J|Cmzwf?#(;@3I{s0TybSZbwj|!PQJVkhTaG{MQ+2KZx
zi1zQ>>lVO&Jok@v@Z3|Y*L-s#n=<1UcTsQw;-gg@cn%8g9AiJPwmX0uD+P(KSy4x4
z0oKWzK5l^%ZpzI+ucg1b1QOi2lW_&hVCkZNjROplGP{onqCWw!_&v&Bz2*Vbu2h6F
zyN#xaewz*;pI|=HVBc?LPb+wXBaUZ3oj%h0dFp>R3ys1
z>b@`EGTV!5nJLOw%G^tm<1LT9LQWhR`O(PGOtBY{`Z>bXp9&4-%Xqb{Jr$X2U!*Zoi
za3mo*Dzu8XZ78_k)^V))>V+~TpRdmf%-5)R@4er)J&Tt@^#w&&_uEBWtwQyO9Be*w
zeb*edIm|TGeSZ+V$38Am++X`N+KlO4a7
zCORDOPH1eQZgJs+VQm2u^hPz)t@lp{6PGu|qPJHj?+->VXFJ`#i`f-B2vrzqp-~=E
z42g_VKty&uN@8bDQ`-5n>}jj>kIEh;w&j$Uop&UPR%^G;^wdS|Zlra#_OtoDBDF2n
z1_6wPVs0V+Yzk&s^jp&kR#Bjim>Kq)VyPYE@vNe^l1tj9U#?mRbFKp~H*@2_3uT
zDb+jUsE?&@(J{M&S@aAD{9}iL)uM?u>zg=u>Fhm;(z_Rs^UOIe^58aRb{oS#2JVo{
zP%@rkar^$(8T150ObURhM%8{)#leQ&F_7~OAHQBr$6Fbf0GU!MJQm8psu8Vj-*}3!Tpa#E?1nPgx9rQ{7T%A7gT8CC8H^`-=r^v(4CvIPMEQd
zsdzTd&F~Qm+tae!n+Z-8J+QWEO<@_W_8IKkW^}B-8oIyUZ;Z)?FNZkqwK?pyIo7u3
z_;R!jCjPu?dI(<^YQ8-;60xZ0=p5y*Dd>}U*jL>sH8z+rKg;@6&0&RDOP7FZftmf3
zzAU88kh9FJHGivAEgBT()dJOT5(@gIDNpWgTa3cH?Bs=p`s%W>hsb(4=f|H5(o=Q*qY-UC#k`Y})i
zEwQc^9ts)sxlbnJJ9O@}+;`ert%Wu;ifixv);?(Gb!I%}d=CNc|4G`Bmr1_V&vcpUvqsNT8l5dF(9cQq{8Sj6D!kZ>
zeVhToj-pblIp0)Hq_FH{VW}J=k4byk_9P&Ihx#
z(VXQmo7tRs;oK`=u^g(|BrtMUaO8zS`*+4igk^2bC!ntHDfkxyrdR<-{)4jmuZnMx
zVd-$w%*UtL{9n@zqj?z9O>KJhK3b$1j-Fz@&5}11bwd;T0hklB`jMmA)O=X~vcbmI
z@@WUoc4ouTGI6RauYdoAy@-=;eMbcT2I;KPbeui@g>|9ly1qzg}Cql}Fgl
zyP%}?Xlt)zT(0AD%JjYK4zTgd;V&M?(1VEn#y5ItP3%&!8h|-GPaSp5N(O^qlo%$+$hrW}=j=x=
z2Qvb}vL9I5z_8)6o+GdSU?(#t=19mR0fG0&qgL_#(Pj0;rizflL@;%Kt)r<^t_{@N
zjaZZOgBzV*#PvWQt;fGNCHnVznWcKFvmBpHE{b&|MU7x4Zd{0F@o&3+KCGoMoYDXs
zvIj>43v&J%bR*>BtznQj90Jp97QO}$9d&^dL&Kq?Y}vxL%plQ%Pt(3u;RJV}v-`r2
zhTM~*60Xo9*3No{82+g^$5$(W5uM2vv1bSQmo1CgUghQGB0j$=8ZAzUI8k@0k91%u
zlIm&Fb*<#f-*2j4x}t+aCb5TmAR0RWDz`=Zkq?DKlrQYDweZ2x6*rKWNvQq##*M1-
z;Iwzg^jF#3E$qNmVpzWIb&aFI7D=Vyn1ZvI>n|U5&cX^JC;PL}+?Ol|L0-^2P=%7;
zE!C$pBQ-B{Mq2@R%$4nFII)gwSh(K5~zLfgO3QzFaa~?s4}VNsR38&gCHd}1HFq|Ve~~_lm^64
zRfV|$EAUoZn}J~Gc2zf^F04?O3;7qReiI4SvA
z)9~TB$IZ(`6KX2~R){2~S-#>LVdv1B#H95Y3b<~^gS~CXxxUi-)IUIe
z_UacV<5NA%sI_gerBJ8Y`;r)`yN@(X_U9+9{*Kf{G5kO8d;Yyf{&%kPKifI}Ey4e<
zd+&db1gFTMMzqnK?=Qwuvq(#Z?KDoiMd$h$N+(<9a}YrZZxP}r3bwwF%j9)|O}=&D
z+mugn>r_s1%5=(OZB!bu6$%F>)9&>RPkHI_N(acMkIdJBnIH$e36g5LHGtVU+U^E-qL_>rpO_tMpI3@;p`Ig#tyG$5pa
z%T~|0hm?uE(h43+gxAjOm~XLTe?Ccn@L4P{(*M_V
zUATTtx6c1+`^k19Dv&f<;r49_rxvy!?&%i^MH)oEu{@jz2LmMx3
z*M-(ku#I7HWwZD8!0uw9GXpzONW-~|$>0CsF3$n~IHzq}IXPj;5u@N?!J-JFW%@M0
zrrOx-Y+xyIuzDW)$+@v4j?(~1SxHFMT;9;OYSL?F6fwz@_Bk>AAi{V0g`Vl3>@j=G
z-Rvbt;MClR(oCql>(IJP)E>~G0Lv!qj^9lPw5+3$<`M;~pUP%S`*J%62fW;l%}9BF
zZGj?NwvdRwEZj>zv>l2-)@$Y_2zTd?C*75t9@q1?Vi1lN^$H&{>fIjvrT)ycK>a~v
z{(1wd(AZRD9lOjr^9daF8NbR&1+Tw$R;DV49LHxd83kQ_oF%NHi~qgl`8s?t-Qnwj
zb;3(ZcyCg?^Omm9Jkk+
zE*S$awdxHU21w7qFfMCiL8tdzKRJe@h`wYOnq-77>tY!rgTOtP?;<38qO*B3z#NIttnY
z@h~3ZnV#|nt7S$<(?1f2}B$o~EEfUD_G23tPx
z@s@s~n|iB>@8CGCv=mDdq!jd8#Pzj^w?&k-=z)?R3}l{-nz_Eq44YihyMv<(_0hR#
zx;FH3;eO_fzd#wUMsbaFCk+I5a7_b0TM6*kkc3^{_lYNUjN)8fUr&Oyb)o@&73fsu
z@g{7~X`okh3;8N6!kmyE<0fNRtxECKtH*##4kzj)z!cfW
z4yc}wk;OS|b0oo`-YvvN>Ff}kk~~D;MY|@3%%|oGC-R{EQSS+$&7jc}ivOY0>_dN#
zs^(u^{;B$Rm;XhAeMVPeTNiSb2qzEv)|HyCw%uT9xsb%lm5Dn&`ZCZR`NG?>X0dU%
z8GPB4jkx*CxIYb?!wLOtK`Maqupre53Pj)@@A2U=Ran=3c^SY@x-(bI*=5^kO669u
zk9a%GelYPQKyE_rY}G=3>R|0KH7U>sVU{KVyL#sjy!ZUnkTrgfbjt3>1rwosA?p_w
zmz4i0mQ~yir%&{`SlMQ2
zTT0^6LIHN3_#3z}oC@+Kj^>RE0)PBQyni%_?lGROw~kXzR4zEt{2l
zdcfxD1R+peP5LBo^stKC5C)ZsSNh5{`J}!aho#ol=!m;%mv^zKpRjoge^&mELQ0%e
zryh*p%ruEd91y?Uxz)_n`2OoIJThvzCfQUZ>_>0~%L}GiF9YBkCTL4!Hxkct2aiT4
z+BV(w0@sV!MSX>X!=xGd|0x%+q=eV16s5L;ip1#GZ?;ut=8=Iy(QzUtH0a|VmpmQK
zy82WP-@&vuE*GJzpIIzGb;p3cA)&Z`)&^U*wdm@2W49_LvSS@)tAk4u^Y($&Cw5hK
zTX?pRYtWUf=((AC%$B%mwZW?U6VEeEjn98&g^0sJH8H!P%^)T=#j{m3Z=N`0B^hqR
zCqU6b>k@M2i>b$_ONT4uC!4S`8FMz@jw{kX5kwM;PMdN8@ol8JB7t>U4|!idFEg(|fHY$JKL^E*%jzDNJv$tl(o&3ijKBS6UR}9(x^&
zG41;}{~(Bz?e_G;TDp>92tZjcRo=aG?sRyXg@0sw<9yv>}uJHO=p{sJ$1g#p4&X9^L236zJ?uv#|k%3QnDM2zDR{?(_xy)Oqgri$DH!dk=R@
z9bo&G#d3jDI=F=W#x1%C`rUKn(Eam&sM?G2N2>^=7dURFw>q!YFWe|y^AduH~`?3UP-O3}Q7GvTGD
zq0R8%O;J>?$7uHT7t3Szi>5hxnSEa<*ASe#@pWval%N`tp?V`rvyzM2OpvSaF3`=F
z_2(g*MK!^Olmm@6(`%Gh@6);nMQ`xz^DSM$o92D{z33}F(nrjSyWb~`D0`~hpnOn3
z^5vK@fiLeRhmj#=Pty1&uZv;}HFv5LtOoj}woI865UFz?2Nf++AaB3~c!)Rr(AIXR
z;+&*^QSZbK?~6-&@zScx6{wygN=VAoaL1Xnpo^&_XmiMLG)o{H{wKTR<8xH*VEy33
zjz)EfmuK?A8}hqedUwn;v~^Avg@gp`-UuQbIkey~`b+xSXnC}i+*hkQ5jVclu42J2
z8hc;OZ8?{N&mgb$A12a%yUMx2!gxM*Nws(Tc372fd70jl|Kht&=(2O=Q9gg68$^+`
zfBwd0s3QJz^>1V8U+ptcm9E0`+sXnq+CQ0g|IJobJp1*zKe+(^Wg~Bd-OS882{%Yw
zRzs|5x4yGEz7N#st~m!cI1IFf7>BF2{E0?SlW3bwgJzDUffs;5QCrgB(Ltd*+7E;*
z$~X5Or~I6mfR#~dh4k0w4>s~`@;^Fw`%f4mH*SZ67HBH4xLo(ZP|EGYNY4~mN0c~^5
zY`rmc(itPa=R5?FwIBzvO|$$b-x=h~ld?R)-L$q$>AdVi1Ag%pz|L=XP
z=@kUd64vb9Q9{DICl0ZrX@t3F)4{IBVXp#zb+@MFGq9_R|G7$ZdNC2yD(Jppoz%aD
z#@mzq7G@*Qe+Th%{78e5YXLSljuf)Eo%KqVNZwiue->1~dexVyq_yc%f`3LAX>;*g
zyv&2{(~_ZfIm6%*4mRF+_sh+kVHv8kP~T}U$IsW~?9TgGPYa|$5uUvM1Ft<47P#}E
zNJmMV!}{(>&KD_#!%RG?B{RFWOc|2J?|@RNU+gop7LX^98umWTrq9J9pjWb@VtEa;
ze>W{b*(SvcJdG2JERh5+pQNoBK84~^p44N%igjOl47zrxv41IM%T20bq-qaRwzeso
zJ-doQ(32)I(1&fU4EpF-#IS5EA}Czj(q3wW6Ay>DGru&
zN2&wdDa;qh9x>D1xHPU`XX3KjHhp1HFSo*YXn1OMj&aqmg2Prfa4S&6`wuc~BJ34r
zcz%Msgfgp(O;nRfq3ok9OoP>q$gv7BAmP
z1yxXUWzP@Rs*guz0(sGcYUckCe0geYJ)w=N+xP7bt)l9tUK7ZXqKrOL9aN$ipo
zJQevf_lN&@)0Ec@TBEzp7h_Ep8%k>Ux>Mgam$Lqk^KW`y#|u>Ulvir&)IM3a3_oK`
z8NBAdt0@sOy7L{11IIoxaA*Hp2nuxBDRUK+G^
zjmMvjiWg9aV!iN5y3>CUI`i#!+MWve8b_LqQQQV9OV2C`!(dT+5RDvzBNCA?;J{P2
z|CVIo&U>szLhlWdOu4X;%7&31O$pfZ_rMLA3vsg;T{HKFV;qsP!3o2NL8Ge}K=uXz
zfHIY`7JU`OJ2ed=O}W8HW8C^UxK6G8eaCADhMg+c|K249A3Kt|P>1sdrWzDO{yUI+
z=ntK;D1nq(J5)@u8+4@|ntdL)#^4kQxn5pZXdL(TR9F<+0V{a<%X`+Ehs
z3ot`g1rNk3N~hfUEp{@Y?|}Dol)6
SEi9o)Gpn-7n92Bbt|e8HtY8TAD8Rhkng
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
literal 0
HcmV?d00001
diff --git a/docs/images/model.png b/docs/images/model.png
new file mode 100644
index 0000000000000000000000000000000000000000..a8f06a7a3d5d7c7e6d7dc739e976b6712e3b03eb
GIT binary patch
literal 20912
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