Showing preview only (1,482K chars total). Download the full file or copy to clipboard to get everything.
Repository: JosephinCrafter/auto-yescoin
Branch: main
Commit: c652438a81fe
Files: 140
Total size: 1.4 MB
Directory structure:
gitextract_yz3aohkg/
├── .firebaserc
├── .github/
│ └── workflows/
│ ├── firebase-hosting-pull-request.yml
│ └── flutter_dep_get.yml
├── .hintrc
├── .metadata
├── README.md
├── analysis_options.yaml
├── assets/
│ ├── animations/
│ │ ├── done.lottie
│ │ └── loading.json
│ ├── content.md
│ ├── fonts/
│ │ └── butler/
│ │ ├── Butler_Black.otf
│ │ ├── Butler_Bold.otf
│ │ ├── Butler_Light.otf
│ │ ├── Butler_Regular.otf
│ │ ├── Butler_Ultra_Light.otf
│ │ ├── butler_extra_bold.otf
│ │ └── butler_medium.otf
│ ├── qui_sommes_nous.md
│ └── sample.md
├── cors.json
├── dap.ps1
├── devtools_options.yaml
├── firebase.json
├── firestore.indexes.json
├── firestore.rules
├── functions/
│ ├── main.py
│ └── requirements.txt
├── l10n.yaml
├── lib/
│ ├── ahl_barrel.dart
│ ├── firebase_options.dart
│ ├── main.dart
│ └── src/
│ ├── app.dart
│ ├── article_view/
│ │ ├── bloc/
│ │ │ └── bloc.dart
│ │ ├── data/
│ │ │ └── data.dart
│ │ ├── event/
│ │ │ └── event.dart
│ │ ├── state/
│ │ │ └── state.dart
│ │ └── view/
│ │ ├── article_content_view.dart
│ │ ├── article_view.dart
│ │ └── highlight_article_tile.dart
│ ├── assets/
│ │ └── assets.dart
│ ├── constants/
│ │ └── constants.dart
│ ├── firebase_constants.dart
│ ├── localization/
│ │ ├── app_en.arb
│ │ ├── app_fr.arb
│ │ └── locale_utils.dart
│ ├── newsletter/
│ │ ├── bloc/
│ │ │ └── bloc.dart
│ │ ├── event/
│ │ │ └── event.dart
│ │ ├── newsletter.dart
│ │ ├── newsletter_repository.dart
│ │ ├── state/
│ │ │ └── state.dart
│ │ └── view/
│ │ └── news_letter_view.dart
│ ├── pages/
│ │ ├── articles/
│ │ │ └── articles_page.dart
│ │ ├── homepage/
│ │ │ ├── donation/
│ │ │ │ └── donation_page.dart
│ │ │ ├── hero_header/
│ │ │ │ └── hero_header.dart
│ │ │ ├── homepage.dart
│ │ │ └── welcoming/
│ │ │ └── welcoming.dart
│ │ ├── novena_page/
│ │ │ ├── novena_article_extension.dart
│ │ │ └── novena_page.dart
│ │ ├── prayers/
│ │ │ └── prayers_page.dart
│ │ ├── projects/
│ │ │ ├── project_page_view.dart
│ │ │ └── projects_page.dart
│ │ ├── rosary/
│ │ │ └── rosary_page.dart
│ │ ├── saints/
│ │ │ └── saints.dart
│ │ └── who_we_are/
│ │ └── who_we_are.dart
│ ├── partners/
│ │ └── view.dart
│ ├── prayers_intention/
│ │ ├── bloc.dart
│ │ ├── event.dart
│ │ ├── model.dart
│ │ ├── prayer_request.dart
│ │ ├── repository.dart
│ │ ├── state.dart
│ │ └── view.dart
│ ├── prayers_space/
│ │ └── view.dart
│ ├── project_space/
│ │ ├── bloc.dart
│ │ ├── model.dart
│ │ └── view.dart
│ ├── rosary/
│ │ ├── rosary.dart
│ │ └── rosary_prompt.dart
│ ├── sample_feature/
│ │ ├── sample_item.dart
│ │ ├── sample_item_details_view.dart
│ │ └── sample_item_list_view.dart
│ ├── settings/
│ │ ├── settings_controller.dart
│ │ ├── settings_service.dart
│ │ └── settings_view.dart
│ ├── theme/
│ │ └── theme.dart
│ ├── utils/
│ │ ├── breakpoint_resolver.dart
│ │ ├── date_time_utils.dart
│ │ ├── firebase_utils.dart
│ │ ├── seo.dart
│ │ └── storage_utils.dart
│ ├── validation/
│ │ └── email_validation.dart
│ ├── who_we_are/
│ │ └── view.dart
│ └── widgets/
│ ├── actions.dart
│ ├── app_bar.dart
│ ├── audio_player.dart
│ ├── drawer.dart
│ ├── footer.dart
│ ├── forms_prompt.dart
│ ├── loading_page.dart
│ ├── logo.dart
│ ├── my_flutter_app_icons.dart
│ ├── prayers_request.dart
│ ├── promotion_bar.dart
│ ├── prompt_card.dart
│ ├── section_title.dart
│ ├── space_view.dart
│ └── widgets.dart
├── pubspec.yaml
├── secrets.md
├── storage.rules
├── test/
│ ├── articles/
│ │ ├── article_view_test.dart
│ │ ├── articles_bloc_test.dart
│ │ ├── articles_repository_test.dart
│ │ ├── bare_test.dart
│ │ └── collection_utils_test.dart
│ ├── breakpoint_resolver_test.dart
│ ├── breakpoint_utils/
│ │ └── separator_size_test.dart
│ ├── data_storage/
│ │ └── firestore_test.dart
│ ├── newsletter/
│ │ ├── newsletterbloc_test.dart
│ │ └── newsletterbloc_test.mocks.dart
│ ├── prayer_request/
│ │ ├── bloc_test.dart
│ │ └── repo_test.dart
│ ├── project_bloc/
│ │ └── project_bloc_test.dart
│ ├── project_page_view/
│ │ └── build_relations_test.dart
│ ├── unit_test.dart
│ └── widget_test.dart
├── untranslated_message.txt
└── web/
├── flutter_bootstrap.js
├── google-site-verification=zW71m6kfnZRv8zRIyqnpIJgMvlVlE0tK1aLMdqrTojg.txt
├── google91970a171ec523e2.html
├── index.html
├── js/
│ └── lottie.js
├── loader.css
├── loading_rosary.json
├── lottie.js
├── manifest.json
├── package.json
├── site.webmanifest
├── sitemap.xml
└── style.css
================================================
FILE CONTENTS
================================================
================================================
FILE: .firebaserc
================================================
{
"projects": {
"default": "aujourdhuilavenir"
}
}
================================================
FILE: .github/workflows/firebase-hosting-pull-request.yml
================================================
# This file was auto-generated by the Firebase CLI
# https://github.com/firebase/firebase-tools
name: Deploy to Firebase Hosting on PR
'on': pull_request
permissions:
checks: write
contents: read
pull-requests: write
jobs:
build_and_preview:
if: '${{ github.event.pull_request.head.repo.full_name == github.repository }}'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: subosito/flutter-action@v2
with:
channel: 'stable'
- run: flutter build web --release
- uses: FirebaseExtended/action-hosting-deploy@v0
with:
repoToken: '${{ secrets.GITHUB_TOKEN }}'
firebaseServiceAccount: '${{ secrets.FIREBASE_SERVICE_ACCOUNT_AUJOURDHUILAVENIR }}'
projectId: aujourdhuilavenir
================================================
FILE: .github/workflows/flutter_dep_get.yml
================================================
# An action to update flutter dep
name: Deploy on merge with cache clearing
'on':
push:
branches:
- main
jobs:
build_and_deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: subosito/flutter-action@v2
with:
channel: 'stable'
- run: flutter clean
- run: flutter pub upgrade
- run: flutter build web --release
- uses: FirebaseExtended/action-hosting-deploy@v0
with:
repoToken: '${{ secrets.GITHUB_TOKEN }}'
firebaseServiceAccount: '${{ secrets.FIREBASE_SERVICE_ACCOUNT_AUJOURDHUILAVENIR }}'
channelId: live
projectId: aujourdhuilavenir
================================================
FILE: .hintrc
================================================
{
"extends": [
"development"
],
"hints": {
"meta-viewport": "off"
}
}
================================================
FILE: .metadata
================================================
# 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: "a14f74ff3a1cbd521163c5f03d68113d50af93d3"
channel: "stable"
project_type: app
# Tracks metadata for the flutter migrate command
migration:
platforms:
- platform: root
create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
- platform: web
create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
# 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'
================================================
FILE: README.md
================================================
Visit [Aujourd'hui l'avenir](https://aujourdhuilavenir.org) to see how the website looks like.
================================================
FILE: analysis_options.yaml
================================================
# This file configures the analyzer, which statically analyzes Dart code to
# check for errors, warnings, and lints.
#
# The issues identified by the analyzer are surfaced in the UI of Dart-enabled
# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
# invoked from the command line by running `flutter analyze`.
# The following line activates a set of recommended lints for Flutter apps,
# packages, and plugins designed to encourage good coding practices.
include: package:flutter_lints/flutter.yaml
linter:
# The lint rules applied to this project can be customized in the
# section below to disable rules from the `package:flutter_lints/flutter.yaml`
# included above or to enable additional rules. A list of all available lints
# and their documentation is published at https://dart.dev/lints.
#
# Instead of disabling a lint rule for the entire project in the
# section below, it can also be suppressed for a single line of code
# or a specific dart file by using the `// ignore: name_of_lint` and
# `// ignore_for_file: name_of_lint` syntax on the line or in the file
# producing the lint.
rules:
# avoid_print: false # Uncomment to disable the `avoid_print` rule
# prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
# Additional information about this file can be found at
# https://dart.dev/guides/language/analysis-options
================================================
FILE: assets/animations/loading.json
================================================
{"v":"4.8.0","meta":{"g":"LottieFiles AE 3.5.7","a":"","k":"","d":"","tc":""},"fr":120,"ip":0,"op":1200,"w":3000,"h":3000,"nm":"loading composition","ddd":0,"assets":[{"id":"image_0","w":55,"h":45,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADcAAAAtCAYAAAAKlvO7AAAACXBIWXMAAAABAAAAAQBPJcTWAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAADQUlEQVRoge2aT1baQBzHvzMRulGRE5QbFE9QbmB6AmEjj50uKfoaXxvd4ooHG+EGeILGG+AN6AkwqStD5teFgCEJIX8mKL5+NjBMmPl9mMn8C8B/thMW9cKJdnug5GyVQZQJrPxaAI0IfOTYuWFRqz1mE2Yy1spNrjslxeEaGI7XlkYYOIrQis3GWEZwT3qvDAC7rZNRku+Hypl6V2PAj/iF0s3U/qTFbUnrqqtCQAWDCqDgyf4DgsFI9PcuGka0OAJ46YLPQwBf4wTnDYaDqVF+deuqq4LQBvA5Ytn3TAhtnaRPbqLdHig7zwYYvkSsKAwTYKf7rZN+UObsPu4DdJSkcAIuC626tirfJ2fpvWHSylbDal5BaT8iYeBM86dBtwB3J6yrripfDADo1tJ71XnqSe+VldzzSErvYDh+af2gLBeW3h0jer+PDQc7BAABMuAfMFIR1EUXcn9/dirE+W+ZFQZgzl6lis3hYIfuAey1W3KmZlGhhwIyEgMAAWju9ELOverYXuhoct0pzVM85MqtRBFKZf7+w8kxiEUP/HBy7tvrw8m5cQ0oMN4wDomwxUplIccYEm0r3hsE8s9z+9/rQ7xOslsLF8JYvF/KIQw3HYxkTPc2aEnOUYS26WhkQkDbnV6SKzYbYxAGmw1JGqbgou/+wDcVzFpv6+49AtresxufXLHZGBMtL0C3AFPY+bb3w5UHRJbeNZDuDGVzMHybjfZLrFyhOHZexVZ0T3YXJAaEyBW12iMTYhN7vDSYjp2rrsoMXVvuXTQMIpxJD0kSTAg17Gx07cK5cF5vv8/pgdVin1uuwvrVlXNaJQPCYP+8Xl13WeQtjzPNV0B4SBWUDCKKATFaDpg9FBF8hAwPeUKJIQbE3KwWm40xB6vgLaaImGJAgp34butktGlBAi7jigExu6WbJ71XzuLk2EPog5R1JJYDMheM/AhsFakOiLLrouzOsfPlNGJAypabI7EFTSJohfO6b4WfBClygARBwgNnrJq2tdxIkwMSC5oEtMOekCZFqhwQW/De4aIq698PXqTLAZEEUw3xUcnkON01it578xjoxrHzpazFXurKmMl1p7QzRQkApjsYZ9UFg/gH1DJFFF6qRFMAAAAASUVORK5CYII=","e":1},{"id":"image_1","w":61,"h":50,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAD0AAAAyCAYAAADvNNM8AAAACXBIWXMAAAABAAAAAQBPJcTWAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAADfUlEQVRoge2a23XaQBCG/1nxaIRdQdxBSAWhgpztwOIY/EwHoQR4tZMD7mDjBiJ3gCqIqQDL8SPayQOIALqg2wrfvicBw878Z3ZXqxkBH7wPqMifnq9lW1tos8b5ZiCBh0DAPeuqh6qCM0Vm0YuJPG8EGDDYAdBKMZ0z01Q3MDrrqscywS0m8lxoSNJagujr7q/sAWIGQNk9pfKMe1D0YiJPxRIDIv6eK2LAZ6ZREfGLiTy3AgwBvsjqi0DTpYVRlpmWKvr5Wra1YAXgU0bnccyFJnlypWZZjJ9+SgfMI6TPpiR8Zhq1+mqYZpQouqTzGE/UtS/VNM3k6Yec5shuCuwFlpBJWY8V/fdGdpj4d3nn+85o3Oypwf73i4k8tZZaRddtKXyhqRM3wyKiV+uJZ6gqwxHo1u4pZ8vfqRVoF6DPBpz5gUXt/YyLfStrqacwJhgA+MK/kUPAuGAAaK317LCT6fU6nhgKYM8zdcHoVLOGD/va3k92M621YzyAEOZJLYJXvobbHzeZXq/lP7UEcQSEpi/hprbJtBWgfbyQzBMQZHi9Ec38tkUTdCe8juze74EP0e8FsXVV6jHwpUMkNsfR7d3bPUo0NcGEqOj1Pcw/SkQ1EIj/Sd1b05SrAvF6YG/7oWNHNDGmdYdTCyRG2x93RDf7ygXzfb0RGccPBHZmcOSWRRDD2sKpAWaK1Ogiopt95QL0q7aozOLrBkb7X8YeTgILDt7ATh6XZSBB9MqQHONRmSU2y0DKMdTuKUWgsbmYDEM0SKq3Hyz2P918cyuuUpqH+d7u33WSfj74wBE0hFy1UF4NftAQTprBQdFnXfUotHDwWja21bR+SDPJ9Gh5cqVmQlMHL1443R7qogA5W7WmOh/VwJ7du8tU8spVRGj2lQuibrGgjDIPLNHJapy7cmJfqukLE+4LTTJPO7jQmwhAzd2QZBKbdGkUFg0cXXghwUBJ0cBmc1Mw2vSLUFgwUEE1tNlXbr23M/bKCAYqyHTI+lUNF2bbvF5giU7ZF3gqEw2EwvXUTL95t5lfaqQqBtnGQKPdB9Egy0krK5WLBqoUzp7QwimzfuMwIjqkzNtCBBovLQzLrt/4sQ1TQPicmJxVrc4Mxht4dk85WSswBBoHFrVNCl75qYn00xt7xGJgWmxIbaKB8PQGB9Dt9SY3Z6JR61LFFvA+qJB/5nd5iq2mrRcAAAAASUVORK5CYII=","e":1},{"id":"image_2","w":66,"h":54,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEIAAAA2CAYAAABz508/AAAACXBIWXMAAAABAAAAAQBPJcTWAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAD6klEQVRoge2bTX4aNxjGn1dTiBc22CcI2UC9CjcoNyg9QccbqFchJyg+QcmK4g2TG9Q3wCcorIi9cXwCPLiL/GyP3iw6QwYYeb5HTuz/ahBCevxYHyPpFfACAIB0C0jCcH7bEiSbIOyvEhk3ksX0+HBvkqTMxEYEigEgpZjs7DxMj94c3CQtW1WfIbjHwK9heQk4cyQN4pgSy4jTy/+azLIHoA2gGiaGAavbqPwTp45NhvPblhA8APA29o8Z55KpH8WQSEYM54uaIYxBlP9GANdSkpmkyY4u7D5Afyaocw0m+vBHfa/3WJ5QI04vlyYzBghpAWEQcFYqO2aULjO+Wuzf3xlWQuNVzMplp6Wq/1EjRhdLC8DvGYq5JhLtTn13qsowvlrs390ZEyTpCuEozVAakYMJHjaRaAWZkbMJHoFmiKCcOZoAAFVmORnOb1v+xIJMAIC393eGtZm41SJGn+weiP7KWQzgaxnubDRBynEoJr/5Z7Q1I4bzRU0IY1qgIJsIvSwG4wRcdxuVmvdhrWsIYfQLFlRlxrjgOj1ejy6Wbe/Dyojx1WIf+Y0LTxICTO95ZcT9vdEOzP0Dw0DLe14Zwfwt8RlRdXuCb4xg1HSp0cmXLz81AcV7xHPkxQiXZ2/Ezs7DFHgxwvbWHN+MIJ7oUqMLAibes69FkHJp/MNCWK01Vkak3VL7HimVnG0jXD4WrEUnH/17EmtGSElW4XI0sfm3bu9HXCw/A3hdkB49MM67P1da/qSt6ZMI/aL06IIErK20oIyjT8sJCL/krkgPs26j0txMDHyhkkz93OVoQkoKPN8INOL4cG/CRB/ylaQBxrnqoEn5iv2q9NAHcJ2TJC1IdkzVd0ojjt4c3EhJyh9+f/DJ8eHBZ9W3oUd+f1/eDoj5XaaaiidwgPQTuvp0D09nmUnSAJEww/JEWoZL6bQB2GkFaYH5/WNnrR6R4yPc06h/06kqFgLOOo1KpN35yBsznfrulAhHyWUVzqxUVs8Sm8TaoerUKxbAJ3EVacAmEpFiMTwSxVDlfFqeFmXYwWMk2rPsNiomnujeBRF6cU0AUoYXPrWWQYSj/7tvgt+mrfypmJHGBCCD7fxuo2KC+X3actKQ1gQgw8hbN/punFV5EbGlpHbSaFs/mYYgFxwClGh2UJHpSVenvjstl50a8l+bzKR0mlmZAOQYlJ7XqjVO4GrMcvPDjVGykFlX4ZNuo9rPpqx1cr+mkFE4cWaDoorC7mskbh2M8/Irp511V9ik0IsrbnTtAJFfwPLrCptoucHj3sGwoD5RmxEJM8tZIQytV5lOL5cmGG03zK8KwAZ4UFQreCGAr7eWeJMXlVNmAAAAAElFTkSuQmCC","e":1},{"id":"image_3","w":72,"h":59,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAAA7CAYAAADYW8woAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAD0ElEQVR4nO2b3VXjMBCF7ygFLB2soQFogCBVsHSAqWChgg0dmAo2dBAqsEgaSBoApwNSwGr2IQ5JHDv+k2Un5HvhHFmWhxvNWBqPgBMn6kA2Bgk9eQXgbKNpqiL9aWPstqkkUOjJKwjjg0kCfJnei+cAaTCPVDQZ1bAxzxYJABBm+dcIDQAq0trG+KUECr1rH0Q+gJtyj+E5GAMVTYbl7suyQ0qQeQAgAfzI7kkzEI9gxEhFelrlWYUEig0aoLQwO7yBha8iHVW5uZ4dNAOboOyPlCtQeNEPwPhd3qBMFmD2y7qdPTtoBia/6IzKFCj05BmIdXaMqQnzfZFfszE7CE/qfTzI7+bSqCQ5IoWevAIZjb1xphYv6mPs7+sgUlvJjBoXBwCI/obetZ92yYE4AHAXnveH+zrsCBRe9AeoH4yLQxTE66i1DW7EWXEXXvSDrItbLhZ60gOZKdwYtmnGDExSRfpz6d7/pgD9dGoCC5W2dtqeQcI8wLk4AMCXIBOsY59jcQCAOHUWbc+g8/4nWhHoi0Wrz095aXzNoHjJ3qY4aP35RLfJprWLrfYy35tfoSc3N90bAjE819Z0lK036maQ9tza0VESnpS+UDzxxUmgHDYFOooMoG3WAhEqJZSOnbVAhk8CAYDhLU/acLHeSSAASR0SW43rqJV9UHdYqI9xxkIRAIga+/pwIOhkw7ZARgwdGdJNmIfJpp2Ua3h+M3WSTewcPFcfEy/ZurtQZJOZXTtqGIO05vSk/bcL1umzB8jaamSoebTs+X+zv4t9n1n0pj7GMuti9maVe751U7oIi8G+y5kCxRn+V8vmdAvCc14VyP50B4sHLBPpRwjPYfbPHiBHIBXpCMy5gxwk3POLFHnlJsxUNAlwbK5WwLVWFMsosvBxNK5GM/U+fijau5BAKtKfYLHzzegAWSzLBotTOCetIq3B/FjapC7BQpYtLi2VtI/j0Uspo7oC832VOsVqVa6HtuMvWM2WRrXPPkwSoFmle11DeK5TXVu5kNxZmV49ckvs8qhVad9xkWqLA1g4itBJkWrEnCS2zmp0RySL4gCWBAI6IdICLG5tndFYYa14YbnaJolW1kk0ixeB2vrItgcE4lJixp8mxk7hNT7/0UjxRSMCAV8ngwI0WXfI/Biv7hujMYGAVUE4D+3HJZ6De7dVjziVodECKhXpaRyXbOaTXsC9KxfiAA3PoE0suFylY1R1cSYQUMvlGg3E+3Aq0Iribzmex7lj3bhRGbQiEFBgNhGeYETQ9unp1gRaEccmiXWddgQWg6rnWk845j8zXJssMavYjQAAAABJRU5ErkJggg==","e":1},{"id":"image_4","w":77,"h":62,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAE0AAAA+CAYAAABuv5bfAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAEfklEQVR4nO2cTXraSBCGvy556cH2CcINopwg3CAwzuz80zlByA3wDewTRLZnFzOyTzDyCQI3wCcgIixR1SwQDLYloX8JzLtD3VLX86m6JHVVA+xIjEp7oranpsdsKkgTokwoHK5cdQSREYsa7BmeY3WOfuVibU1IJJq2pyYLdyFoAzhIcOpQgEuDvPttEDCWaPrH7xaT9AB8zDieK0D39rhhZbxOpUSKpu3xIXuGBYVPOY/7SOS18/Y6bU9NzOT/MLE3GxTh2aGiaXtqMvM9gHd5D+rzRERtq7M/SHuBk7tJmwhtCEwA7yO6DqGUwyzO358b92nHWxAomi+Yg2RxKw0ukddM6g2n/YlWQA/pbqgLpSxSs0urczRKcf5r0bQ9bjIbAxQv2IIhkdeKI5xvm4XssXWOUlekZr2kN41eHmA27lGeYADwnsW4XNdJ//jd8m9mPoIBgMhXZmOg7amZ5LRnop323S6iY0MxCM5P+xMd1nzan2gm+RfF3Mx3zPwzavyXLKentseHzMaoIMPi4BJ55ss4c3I3aZOCXYYBAnyJ8zq09DSPjaQvrHlz4MerJdqemqRgBXfPHwV8jzNVl6IpoFusSbH4eNZ3e8DC89lCyTeSmR1tjw+j+ihgOTXH5Zi1HiL6wCIaIl8rMUDh+ubPhg5rnnvabC/R06NomNmpTDAAEJxre9wMayYAYOJWWfbEpMrYCgBgMXphba/e03b4zFdyAtmJFs7Byd0kULidaBGQksBYvxMtEtUKOkoAIFCjMk3ZdAgADN6JlgQCAOuvP5yK7dgoVmPaY2VWbBhL0QSSeRl46xAELk4uRTPIcEozZlNQEpi/WIrmJzieSjNoAyAmJ/D46g+BrF12fkO4YQ/IZ6IZxLu4tkAhVItnolmdoxEED8VbVH/IU1Zo26sDonZTFHiMend9JZrfeVigQbWHWPUi24MOCvCWvS3Sy4AQ0fw01pv8QiDy9No+oQ1rXHQ7kYs49R2RpVZnd5P7Asqs6srw5rgRK8EUuQhJhtcF4OZiUs0hIh27b1Tj3FW3/ytBIN+S1MnFKh89608GqKIwpgwEDzefG6GZpyBi5QiSuO6GMSRj/dPyJbFEszr7A4F8S2xSvXHT1v0mKonfoqepS0SttPW+iVJ4vitv+ppbJsGAFDtW/CLmn2kHrJjMggEpksXz+IYvWQatiFwEA1Jm2G+PGxaUuso6eInkJhiQYUMZAJz9M7EgOM/DkAKJXXIfl0y1HKS8Luq89iZ4yFswIKOnAcvSUwe1+2KQi5vjg14RV84sGlCLcvpVXBboPPZAhZFLqZXVOfpFRC1UvyLySOSZRQoG5ORpC0rciBZAcdPxJbmKBlQiXOYtkEnJvRLS6uwPSpuqSl3NtwaVJxhQgKctKNjjnoiVrqqurrCa2+I8Ti6IPLPKQsTCPG1Bjh43JCJd9lQMonDRgMzCuQLp3R4f1CZXUUpJ/Hyqek0kTUArXBN5Zp0EA0rytFVibdpXuCZFl3WYikGULtqC+ZT1nmWBtvVvdnYA+A/3ztJz3tw/3gAAAABJRU5ErkJggg==","e":1},{"id":"image_5","w":74,"h":63,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEoAAAA/CAYAAABHP14DAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAElklEQVR4nO2cT3biRhDGv2oZMgsH4xOEOcGQEww5wXCDwMa82THLDM6L8mzGy+AVDzbgG9g3kE8wcIIxJ8Bgb2LoriwQRAxIIKE/zZjfCvSk7nof1erq7iqAA1tBSRsQNk8XzQIbIsuMPAAQ6IGUfJjKN71Ts/wYtN29F2podrLi6KVEhCKA9543M/pEbE0FN07/+Pjgp5+9FWpodrIi9VIloArgxH8LdCeFrG4r2F4KNf7SKoLRRSCBliHw9XTyk7lpWAYW6rnezktwkYACgDy+N9p2cyayMp8rt0H7cTI0O1nj6KUBwu9htLeA0RdEpePaWc/tFl9COdy9BOAXH48OmNFQ03Q36AvVFskC4V2Q57dgJEAFN7G2Fmp02aoSwcRu7j4AyMzUzrp+Hnqut/MKbO3Y9za4irVRqOFVM2dIcRvyL3kvQFUvV58To0hz1oolvJ54rrfzhhK9CNz9vQJ/HV22ql43jevtUswiAcCJYu4OzU7WedFVqPGXVlGBvyJCI4nwz7jesoZXzdxK//V2CeBOlP27G4Z3IvVSXb60hiTcHYTSfHYc1VsmAX/F1LcrUqi38zhrRaih2ckaqZce/M1qIUF3YH4MffoPCAN/n9QqJrBm6B2l/jWRiEgAwB90EQkA7DBo/vl/hlfNnKHEt9gt0hgB+vW4dtZb8ihDCjMhe7RFMhcAx9AbXjVzOrm9NhCygEMoIUUxOWv0hUB5wCGUvZ9zYAVe9ijMdgAOuOAUKv4IeA9gwAJsoZ4umoUkjdkHPBfFBwChlAUchNrIVL7pAY7IfFxvcXLmaAqjnzmvLIcHAEYJmaMtDHTnnx1CkRW/KXqjDLU4FFkIxcxWItboCqPvPPNbCOVU7wAAoobz60IoW737uO3RlJGcpJYcZyk8IKXMWM3RFAKvnD8uCfXznx8tHLwKU8GN76+tBJyv3qsYN+sSN1aEmnkV3cVhk45IY72jrF3CSCGreI0BqIs3AS5CzW4mz1PcH5CRmzcBHoviWSLF6xmCDHhm4XnuHshJqgRgELJNOjJQk/TKTOfEU6hTs/woQD/8XjopVdqUt7VxP2qW/kLl8MzSDbqz40dPttq4y9TOumDc7GyTfgzs18tGfKUmjuvtW4A/BDJJQ0ip37bxJsDnVrCcpEpg9ANZpRkEvt5WpNn9Pokh6TQO7jO1SsHPA74PF07N8qOcpgt77FkjOUn7nskDncLssVgjASoESeEOfFy1n2Jtl4m8jp3O9RZi7cFShxmf/Oa3OwmtFmZ82epqm1/FuMmcV0q7NBFq0ZAj5VkfQhAJiKC6KoHUa3dCEgmIIPfguHbWk5N0DknvvYcoEhBxvV5iifUhiwTEUNhoD8VbxJW7HoFIQAxpP/ZQzBP4Ouq+ACpHIRIQc6ns00WzwCQa0awTqbxLnLSx9aga9sJ+dwUsml5tzqtyMywSK76elZMYjZ32txh9aaii39L8ICRepR54ODJu5DRd3eVPH/yQuFBz7KjexBazIzM+nZxXPE9NwkYboeZsKPKO5X20Du2EAubFlZMimAsg5AB6ZGZrl78DOBAT/wHSltPK6CHTmQAAAABJRU5ErkJggg==","e":1},{"id":"image_6","w":83,"h":68,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFMAAABECAYAAAD9YQkjAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAE5klEQVR4nO2cTVrjRhCGv2pjZ8OAOQHcAN9gdIOQE0RsIKzGs5w4eaJ5wDPLwIqBDeYGvkHsE8TcAE7gH1hkbEuVhWUhy5Jp/bUsj96dJbdUz9dVLXWrqoGCgnWE4l6g//X6oGSVNIJVY1DNPlwDsAvgCcAjQAMG94Rldd79edaJe891JZKYfeOuKrbGOgE6CIchmw/BaBNbrbSF7Rt31a3SfzVLCI0YByAczM8RuGeBBkl2cCgx+8Zddav83WCQjpnnxaVLlmUkLeroy80RmHSAf5ZsMgSjDYH2zu+n7aj3lRZzeHFTJ4KBZET0GMFX7xq/1eNeZ9S81QE2AOzHuMwTQMZO46QVtuGbYvaNu2qpPGmF6OVoMB7MaUXbM44HYZu+NG9rFvgSwPsELeoKUH27cdKTbbBSzP7X64OSKdoRxsVoRBDU9sZLpBAxM5Pwebdxasj8N1DMmUeOe4gXMuEJIejo4qYFwq8KbLo3p5X6Wzb5itk37qqlrXFHmUcu091pnGpBJ+2ObiPZsF6NRCcLv4Nb5e9GhkICwPvn5rdLvxNOR6sUEgAIh/Z9A1kS8/n8WmPQh9SMkoRBH0Zfbo68xzONGMJhUCcDPmKyEEaqBoWB0Xpp3s5nVfMxMsuICexkwDNmPp9fayzEP2rMksQeq0R5XCfgr6zNsXkyJ5Wad/xc8EwmoSs1SQbCYak8bq+RkACwL8rjpUnGYpireM2IhtqHjQQE6N5jjpjP59eaSmM2gH3v2OmIaQmhqbYm91jwF1OAq+qtyTkEzf3TEdO1sFsgz8JU23cGVCCP+z24EDMmbJnO8FiImSCvYjIeszNjM3h9AFEhZhRIlJwppSMmEaSX5wtecX/WcMQ0x5VOFsbkGsaD+6cj5p5xPPCeLHiThWheeJoTcUepKXlHoL3408VUcOAqcsESQ2/CwoKYe5/OHgF0VVqUWxhLmR9LL+1kWYYSY3KOWVrWaUlMO++n8M5VMO7tKF7AdzpZeOdq/LwSCBCz8M5gCHzl55XAioUOAYqdlbaBDKeTn4ygk4FibjdOemDcp2JSTmGGETo9Zo45rdQBDBO3Kp90d/84XfkevlLMWS8U4Q7IDXtvLg7bGbQ/9MOIgc8ySa9SK+2msHT8qOHOeJBNdpUSc+/T2SMzpC64YQzNkuWbpOVHqGqLUfO2nXpu+zpB+CVM9UWoD2rmpKxjVii18RD4KmwZS+iiKruy4d+w7XLGyjTwIEJ/6t1unPSY8TFsu9zAeDAnFelx0k3k2klllQ5qGQqQFqb2x02sQtTRxU0v67ToBIklJBAzo8OcVrQN+QgXW0ggpph7xvFAEOnI/Qt9uLK+wKskYYr9hO8gpZK7dKHjKEWnvldK4iJALgVNJLTdJCYmkCtBExcSSDilcLtx0hMgDes9hj6lISSQsGfOWVsPjVHTLkMqya5r6aGzMufUhARS8sw5L83bmsWcfb0j4+NbnxySIFUxgcxr14dkWUeqtv9JXcw5Gczlu+akcpRmWHtRJibg7EDzd9r3URXWXpSKCThl2G2k8aRnPAgiPY3XHhmUiwmksytNmF1e0iITMec8N79dxt7CImNvdJOpmECssB8yw8hibAwiczGBCLt6Se4zpJq1EHPObEM8tBDspalsxJcUayUm4NpOkuD5qEWtpNYdC3LA/zxI80YyvHGBAAAAAElFTkSuQmCC","e":1},{"id":"image_7","w":87,"h":74,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAABKCAYAAADOgMgpAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAE7klEQVR4nO2cTW7aWhTH/8d2Z2kIK0h2UHbw3B2A1ETqKCCVSB09uoLyVvB4o0pxpJBRpThSyApKdkB3ACsAQ2e1OW+AqWLA39f2hfg3SmKce/Xj+tyvcw2UlJSUeCBR/2hhmPoSqClEZ8xc8xRCNFoyj1Xm4dHVxUhUmbKTSu785qEO5jqAOoBKxNssAAPHtrvVzx/HacqXnURy59f3TRB1AZymLP8uT8kLw9TXP9uaNqq2GrMsy4sld2GYOgN9pJfqgYF/Ku3zrsj/+ev6vsaK0nRD1F8BH50AGDEwFB22Istd3Dz0mPlvUQXv4NnRtHra1iTgqZow0FtqWj9tXULlTm8fT9Tfv4cgepemoIhMFOZ6ktbjxv8exD1Vliu5l1RyoNycxa6xFGY9quDp7eOJats9AJcZ1WdCQPNt+3wY90Yl6GIBYgGgsiQaTr99Pwv74J8vPzuxAHDKwA/LMLtxb/SVu7h56BUgdk1FVdXB9PbxxO8DeT9VBHydG2Y/zj075S4MU8+48wqH6J37uG9RULgCgMs4gnfKZaArqjYpuZxf3zc3/6ja9qDAp+oyaojY6tDcsewP4VVKjuXYdm090bAMs0vA14LrBALeh3VyWy2XgWZWFUpIRdW0HrD64mUQCwC8GvYFstVy54Y5Q/R1gvwgaggex6aHuXV8ddH3u+xpue7cWz6xAMDch0xiAbgzQV88cpeAnmVdUiLjl3766/q+5nfRI1ch8h1XluyGFaXpd80jd3ORuyQcXi51v2uB09+SCASMt0u5AvCLu6VcAbBPX7Upd5x9VV4P3g6tlCsUZeOXYUH12GuIeedOhUeurWmvJqdAJH67Jh651VZjBuaf+VTpQAjwtb0qRtTPtDIHBinK0O/altylbQ8yrc2BwQH91M7d37lhDhGcSFGyYnLcPj/zu7h7EkEUuhBcArjZR77slHv86cMAqzSfEn+spbtD4ofv9Jfk2+6RCgZCM3ECM27K2OtLYKxdE7hwQ/JssUtF1Kc6UK67dXwnoD6HxF3UvLHQJUfHtrtYZYOXAJajaZ2oHw6VW/38ccxAOTQDAKJmnHTSyMnPc8McQ7at7Xx5Om6f1+PcEHkn4pUPzSaOpjXj3hRZ7mvu3BTmRMcJYu2hucH8VXVuDHxJegglltxqqzEDUTNJQXvKU6V9nrgzj7376647PCUtcG9g/pkkzr4k0da6W+ghL+xYjuOkPraVSG611Zgpq2Oph4ilMOsiTnUmTgo5uroYMfAlbQWkg7kj6hRl6lPr7gGMLI8q5UdIMnNcUqczOZrWOYgdY8FiAUHvW3BPMY4hZ4JyOBmIBQQl4rkdnI59nGBkJBYQ+KYQYJVKuSQaYl9acIZiAcFygb0RbBFQT3JYOg7C83OPri5GkoeIicKsZy0WyKDlrpG0BQt5YUZUMpMLyCU4i1e9hJGpXACYfvt+pqpqkQehc4mvu8hcLlDoEf5cw8AmucgF8hdcRBjYJDe5QG6CCwsDm+QqF8hccKFhYJPc5QLZCCai/95++hA5YSMPCjnkV201Zs6bNzrE7CZbBLyXTSxQUMt9Scr1YKnCwCaFywUAyzA7BPwb5xYGuml2ZvNACrnAnxcXDRA+m3t2bLu5D6+HlUYusOroFNvuENDBtuRnAroyDLGiIpXcl3jedWvb431oqSUlJSUlxfE/piYHXJOOSmUAAAAASUVORK5CYII=","e":1},{"id":"image_8","w":86,"h":72,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFYAAABICAYAAABsigIcAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAFFklEQVR4nO2cX27qRhTGv2ObtxsIK2h2cLODegclUh0pTxekEilPpSsodwVNnyrFlUKeKoVKITsgKyhZQckKEuC+4eHchzjEgA1je/wHx78njI3n6ON4fGbmzAFKSkpKQKpuNLP7JjMfMdGRz+kXDRgdtK2hqvbCMrP75gI4BnC4fo6Yxxow+nR+OlLVXmRhn6/vDvX5vAGiBoCfQvz0HsyD6vlpL2rbskyvbpsh7ZsAGIBoUP3l50GctkML+/zXP0e6YXQBfInTMIAJA5e1ttWNeZ8NXEG7AH6IcZsnBnoLw7ist05ewv5YWtjn67tDQ4guM/8atpEdPGnMDRWP4czumwz0EE/QdSI5gJSwCRm8AgNf43jvxO53CfhdoUmrMD9qQFPWAXYK6z5W1/Etk+JGGEYnzKP3fH13qDtOD+H6+cgw8FutbV3uum6rsBO73yHgD3VmScD8KCoVU0Zc9wU6BNHnNEzzcFNtW81tFwQKm7KnriIhboaivrFVXM3vy5ndNzMTFQCIPuvz+fDb1e1x0CW64wwyFBUAvsz+/jewS9jwWLfPGgOoJWmVJBON2Vx/YUztfg/xwz01EJ34xbwbHqs7ziXyISoA1BZEK547vbptIi+iAgBz7/n6bnM05z1wg///07NKmonGbM6FeNENY4T8/PEA/EPFFY91R1R5pLYg+k83jCFyJioAENBZ99qlsO6JRupWhSOxAUpMaprjNL1fLIXV5/MGcugN+wIxN73H710BkZmyLcViLfR7F5Y5MGYskWNm9823z16PzTLYLhwasHxxlcRkAZhvnzUAMByn7AbUsJzb8J0rKImGBow8n0uSYDmkndp9ztKQIlBtW0s9S49Vx4P3QAs6URIOBlamDr3CjtM1pVjozEPvsXfkNURJVJ7WJ+OXwopKJVbmx0eGiIJXENyFu/tULSoItFj01r9bjQqINi4o2clGNwCsCesuij2lZlIBYMB3pXYzjmXuJm1MkVg4ju+7yTdhY2r3x8jvMkieCEza8B95lV4rBb0mCgad82d6dTsqJ7+38lBtW2bQycC5AiLqJGJOQSCgu+18oLDufoEbxfYUhftd+ym2zm4Jw+jgNS+/5J2JcJydT/NWYeutkxfe4fIfDQa69Yuz8a7rpFLlp3Z/CODHmDYVgftq25LKFpKa6Bav6TMfu0tgfhSG0ZS9XErY+sXZGETSNy0gEyFEI8zeCOmlGXce4SNGCRON2ZTpV72EWvMShtEB82Mos/Yb34xyGUIJW2+dvAghGvgY/W1kUYEIq7T1i7Mx5T+PNi6xRAUiLn8ftK0hmFtRG805sUUFYuQVVM9Pe0T0Z5zGc4gSUQEF9QpytTUoHspEBRQVgiiAuEpFBRSlGLmz6PsZ4zI/Csc5VikqoLB0CbCHnhtiQ3RYlAoL7JG4CYoKJCAssBfi7twWH5dE0jirbauZ41AscVGBhDz2jUxrHvjB3EqjehKQsLDAsp7MANnuepyAqBm35FMYEhcWAL5d3R4vgF5Gy+nKY1QZUkmV/3R+OhKViom0sxkTilFlSMVjvSRexumdB2EYoWb9VZK6sEAq/W4qb/5tZLJr5qBtDYVhHCGJroG5lbWoQEYe68Wt7dVFfO9N/c2/jcyFBZa1aHqInrugrD6iKnIh7BuRvDfhMX9UcrUzsda2LsXrTnTZzXw3eRQVyJnHenGHw0E1wBKrPauK3AoLvFdV9panJqKR0PVhHr20JAW+AxA5A6fDBsf5AAAAAElFTkSuQmCC","e":1},{"id":"image_9","w":34,"h":28,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAcCAYAAAAEN20fAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAB40lEQVRIie2WzXXaQBDHfzMmN2yggriDkApCB0H2yy32kztQKgjpgFSQxT4mPJ47wBUEOnAqsCE+ol0fBDx98CFhUHzI/yTtzox+u9qdGXglkm0G/uDhFN7UjVcdFQnsD56azFwdgMpsZLzGY2EQf/BQt+6oi6MN1JYTjlt10jWfjodr/awGIEHCL/pSTyXsGK9xnwvk869pWwWTCZTUnWrYjq8yp9/EQXBzfmI2glz0p77Ajw2BEkFVtWW86uiyP+mAfM3ph4OrNMwSxB88Na21v/MGW8DgGCJ8LOiHqr6PnztdPFhru0WDAbVdIABsaDsJMIgOGfBhl4A7K7WAaEdmlWapEHP5P/+2kiD/ShVZ3jpND5SpzGGdD/wplcJxG3+N/RpnyuRQJ4lbugRRtQaYlMRxly4TS5CoBrhdcklhqWqQHsvUmsv+dAS8OxiFyPfrs+MMSOb6qqp/MAgYq8w6qyYyIMarjhzuyyEoVNVf15esTGg357UuQm+fEA6uNjVXazOrShgA471QCL1VPUjSZIOijutoyEsOr9C7Pjvxt5tt0YtgckJAjqJnvMajathKp+Ttct/yQkCOHYlr3pd2gbcbzMZqJVjXYO8FZKGL/tQXoYXjNBbpXkMxRQH+69XrGRujo9Fd8L75AAAAAElFTkSuQmCC","e":1},{"id":"image_10","w":35,"h":31,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAfCAYAAABtYXSPAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAACHklEQVRYhe2XPXLaQBTH/283oTICn8BKg4aOnCDKCeLcQDRoqOIbRLkBqZjQIN8A30C5AVRMaGydQOC4MRP2pcAiQqAvsHAmk3+n3afdn/at3gfwF4nKXLw/DXTglQ78uus2z+9ODjO8DerLpbgCyAJwEZnyAXYrFdVrvzmfF4bpTwNdSmkysw7GnIT0Oo2zcbL9T1MIHgGopSy7AGDZhjbKBdOfBroUssfAhz3TPsCubdSc6OBgdm8xY5gCsb0xod1paG4qzGD20GJWHtK/DgB8pcjqNqteUZCIPkZPaAumPw10IeQ4B8hGTPSVmK0i70Tk24amhw8iOiNIukUXJeZPB4IAwMVg9tDagRnM7i0Q3h246MFitTJ3YMC4PDUIAIBQ34FhwHwRGNAmVETvzKF+P0pKrfbCTF6AZRJNE1GYxMhalojQiz5vYJQi98QsfjwCb2C6zaoHxvcTwlzFB7aCnuKVhXUiK1UE3OxLlFswT5fJKpll8bqy2ruHiA/YhjYiQrtEGKtwPXNEJk4UATcdQ0uM9DsnE6rT0Fwi8RbPd4cS3ZMJswY6GxMJ8zmAlKLLJPfkggmBlFq1cFSE5i/dZtXLsspdkA9vg/ryUY4OKDOubUOz8hgW7g6+/Vg4AH3OaT6xDa2VbbZWppviso2aoxS9B+BnmF5XKn8Kpzw6qm96+v0dxPojIjjxvFM6TKiwc5SS5ml91X/9E/oN5Za0D/vto0EAAAAASUVORK5CYII=","e":1},{"id":"image_11","w":35,"h":31,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAfCAYAAABtYXSPAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAACE0lEQVRYhe3XTW7aQBjG8f87fKwaB05QbtDeoM4JSk9Q2GCxKl22TiRXLWLLDtFN6A3IDcwNkhuEEwDpKpDxdMGXBYbYhA9VyrMyr63RT8N4/A68JjpyiEH//mzZRqVqYGzgfFbugXQst9I5CmbgXedS6XET4fOWx/oKKb5xK7eJMINGq6C0KiLkAES41eOsn/fKww0QH+FdPLqUV2cpEjPwrnOpzKQD5uOGgW4k0M2zq6o/rzzU2z7wIR5kNkoQXITHWMMMGq1CKlA+8DbGeD2F1AxBySBfkkBm6VuuU4jEJJ/qPUT4ZH13ugAqXE9nHr2jQgBjeD+/XmAGjVZhx6neWxYYpVXxlBAIYUTEPonAsNgmQmvG5E5hSYn48+slxnB/Aks/vBMvMSHh8SJe+NcCoyeZLjA6oqS/+jlYYPJeeWgM3tEoQm29tJKH+u/u5m/S3iQ3lltZ20rUakFPMiUMdweUjLTSa7MSicl75aF+ytqHAhmDl/9WvY+6t7WfefjV7jzTKCVNz3Ide9PNtZkJx7p0SsbwdU+QkVZBadsDWzEA55dOU4Lgghe/9lLb9PfExgCcXVV9PckWgN5ODsOfbY14IgxMF7blOraBHwkhd/opG/n2rGan08H0KKI6PNeaTiF2VAO/N8w8o3rbE6ixPBuF09OTbDEu5MUYmPbNKj0uTfshkwMZAt04a+Q1/2X+AcGOsv0Jar1XAAAAAElFTkSuQmCC","e":1},{"id":"image_12","w":47,"h":37,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC8AAAAlCAYAAADSvLDKAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAACeElEQVRYheWZXVbaQBSAv3vx0YOygroD2UHZQUn1sbZxByyB7kBX0Fh9az3YHbAE3AGsgJ/2kcz0AfEQJMlkHETb74kkczLf3Mn83AHeMOJSKO6ND+dpraVimwAWGdZUB0m0P9iuXjGF8vGP3y2jtgu8zykyApuomoskakxcKz27ncViaSMcAcfAFBggMjDG9m9O63fe8nFvfGjSWoLwwdFnarHd65ODi1JpuAAOSt43stC9PqknRYWeyMe98aExtT6LiFRDuFJJO+u94BGMJfeqaTuJGsPN1a1X4iuerbC1bECAd05VtbVpfGXkP9/O+uR/31W4V03bwCRAMABGqmlzvUd1+ePTz1mbMOIAx8bUBoHEAd4ZW3synh7lVegEqGSVA8KIL7B8iXvjo9VbCovvknBR3xrGaLx6vYj8fK+5C5nqSGv1SnNKvQn+Afm9+XC3Gn4owMMKNtqtigMimYVKVx44bYZ2ico8M9dr3oNXh8jl+h7nUT6JGkOEqxeXcmOkMu+u38zMNipph8Xe+jUxVdX2pnwhI59EjYmxxC+m5YCFTl7G9mSevzmt3yFyuX0tB0QuixKS3DQw4PbYD+Hq+8d6XFQkd4V92I/vau6/fxh/heTKJ1FjoqptXn4AZzKxIkqPPuLen6Yxpk950hwCZ3Fw2Jgl0f7AEjxR2UQlcXA8dILHY4tvfl6lVBaHCvKwtQZ4iUNFeQjeAG9x8JCHYA14ljh4ZlLXJ/XEwrlvpVh+PVccPCO/xKsHHFZO91c9k0oNCCgOARLwlU+oZCW2X0OKQ4DILylaiS2clx1X+xBMfsnZ7SwWkSbWNrFMDCSufxb8V/wFQ/UDpEsq4BQAAAAASUVORK5CYII=","e":1},{"id":"image_13","w":46,"h":37,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC4AAAAlCAYAAAA9ftv0AAAACXBIWXMAAAABAAAAAQBPJcTWAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAACm0lEQVRYhdWZz33aMBTHf3rmmPJngmSDskG9QXFpb22ibMAIjEAmqJP0ljaGDcgGsIGZgJjkiKQesI0xtpGNjcn3ZGFhfdFH1nt6AB8UptuRO+9drFU7aNs/Pk0rMdIkU5w/vZnSUBwKPQCtvQ4KE1JsVORHcGfZXgvDJKa628cx1yCa2dbFrJA4d5ZtqYwRFG40PV6IaKAz4M+/qx4xDAB8yei2UMDwsd+00zrsiXPnvSulHAO41DGOooDbtMF84VHO586JhGlbndf4jR1x7izbUhoukpaFLgz3D9+aPHzm05spSQ2RPcNZeETiKi7fiDakNMY4RhoAFG6un1cgwWxJaiihigoHtKQ0pgC60Q/DGf/1b8UZ8PvIQSojvgwpuGCbneNsYcAw2qbIna+nlsnJJXfew+VCwOYFqk0nB0IKM7imjH5nBwPCyP2hxKNsxBtrt16N/BAA2FbHBeDVq3IYqViYUmyXisK0Dpk8NAwxDa5DccUwrsVGF4VJNOyH4n5UWtThpIME7Gh7Z1dRseh0Riz+fG/urIgdcX/WX05ppEPShO7t40SC47x2mHlSjr8nblsdVwGDkyhpQJIluiRGzsd+0wbDfbVKGjB2l3aeTQ35/immzvU+J7Yept3MzFWIRA/AvGwjDTwi4klnzYBMcdvqvBIJEyeWJ8l6hyoGB7PDiPxJgpMCbnXqNFpp7Uaeeqh4m8wqb8TRzsdt62JGJK5Q0bLJIw3kqB0G+LWXKYDPeb+bgkdEpk4VLEruE1DJL+ycSHTzSgMFj26lyDN255fX3EJfLzwwChVHAcCTCjye7eXlKPGA6+eVrSWvMCFDZAYWXUoRBw7KL0gyXuafAaWJA2H9cYDtjuMBavTQbw3LHKdSqq6O/QdNc/dDsiyGYAAAAABJRU5ErkJggg==","e":1},{"id":"image_14","w":48,"h":38,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAmCAYAAACCjRgBAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAACyUlEQVRYhdWZ3XnaMBSGv3PgMuFngrJB2aDuBMWhuUzqbMAGcSZoOkEFXPahwAR1NoANnAmI015iqRfYPAZskLD5e68kWT/fkeVj6Qi4cOhUAzvDWSOUJYugGlDUBKEGogmUfGPJHsrzibDrb7v62WnA3eDdIYUWCBaAauJRAAVPEUb9dkWYCJeq5ELh287KhC5T6Aq77mdXyRro119LshIAPmjoelWAu8uQu0HQIdB3jf7WUE+9dtVNe5JqwP0gcAF6NB8IL8yhkzZj97/fhdasZ0Ho9m4qzmZx0QMBAUtqidtrLy7Yf+bXIPrRu7nurBQlM3eDd4eAn7kHAqCAh367IqKl+KeIPgGAJX1OTs7SAGc4q0lZ8rH6oeZCAQ8EuND7jnQ7Hfe+VlpxluOElNxBgeIBIHqbxYlfdPrFGc5qcZYTT5xCBzog87BkxWkGFssHRc/UAWFSzWUaADAvNzNrnzm8u8p5c5EGKJAfpxkAkn71EigxT+J08g1MT6BlHwJhX6UZoEanUGMMYUXn0gBmKY4uZg+Y+HklHyeEXfdB6B5fkhEvyeUDrHkhptAFEBxTkQksyd0oS2aEXfcV1EalM+ElzVtu/Af67erzOS6ltNkHMn5kTGEH5+RWCd2sf1WqAcKuvzGHFoDXA8rSJYgmNJXMrcTCCG7hxB81S2ptC69s3QsJ+2rCzBZOZoR62rXN0QpsOcN/TSmlh4JPbFvJiEJsVtPkyEZMe+2K1hlFezudWE6H9k7TyIFoYRwbjaIXHoCPpm01mDKHlk5MNMb4QLN0sQpj07ZbIXRNxS+a5aCAKF6sQuuDTW+ak7zRvDiCt2/7Qu4HovDhCGYe6pWZW+vbY1MKOdSL22vPyEMpjJnDZl7xQME3NJGHGgH4lFElUEAnz5JZ5yBXTNH9goPVaF/m3UEeDnpH5gxnDczLDZTnftHCY/4DTdADXzyes/MAAAAASUVORK5CYII=","e":1},{"id":"image_15","w":51,"h":41,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADMAAAApCAYAAACY7BHXAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAADAElEQVRogeWZzXXaQBDH/7PS0QioIHQQOojSQLIdBD2Dr3EHER3ga3AeSgfrVCB3AB3gCohwjpYmB2GeAH1/IJz8brtazcyfN2J3Z4B/CGo7AADYLGRP82EyYxidJ4G1L+D2LbXOY6dVMc9zaTLhFuDP6St5BQjbGCuVtiqXmOe5NEGQzMHhL0diyYSlL6D6lvqdxxYAbBZyoPmYZYs4gvnR14VM8pUqZnsvJcAzAO8y3HgAKV+DnZUS3lzaRPwtw14KvPI1YcYJShSzvZcOwF8Ku2KaBjpmx87ClApmAL0vajPGy8oY/xoez56ICT/GwK3mlFciEKOrG7XcLGRP92Ez+Gt5ezEemKbdibKjcyditvNPLog+1ODPA0gBLAF0a7B3Yt/XaBDNAHHwdC7tmoQAQHeXpk0IAYCuFkBGJ/ZiNgs5qPZhtgAniNF93J4/mqqwGR3txXCY22+NgxQWQJhiyN5LLh4BAPoLBi3HUQsie8lF40UHb1sM8zI6FADwomPdSjAVYQg3OhYAsDscejHrL5pAhxMdR9KMUu8Klwevjk/oezHEhyovHhKzk6nooMZDZtM8GeOHwfHkwb8ZQdjniqYKzOTEzR+I6UyUS6C7s0RUHi/QcZJiQMw+86LBBvDUdESlIbotVAP4810OA8EumruLlCT+uvxK7Ang6kYtARo1FlNJRCBGqc+THhhjpUBk1R5RSZhpGv7IyWTWzbY/5AjMi/rCKkN6er2SedA0rpVDTB/R3nHH8zWR6+KY69TcmShXBGSiBUHEJPPWmnNfAa5u1NLXaBjWfc8EkdWZKDfv8kL3mb6l1r4mTIAeCoZVGGaaGtfKKfJO6S5A9ZpxGvTTGKtR4bequAzrx6xQ6+ZaTghQ8drcmSjX12gA5scqdvYQWWWFADU2myqnHZFV9Bs5MVHl5WN2aeegWA3OEwGZWbt7HmpvA+76k06+rlhy46gMjfU0d103Bwl/DgS664xVrfXtRhu0m4XsiQAjYpjgoBd6FGtiOEU2w/+Sv5ApGZYTyy8iAAAAAElFTkSuQmCC","e":1},{"id":"image_16","w":66,"h":166,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEIAAACmCAYAAABugVl8AAAACXBIWXMAAAABAAAAAQBPJcTWAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAKXUlEQVR4nO2dT37aSBbHf6/AxouMTU4QvPGfycLMCaIbjPsEDXF3/qziPsE4J5hk5e70OJAbuE/Q5ASNFxk73oScAONkYQzSm4URFiBA9UdSSZ/5roykKim/lKree/WqRMgx3Ua1XLy5qTJQIaAzXFtrP6y3r8KupaQfLil6x38/IuJDABsTJxgf3LXS4bQguRTi26+7bxh4Nf8KPnNLa05QDJHEgyXJt+MdZ7EIAEB74ub2MHgkd0Iw0eHyq4DRa3P/O57HSYduo1ou9PvdqNcLIf7x4NmnNpCzFlG47Tsy17Prlv2/cyUEMRzVsrkSgsGOzPVDoOP/nZs+onu8UykQfZEps/7ifPzvz02LKED2teCz4K/cCAGQI3U504RlmR8hhFyLIEJ7sngO+P7ucRWMRzJlvDy2CJc9R7aMgNea/J0DdOwHn1wIAekRA/jby4tW8Hfmhfh2vONgOuagQOaF8CAc6UKMj9OHMi8ESZrVo0Iz4bpMC9FtVMsgPJEtx0zt6WOZFkLW7R4jOF8tQnXYFB7nq0XIut0+QffbJ7NuuIrb7RN0v30y2yLk3e4RhK9hhzMrhLTb7ePNvhZAloWQdLt9pt3v++oySPd4pyLrdvtMu98+mRRCCNpXLUtidugEMiqEjttN3qwxBWRUCKiOGACGa2v5aBHf3z2uQsPtnpcfkTkhVMJyY0Lcb5/MCUEelDvKRWROCBW324dBrXnnMiXEKCynToj7PT6lVXHCKIXlAoS53+NzOhUnjVJYLli+UMhHi9DpHwDAz44JIzNCaPcPQG/RycwIAVL3LwAAHO51+mRGCNWwXIDOopOZEKLbqJYB2tOpg0GdReczIYRy2D4AwessOp8JIUzMdlMeXg0D/UNoCD+I9eF82WzaeYSF8INY3yJM9A/TGXRhWC+Eif5hOoMuDOuFMNE/zAvhB7FeCF37AZgfwg9itRAG/AsAsxl04ddYjG78wWfZ0AlYLoRu/AEAwPj48OVFZ9llVguhG38A0BMFEWlpk7VCaPUPhK8EvHVLpcqiYEyQovLNYsYTVCWWL8eEXzaen7+RLWetEAqGVE8I4QRbgL8S2P89nW0bxFohIDm/yYQjX4Ruo1ou9vtH3O+/Yrp3Ma5/3e2BcZqZlcDf3z2uep73V/QSfLb+4mL8P399vNta2NESvrqrpar1K4E9160uvyoAY9wn9H7bPVw62jAeFW76p8FDVgohmx/lAq1xSSDScAnCk7sQ4B12CkEs0yJ6vsEku5In2JFaJ4R0oDYQptdJGbBOiOD/UkQ6/h/kQbbsGOuEkHW0psL0FdX7WieEtKMVnOoXORICJNe8J6b6FXMvAcuEUEkU86f6u8c7FZ17WyWEtCGF+6n+okb/AFgmBBHJCjGe6mdB5UUXLsMqIZglh7+ADcGetIgTWCWEdEQqsFpPEOejRYw6SimCq/WkW9MU1gih0lGaxBohFDrKyfkKzUCvNUKYmNrTwRohVKb2/BikiRkxK4RQ6ShNELQ9rBBCqaMMLDnwhJoNEbQ9rBBCpaOcwNOzKgFLhFCxAYI5DyQX2gvFCiFkXW9gKueBkf0WMXKfpddoTeRNagRk7qtIGVX3eSJvUiMg45O6EKrJIH7yh25Axid1IQhcUSnnz2XoBmR8UhdCcjLH5z4gkxshVLLmggEZiIqJp0hVCBOmteqrNU2qQgQ335UqN7l+s2LiWVIVQnXEmGgFBmwIIOWMGeVmTdjvNqplcXN7CGZtGwJIP3Woolhuo9jvHzEt2xo+OumOGlrrvM2JAKQoRDBbxQZSE0IhDyJWUhPClEWoRSClIEUhzFiEOgRTClITwkRUySQpjhpmTGNTpCiE/hIlXYILWlIRwtQSJV2CC1pSEUJ1HiJOUhHCyFpOXab2pEqrj3BSuu9cEhfi+rfdfRjY2VyX9D8rEdPOYrKk+lmJ0YbeVgiR6mclRp+NS/21AGYXxSa2lGm0D0QHdgjRW39xPhEGSKxF2NQawrZiSkSI7+8eV4n4X0ncKwphuxjGLkS3US17ntuM+z4yhG0AHLsQhX6/aYODFcRdLbWmj8UqxPXxTg3AP+O8hzx8FrbvbbwtQnd/uRhgFqdhx5XmNdYa55WhJ2oAO0TUAVNrIFZOUd+cVJpxZdta40KBQoWQfsziyecjADMjAAFf2fNqw593W/4x+aXNsTNjP/hIvRor7z83ESICADDwCEL8uXJyMV6J++DZpzaY6zL3iBVGaGsAogrR+FIunly0mPHj8nvRv0eCAQDWX140bRGDwM3555bR+FIuerctAJJDIH8citK+329cH+/UQNSQq8MghK/rz88r804vbBErjcuqmggAQE+K3m0LjS9lwG8Z+CBfjxnYo+ai83OFWGlcVtnjFpREGLNX9G5ba427/4n1l+e1tMTw4DUXnQ8Vovj7uTMSwYSTtDf0RHulcVkFUhKD8WHZFkwzQqycXNYgxJ8w6ylusMetKTHmbuhvmkWdpM+EECsnlzUGx9WhTYjhrpX2o2yvqA3j46JNdnzGQsQsgs9YjIf19pVbWnPiFoPAR9Guw12fMHodkqJHgpxBfasda+RqyZAZRAAACdE0/hCLmWgZQggHS3YyV4E8rkW9Vqw0LqsM/ex2BTbg8SkaX8oPnn1qGxcjYt/gI3iolvRpAgYe+UbXg2ef2iDUTNUdtW/wEcNi+FeKEmRvZL1i/fn5qSG/5A+Z1gAAAvXNK6L0TN8Re76jZsBJ67nM0faiCiAAYECrh4Twrx4mBTN+LL6/fAPo+SXM9CbKRp7TjL3PgG+R6twDgeqDg60mAFwf7zZBy13/eyb3rJNhbFAN6lttEuQghmFMBgY3Jkxx4I+oZYUo1FTvO2FiD+pbbWZzPbcq7PHYfXdLpVoU65OZXkfdzTSMGafL/Wn7lEBpR5Q2/JEkkinO+Ljx8r9HOjcMdcMHB1tNC8TY8zvPezFCX9venQOnx9zAzOBgq5n6sMr8auXksgbciRFiffaEEM68DxXKsDRmufL+czNK0DZGxg4aMJ4iaAHYAOGH9efncyPTMkSa1yj+5/MpKNWpu7PhwfZ4WPz+7nGVXbcsaz0uItoEj3Ik2yBEb4dPt6QtxsjVR77SAjGY8YP707aRV2EauSm/OzE6SM/67A3FamVmjtUAcrPh9c2rlK3PjaJ724yjYqW56rT9kqLwNm/qux2TdSrlRwzqW214Xmq5D65XcEzXqZwoMvx5t5WW9ckxLHrRypixxBQ3gnbq0Ch28Fr/UaJDmP9tX1WM5FAND7aPEvVLhGgZr9JURYOn27VExCB66/sdRqs1XWHx5KIFkO63c0IhwofB0+1aHHUbTy8citI+AOPzmXGKAMSVnW/YL4lbBCCuhNP65tVQrDompggI/EvcIgBxZt7WN68gaB8afsldaH9H+gtLaveKGUW/ZCIqlQSxZ+crzJecFYVXTVIEIKGFK4P6VptAS6NLRPgwFKuOac8yCommjBd/P3dIiOacfIzXw4PtoySfJ0jyufN3Q+shgEMCrhjcYaY3cYXg/o8k/wNbcepbyG/CLwAAAABJRU5ErkJggg==","e":1},{"id":"image_17","w":64,"h":166,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAACmCAYAAABqdIlBAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAKPElEQVR4nO1dTXbbRhL+qkFKXMSidALLG0ucLMIbGDlBdAORcRKHq9gniHwCa1ZyEsukThD5BGFOMNQiI0ob0yeQqGQhWiRqFiQoAPxD/wBo6M33nt8j6O5G96fq6uqq6iYhgquj3W1HUJU9qgp47WGp1Nmqd66j5R4KyP9wdbS77YBaIDyLlOkz4aD84vww5b6lAgKAq2Z10xkMegDKiwoy4dVDJEEAgDMYtLBk8ABAjDdXR7vbKfQpVYjJoL6JU9gBHSTamwwgCsB27NKEveS6kg2EZPny30e7bhIdyQqyBMCDcI33IkOIIdCTqUBgN5muZAMCgJu3FZapNFpf33ooxtF4ChA+yVRyPg/cJDqTBcYEeJLTgOEm0JdM4CvBnkwlfkB6QAAAg3py1eirq2Z1M4H+pA4BAASvJ1vRub19EEbRhAC5KTAGuWa7kg0EAAxLpY5CTdd0Z7LA1B8gawsAwIj5yVaj2zPao5QRMIX5TLqyoNzrgXsCmKQtu4dgD0wJIIK8HsADIsBTkAAA5X9+/bJqsD+pQ9x/8NoqDYxGnGs9IO0PiCLv2+MpAY8a3bZSC7Nu9FxBWwIA4OaXSm6nQZgAxp8qjeR5OQwTQFDy8uR5exwigJlUbAHkeXsclgDByn6+vLrJQgQIjxUlAICXz6BJiABZF3mkJVezL5mAol+obIt95HF7PGsHSLrIg3ByuDmaJUDSRR5G/txkMwQobov91lydzmSBGQIUt8VjMB7nbXs8KwFCYykEMGLP1amfNmYJ8NSNISB/+4IZApS3xfdwNeunikXb4b5Gm7lyk80ngDVWAuRLD8wnQHFbPK2eIz0wlwD1bfEUrmb91DCXAJVocQS50QMLCNAxh8fIix6YS4BStDiCvOiBuQQYygBzDbSROJa4xeWjxRHkQg8sJkBnUzRBHvTAQgIY1NZtPA96YLEEaHiIpyDkdwpoeYh9MB7bfshiIQEmlkLAfj/hQgK26p1rAv6t/wq7/YRLo8OPfjx/qRownYLYaj2wMjy+0Th3iflrdSLsjhvGyg941Oi2NxrnLhNeqbzE5rhhIfrFVbO6Wbi9nYpt8ORo+cX54c3R7jWImjIvYY+qAE61e5sAphJw1axu/v22cugMBldM9If/zxkMev2jfx345TYa3RYzvZZ5ic15RFMCnMFtm4Gf5pQpE/HPN0eVlv+FV1o7hIzf0GKDSADA+C9MXy0tSdj3c4EmS2RL4j3WbozG6fKCazHLT88OkxAtmRd5o5GdBPzz65dVMB7HKh0IfX3xw19SliIR2UmAx962TIVQZqiEbcBspx4QkyUqNgi8rfQmSxMqVRIlt/0Psj4DGxWhPAFC4rR5BDYqQnkCAgpTNsPcRkWolCus6uSwUREqEeBfuiAdSrdQESoRwOFbJ6RC6bYpQkUCxHbgQcogsk0RKhEgiO8dHJKh9BB5FkBNAgLKTDaUbtvWWO3ESFACZOMHlm2NFY/M3G+dFeIHZZtiBdpnhlQyzKXuLkoYygT49wmpZIfbdBWPkVNjkLQFyKJYgTIBngjY9dJpdYpb6gSgLgEeKdsCK/2PKUKZgKAYq6TV2XInmboEMLTCXaEplCHUCQg4RlROngu2YynUkYB4nuRF1S3xDWgtg37UV+m4nSW+AS0C/CCq6lE5G0xiU4aQEhwLFKEWASGTViGBQjYmkQQylQAbfANaBGgPwALfgJ4EBBwjipml5azzhzSnwL1NLxFiDyGYjpMFZnKEZHFzVGmzwKmqYTRRpG3dfqiiAMHXUD4wD4DwjFjdqMnaNyCM5ATrIGNFmOkyCGCcUJ2hIsyeAGSrCAU5TuY3RGfpJBWyyU5JIEtFaMUUQIZnCpTuFk8AmUWLlO4WTwJZnSzxJSBzRZjVyZLx3eL6p8X1kdHvl4wlwMQROX2Us7iYUQCGjsiZgIeXab9yfLe4gePyRkB4lvZqIAB1r24SSPvHnAJXa2sejzMFwn6aUhC0BHtpvXQV0pSCKQEs9K7OMYoUpeD+am1bVoIJ0pKC0I2SOrdJJgFi/trA1V5LEdkNal+bYRScghSECCADt0YYBeFZ0pkkkYuV7dIDAMCgWpLth+ICI6DtJPk2gygeX9ZA7IK54wg+va1XeirtzLlWd7djURZXXwjhBt12zruLPUE4ZIQDMUQ4ccg7kCVi9kZJm/QA88vg4IvHlzUi/B4d/Lgo9oee6BSPu1IbqlmfILMdx9yZ6xuNbst/LB5f1hi86th+mUFvCsfdNpofY8UaZqYAANy8rVxjxc/wJorI4J13F3tE+F2ylT4Jcu/qT5cq9kU3SmYmBcz0OvSXb15WiaROqvsos8f/KR5f1pYVmkuAcEQ2vzDNOCk3/nvgPxabl1X2uA0NaWRwc5lemDsFAODml0pPNxdQCoyTjcZ5zX80MfggiHBy9+1OLfr9krvEkKYUfAgOHs2Pm/D4FAb1EDP2C+8vZ8a0kABvbb0Fvet1Y4LPRuvrtelj8+NmwfvcnrfU6b+Kf4rqhFU3SbWMdyLco7PResmdXuA4GTyAxAwxBjcLv527/vPS2OCQOblpQPgUGjyAgjc4RYKDn0KIU99OWErAVqPbA+MkgS70BYm94OCL7y9aAKWVP1wu8N0BECM6PAIfwKwumLHvi+8vWszYN/iO1eBxVttKArYa3R4zGZsK0cEXji8OUh/8GGUgZn6AV1o7NBJCZ65HNzcAftZuV6kv+ADEJGAyV/XCVmqbm+TA3iGwxBKch5ujSlvloAMTXpVfnE+nUeG3cxdC/CHbjjEwPgy/29kDJFNkRuAaZBUi4yQ4+GLzsgohstxynw2dtZr/IEXAVqPbY8JB7AoJ2/cK6A/Fmov6k+nyKzUFfNy8rZwC+GZpIcafG417iwvNj5tF73MnERM3Hub6B5SyxEbr67XlqwKfjUrr98kOSdr3MbHIOaJEwFa9cy1ILMjmiNj3AJK271eBQPVFniHlPMEvfvirA+Z65Ot+dPBjEzfjwT9/2lr0/1qJkhuNbmu6VyB8EkLMDD4jK8/H62WDBxSVYBQ3R7u1Ual0Ghr8cfclg96YaF8FizxAM+WSeHnWVl7cwQMJ5Ao77y72MjVxgbM7WottthuVAAsMnbOoobMK5ggYr/U9ZDR4Aj7dibWqzOABg1OgyJ8PkaGJC0F7soMHDBLAnNnP7sYKgS2CSSWYzV/f8/ZUBw/Yc2JECQSqD7+vtHXaMEYAId1TJ6tM3LgwpwMSD6KEsNLEjQtjBAzF2iGAxNPsiHAyfL5zYKo9czqg/uSaBNWQYDxRxsSN3abJxoBErcGz4fMd4+cLja8Cd/WnHRLkwqwkjE3cBJDIbhCAyUivtH0vg+QIAEyQ0C8Ir6qaBBkHyRpC9SfXQ7Hm+mEoSfRJkJvk4IGkJSCAwvvLQzDP+xGXedCy72WQmik8/PbpSwLVEUM5MqOWxuCBFCXAx2SZbGG+Xugzozb6bie10FnqBPiYOE1rGBPRJ8KpSrLz/6GJ/wHR0ty3T41iHwAAAABJRU5ErkJggg==","e":1},{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":0,"nm":"croix","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1503.25,2055,0],"ix":2},"a":{"a":0,"k":[1502.778,2030.556,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.36,0.36,0.36],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":0,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1.725]},"o":{"x":[0.21,0.21,0.21],"y":[0,0,0]},"t":144,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":207,"s":[110,110,100]},{"t":256,"s":[100,100,100]}],"ix":6,"x":"var $bm_rt;\n$bm_rt = loopOut();"}},"ao":0,"w":3000,"h":3000,"ip":0,"op":1200,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":">>Controller","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-10,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.85,"y":1},"o":{"x":0.561,"y":0},"t":0,"s":[1496,1773,0],"to":[-541.11,-540.985,0],"ti":[515.428,-558.256,0]},{"i":{"x":0.92,"y":1},"o":{"x":0.79,"y":0},"t":171,"s":[1507.318,1763.037,0],"to":[-21.845,23.66,0],"ti":[28.351,-27.669,0]},{"i":{"x":0.92,"y":1},"o":{"x":0.99,"y":0},"t":224,"s":[1497,1772,0],"to":[-2.459,2.4,0],"ti":[-0.5,-0.333,0]},{"t":271,"s":[1498,1774,0]}],"ix":2,"x":"var $bm_rt;\n$bm_rt = loopOut();"},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[88.91,29.737,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":40,"s":[122.798,41.072,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":119,"s":[132.501,44.317,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":157,"s":[141.611,47.364,100]},{"t":221,"s":[94.89,31.737,100]}],"ix":6,"x":"var $bm_rt;\nvar temp;\ntemp = transform.scale[0];\n$bm_rt = [\n temp,\n temp\n];"}},"ao":0,"ef":[{"ty":5,"nm":"Falloff Master","np":5,"mn":"Pseudo/b0OA8d132c8bv","ix":1,"en":1,"ef":[{"ty":7,"nm":"Enable","mn":"Pseudo/b0OA8d132c8bv-0001","ix":1,"v":{"a":0,"k":1,"ix":1}},{"ty":7,"nm":"Invert","mn":"Pseudo/b0OA8d132c8bv-0002","ix":2,"v":{"a":0,"k":0,"ix":2}},{"ty":0,"nm":"Falloff","mn":"Pseudo/b0OA8d132c8bv-0003","ix":3,"v":{"a":0,"k":16.674,"ix":3,"x":"var $bm_rt;\n$bm_rt = value > 100 ? 100 : value;"}}]},{"ty":5,"nm":"Falloff - Echelle","np":5,"mn":"Pseudo/iSOkadb76865x","ix":2,"en":1,"ef":[{"ty":0,"nm":"X Amount","mn":"Pseudo/iSOkadb76865x-0001","ix":1,"v":{"a":0,"k":100,"ix":1}},{"ty":0,"nm":"Y Amount","mn":"Pseudo/iSOkadb76865x-0002","ix":2,"v":{"a":0,"k":100,"ix":2}},{"ty":0,"nm":"Z Amount","mn":"Pseudo/iSOkadb76865x-0003","ix":3,"v":{"a":0,"k":0,"ix":3}}]},{"ty":5,"nm":"Falloff - Opacité","np":3,"mn":"Pseudo/ajO511f0e9a91","ix":3,"en":1,"ef":[{"ty":0,"nm":"X Amount","mn":"Pseudo/ajO511f0e9a91-0001","ix":1,"v":{"a":0,"k":100,"ix":1}}]}],"shapes":[],"ip":0,"op":1209,"st":12,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"1","sr":1,"ks":{"o":{"a":0,"k":30,"ix":11,"x":"var $bm_rt;\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l;\na = thisComp.layer('>>Controller');\nb = a.position.value;\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\nif (isEnabled == 0) {\n $bm_rt = value;\n} else {\n d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\n o = $bm_div(a.scale.value[0], 100);\n f = $bm_div($bm_mul(o, 300), 2);\n g = $bm_mul(f, d);\n h = thisLayer.toWorld(thisLayer.anchorPoint);\n dx = $bm_sub(b[0], h[0]);\n dy = $bm_sub(b[1], h[1]);\n iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\n i = Math.sqrt(iSq);\n var k;\n if (i > f) {\n k = 0;\n } else if (i < g) {\n k = 1;\n } else {\n k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\n }\n $bm_rt = l = $bm_mul(a.effect('Falloff - Opacit\\xe9')('Pseudo/ajO511f0e9a91-0001'), -1);\n if (c > 0) {\n $bm_rt = $bm_sub(value, $bm_mul(l, $bm_sub(1, k)));\n } else {\n $bm_rt = $bm_sub(value, $bm_mul(l, k));\n }\n}"},"r":{"a":0,"k":-10,"ix":10},"p":{"a":0,"k":[1377.185,1626.348,0],"ix":2},"a":{"a":0,"k":[-3.75,-83.75,0],"ix":1},"s":{"a":0,"k":[334.146,334.146,100],"ix":6,"x":"var $bm_rt;\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l, m, n, result, result;\na = thisComp.layer('>>Controller');\nb = a.position.value;\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\nif (isEnabled == 0) {\n $bm_rt = value;\n} else {\n d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\n o = $bm_div(a.scale.value[0], 100);\n f = $bm_div($bm_mul(o, 300), 2);\n g = $bm_mul(f, d);\n h = thisLayer.toWorld(thisLayer.anchorPoint);\n dx = $bm_sub(b[0], h[0]);\n dy = $bm_sub(b[1], h[1]);\n iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\n i = Math.sqrt(iSq);\n var k;\n if (i > f) {\n k = 0;\n } else if (i < g) {\n k = 1;\n } else {\n k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\n }\n l = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0001'), -1);\n m = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0002'), -1);\n $bm_rt = n = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0003'), -1);\n if (c > 0) {\n result = [\n $bm_sub(value[0], $bm_mul(l, $bm_sub(1, k))),\n $bm_sub(value[1], $bm_mul(m, $bm_sub(1, k)))\n ];\n if (value.length === 3) {\n result.push($bm_sub(value[2], $bm_mul(n, $bm_sub(1, k))));\n }\n $bm_rt = result;\n } else {\n result = [\n $bm_sub(value[0], $bm_mul(l, k)),\n $bm_sub(value[1], $bm_mul(m, k))\n ];\n if (value.length === 3) {\n result.push($bm_sub(value[2], $bm_mul(n, k)));\n }\n $bm_rt = result;\n }\n}"}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[5.661,0],[0,-5.661],[-5.661,0],[0,5.661]],"o":[[-5.661,0],[0,5.661],[5.661,0],[0,-5.661]],"v":[[0,-10.25],[-10.25,0],[0,10.25],[10.25,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Contour 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.819607902976,0.400000029919,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-3.75,-83.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.454901993275,0.61960786581,0.4392157197,1],"ix":4},"o":{"a":0,"k":0,"ix":5},"r":1,"bm":0,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false}],"ip":0,"op":1313,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"2","sr":1,"ks":{"o":{"a":0,"k":30,"ix":11,"x":"var $bm_rt;\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l;\na = thisComp.layer('>>Controller');\nb = a.position.value;\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\nif (isEnabled == 0) {\n $bm_rt = value;\n} else {\n d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\n o = $bm_div(a.scale.value[0], 100);\n f = $bm_div($bm_mul(o, 300), 2);\n g = $bm_mul(f, d);\n h = thisLayer.toWorld(thisLayer.anchorPoint);\n dx = $bm_sub(b[0], h[0]);\n dy = $bm_sub(b[1], h[1]);\n iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\n i = Math.sqrt(iSq);\n var k;\n if (i > f) {\n k = 0;\n } else if (i < g) {\n k = 1;\n } else {\n k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\n }\n $bm_rt = l = $bm_mul(a.effect('Falloff - Opacit\\xe9')('Pseudo/ajO511f0e9a91-0001'), -1);\n if (c > 0) {\n $bm_rt = $bm_sub(value, $bm_mul(l, $bm_sub(1, k)));\n } else {\n $bm_rt = $bm_sub(value, $bm_mul(l, k));\n }\n}"},"r":{"a":0,"k":-10,"ix":10},"p":{"a":0,"k":[1331,1541.029,0],"ix":2},"a":{"a":0,"k":[-3.75,-83.75,0],"ix":1},"s":{"a":0,"k":[334.146,334.146,100],"ix":6,"x":"var $bm_rt;\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l, m, n, result, result;\na = thisComp.layer('>>Controller');\nb = a.position.value;\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\nif (isEnabled == 0) {\n $bm_rt = value;\n} else {\n d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\n o = $bm_div(a.scale.value[0], 100);\n f = $bm_div($bm_mul(o, 300), 2);\n g = $bm_mul(f, d);\n h = thisLayer.toWorld(thisLayer.anchorPoint);\n dx = $bm_sub(b[0], h[0]);\n dy = $bm_sub(b[1], h[1]);\n iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\n i = Math.sqrt(iSq);\n var k;\n if (i > f) {\n k = 0;\n } else if (i < g) {\n k = 1;\n } else {\n k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\n }\n l = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0001'), -1);\n m = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0002'), -1);\n $bm_rt = n = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0003'), -1);\n if (c > 0) {\n result = [\n $bm_sub(value[0], $bm_mul(l, $bm_sub(1, k))),\n $bm_sub(value[1], $bm_mul(m, $bm_sub(1, k)))\n ];\n if (value.length === 3) {\n result.push($bm_sub(value[2], $bm_mul(n, $bm_sub(1, k))));\n }\n $bm_rt = result;\n } else {\n result = [\n $bm_sub(value[0], $bm_mul(l, k)),\n $bm_sub(value[1], $bm_mul(m, k))\n ];\n if (value.length === 3) {\n result.push($bm_sub(value[2], $bm_mul(n, k)));\n }\n $bm_rt = result;\n }\n}"}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[5.661,0],[0,-5.661],[-5.661,0],[0,5.661]],"o":[[-5.661,0],[0,5.661],[5.661,0],[0,-5.661]],"v":[[0,-10.25],[-10.25,0],[0,10.25],[10.25,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Contour 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.819607902976,0.400000029919,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-3.75,-83.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.454901993275,0.61960786581,0.4392157197,1],"ix":4},"o":{"a":0,"k":0,"ix":5},"r":1,"bm":0,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false}],"ip":0,"op":1314,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"3","sr":1,"ks":{"o":{"a":0,"k":30,"ix":11,"x":"var $bm_rt;\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l;\na = thisComp.layer('>>Controller');\nb = a.position.value;\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\nif (isEnabled == 0) {\n $bm_rt = value;\n} else {\n d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\n o = $bm_div(a.scale.value[0], 100);\n f = $bm_div($bm_mul(o, 300), 2);\n g = $bm_mul(f, d);\n h = thisLayer.toWorld(thisLayer.anchorPoint);\n dx = $bm_sub(b[0], h[0]);\n dy = $bm_sub(b[1], h[1]);\n iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\n i = Math.sqrt(iSq);\n var k;\n if (i > f) {\n k = 0;\n } else if (i < g) {\n k = 1;\n } else {\n k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\n }\n $bm_rt = l = $bm_mul(a.effect('Falloff - Opacit\\xe9')('Pseudo/ajO511f0e9a91-0001'), -1);\n if (c > 0) {\n $bm_rt = $bm_sub(value, $bm_mul(l, $bm_sub(1, k)));\n } else {\n $bm_rt = $bm_sub(value, $bm_mul(l, k));\n }\n}"},"r":{"a":0,"k":-10,"ix":10},"p":{"a":0,"k":[1342.935,1449.728,0],"ix":2},"a":{"a":0,"k":[-3.75,-83.75,0],"ix":1},"s":{"a":0,"k":[334.146,334.146,100],"ix":6,"x":"var $bm_rt;\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l, m, n, result, result;\na = thisComp.layer('>>Controller');\nb = a.position.value;\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\nif (isEnabled == 0) {\n $bm_rt = value;\n} else {\n d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\n o = $bm_div(a.scale.value[0], 100);\n f = $bm_div($bm_mul(o, 300), 2);\n g = $bm_mul(f, d);\n h = thisLayer.toWorld(thisLayer.anchorPoint);\n dx = $bm_sub(b[0], h[0]);\n dy = $bm_sub(b[1], h[1]);\n iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\n i = Math.sqrt(iSq);\n var k;\n if (i > f) {\n k = 0;\n } else if (i < g) {\n k = 1;\n } else {\n k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\n }\n l = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0001'), -1);\n m = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0002'), -1);\n $bm_rt = n = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0003'), -1);\n if (c > 0) {\n result = [\n $bm_sub(value[0], $bm_mul(l, $bm_sub(1, k))),\n $bm_sub(value[1], $bm_mul(m, $bm_sub(1, k)))\n ];\n if (value.length === 3) {\n result.push($bm_sub(value[2], $bm_mul(n, $bm_sub(1, k))));\n }\n $bm_rt = result;\n } else {\n result = [\n $bm_sub(value[0], $bm_mul(l, k)),\n $bm_sub(value[1], $bm_mul(m, k))\n ];\n if (value.length === 3) {\n result.push($bm_sub(value[2], $bm_mul(n, k)));\n }\n $bm_rt = result;\n }\n}"}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[5.661,0],[0,-5.661],[-5.661,0],[0,5.661]],"o":[[-5.661,0],[0,5.661],[5.661,0],[0,-5.661]],"v":[[0,-10.25],[-10.25,0],[0,10.25],[10.25,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Contour 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.819607902976,0.400000029919,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-3.75,-83.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.454901993275,0.61960786581,0.4392157197,1],"ix":4},"o":{"a":0,"k":0,"ix":5},"r":1,"bm":0,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false}],"ip":0,"op":1314,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"4","sr":1,"ks":{"o":{"a":0,"k":30,"ix":11,"x":"var $bm_rt;\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l;\na = thisComp.layer('>>Controller');\nb = a.position.value;\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\nif (isEnabled == 0) {\n $bm_rt = value;\n} else {\n d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\n o = $bm_div(a.scale.value[0], 100);\n f = $bm_div($bm_mul(o, 300), 2);\n g = $bm_mul(f, d);\n h = thisLayer.toWorld(thisLayer.anchorPoint);\n dx = $bm_sub(b[0], h[0]);\n dy = $bm_sub(b[1], h[1]);\n iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\n i = Math.sqrt(iSq);\n var k;\n if (i > f) {\n k = 0;\n } else if (i < g) {\n k = 1;\n } else {\n k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\n }\n $bm_rt = l = $bm_mul(a.effect('Falloff - Opacit\\xe9')('Pseudo/ajO511f0e9a91-0001'), -1);\n if (c > 0) {\n $bm_rt = $bm_sub(value, $bm_mul(l, $bm_sub(1, k)));\n } else {\n $bm_rt = $bm_sub(value, $bm_mul(l, k));\n }\n}"},"r":{"a":0,"k":-10,"ix":10},"p":{"a":0,"k":[1407.099,1375.338,0],"ix":2},"a":{"a":0,"k":[-3.75,-83.75,0],"ix":1},"s":{"a":0,"k":[334.146,334.146,100],"ix":6,"x":"var $bm_rt;\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l, m, n, result, result;\na = thisComp.layer('>>Controller');\nb = a.position.value;\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\nif (isEnabled == 0) {\n $bm_rt = value;\n} else {\n d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\n o = $bm_div(a.scale.value[0], 100);\n f = $bm_div($bm_mul(o, 300), 2);\n g = $bm_mul(f, d);\n h = thisLayer.toWorld(thisLayer.anchorPoint);\n dx = $bm_sub(b[0], h[0]);\n dy = $bm_sub(b[1], h[1]);\n iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\n i = Math.sqrt(iSq);\n var k;\n if (i > f) {\n k = 0;\n } else if (i < g) {\n k = 1;\n } else {\n k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\n }\n l = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0001'), -1);\n m = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0002'), -1);\n $bm_rt = n = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0003'), -1);\n if (c > 0) {\n result = [\n $bm_sub(value[0], $bm_mul(l, $bm_sub(1, k))),\n $bm_sub(value[1], $bm_mul(m, $bm_sub(1, k)))\n ];\n if (value.length === 3) {\n result.push($bm_sub(value[2], $bm_mul(n, $bm_sub(1, k))));\n }\n $bm_rt = result;\n } else {\n result = [\n $bm_sub(value[0], $bm_mul(l, k)),\n $bm_sub(value[1], $bm_mul(m, k))\n ];\n if (value.length === 3) {\n result.push($bm_sub(value[2], $bm_mul(n, k)));\n }\n $bm_rt = result;\n }\n}"}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[5.661,0],[0,-5.661],[-5.661,0],[0,5.661]],"o":[[-5.661,0],[0,5.661],[5.661,0],[0,-5.661]],"v":[[0,-10.25],[-10.25,0],[0,10.25],[10.25,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Contour 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.819607902976,0.400000029919,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-3.75,-83.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.454901993275,0.61960786581,0.4392157197,1],"ix":4},"o":{"a":0,"k":0,"ix":5},"r":1,"bm":0,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false}],"ip":0,"op":1314,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"5","sr":1,"ks":{"o":{"a":0,"k":30,"ix":11,"x":"var $bm_rt;\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l;\na = thisComp.layer('>>Controller');\nb = a.position.value;\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\nif (isEnabled == 0) {\n $bm_rt = value;\n} else {\n d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\n o = $bm_div(a.scale.value[0], 100);\n f = $bm_div($bm_mul(o, 300), 2);\n g = $bm_mul(f, d);\n h = thisLayer.toWorld(thisLayer.anchorPoint);\n dx = $bm_sub(b[0], h[0]);\n dy = $bm_sub(b[1], h[1]);\n iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\n i = Math.sqrt(iSq);\n var k;\n if (i > f) {\n k = 0;\n } else if (i < g) {\n k = 1;\n } else {\n k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\n }\n $bm_rt = l = $bm_mul(a.effect('Falloff - Opacit\\xe9')('Pseudo/ajO511f0e9a91-0001'), -1);\n if (c > 0) {\n $bm_rt = $bm_sub(value, $bm_mul(l, $bm_sub(1, k)));\n } else {\n $bm_rt = $bm_sub(value, $bm_mul(l, k));\n }\n}"},"r":{"a":0,"k":-10,"ix":10},"p":{"a":0,"k":[1495,1350,0],"ix":2},"a":{"a":0,"k":[-3.75,-83.75,0],"ix":1},"s":{"a":0,"k":[334.146,334.146,100],"ix":6,"x":"var $bm_rt;\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l, m, n, result, result;\na = thisComp.layer('>>Controller');\nb = a.position.value;\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\nif (isEnabled == 0) {\n $bm_rt = value;\n} else {\n d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\n o = $bm_div(a.scale.value[0], 100);\n f = $bm_div($bm_mul(o, 300), 2);\n g = $bm_mul(f, d);\n h = thisLayer.toWorld(thisLayer.anchorPoint);\n dx = $bm_sub(b[0], h[0]);\n dy = $bm_sub(b[1], h[1]);\n iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\n i = Math.sqrt(iSq);\n var k;\n if (i > f) {\n k = 0;\n } else if (i < g) {\n k = 1;\n } else {\n k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\n }\n l = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0001'), -1);\n m = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0002'), -1);\n $bm_rt = n = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0003'), -1);\n if (c > 0) {\n result = [\n $bm_sub(value[0], $bm_mul(l, $bm_sub(1, k))),\n $bm_sub(value[1], $bm_mul(m, $bm_sub(1, k)))\n ];\n if (value.length === 3) {\n result.push($bm_sub(value[2], $bm_mul(n, $bm_sub(1, k))));\n }\n $bm_rt = result;\n } else {\n result = [\n $bm_sub(value[0], $bm_mul(l, k)),\n $bm_sub(value[1], $bm_mul(m, k))\n ];\n if (value.length === 3) {\n result.push($bm_sub(value[2], $bm_mul(n, k)));\n }\n $bm_rt = result;\n }\n}"}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[5.661,0],[0,-5.661],[-5.661,0],[0,5.661]],"o":[[-5.661,0],[0,5.661],[5.661,0],[0,-5.661]],"v":[[0,-10.25],[-10.25,0],[0,10.25],[10.25,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Contour 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.819607902976,0.400000029919,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-3.75,-83.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.454901993275,0.61960786581,0.4392157197,1],"ix":4},"o":{"a":0,"k":0,"ix":5},"r":1,"bm":0,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false}],"ip":0,"op":1314,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"6","sr":1,"ks":{"o":{"a":0,"k":30,"ix":11,"x":"var $bm_rt;\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l;\na = thisComp.layer('>>Controller');\nb = a.position.value;\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\nif (isEnabled == 0) {\n $bm_rt = value;\n} else {\n d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\n o = $bm_div(a.scale.value[0], 100);\n f = $bm_div($bm_mul(o, 300), 2);\n g = $bm_mul(f, d);\n h = thisLayer.toWorld(thisLayer.anchorPoint);\n dx = $bm_sub(b[0], h[0]);\n dy = $bm_sub(b[1], h[1]);\n iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\n i = Math.sqrt(iSq);\n var k;\n if (i > f) {\n k = 0;\n } else if (i < g) {\n k = 1;\n } else {\n k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\n }\n $bm_rt = l = $bm_mul(a.effect('Falloff - Opacit\\xe9')('Pseudo/ajO511f0e9a91-0001'), -1);\n if (c > 0) {\n $bm_rt = $bm_sub(value, $bm_mul(l, $bm_sub(1, k)));\n } else {\n $bm_rt = $bm_sub(value, $bm_mul(l, k));\n }\n}"},"r":{"a":0,"k":-10,"ix":10},"p":{"a":0,"k":[1592.053,1381.548,0],"ix":2},"a":{"a":0,"k":[-3.75,-83.75,0],"ix":1},"s":{"a":0,"k":[334.146,334.146,100],"ix":6,"x":"var $bm_rt;\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l, m, n, result, result;\na = thisComp.layer('>>Controller');\nb = a.position.value;\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\nif (isEnabled == 0) {\n $bm_rt = value;\n} else {\n d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\n o = $bm_div(a.scale.value[0], 100);\n f = $bm_div($bm_mul(o, 300), 2);\n g = $bm_mul(f, d);\n h = thisLayer.toWorld(thisLayer.anchorPoint);\n dx = $bm_sub(b[0], h[0]);\n dy = $bm_sub(b[1], h[1]);\n iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\n i = Math.sqrt(iSq);\n var k;\n if (i > f) {\n k = 0;\n } else if (i < g) {\n k = 1;\n } else {\n k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\n }\n l = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0001'), -1);\n m = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0002'), -1);\n $bm_rt = n = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0003'), -1);\n if (c > 0) {\n result = [\n $bm_sub(value[0], $bm_mul(l, $bm_sub(1, k))),\n $bm_sub(value[1], $bm_mul(m, $bm_sub(1, k)))\n ];\n if (value.length === 3) {\n result.push($bm_sub(value[2], $bm_mul(n, $bm_sub(1, k))));\n }\n $bm_rt = result;\n } else {\n result = [\n $bm_sub(value[0], $bm_mul(l, k)),\n $bm_sub(value[1], $bm_mul(m, k))\n ];\n if (value.length === 3) {\n result.push($bm_sub(value[2], $bm_mul(n, k)));\n }\n $bm_rt = result;\n }\n}"}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[5.661,0],[0,-5.661],[-5.661,0],[0,5.661]],"o":[[-5.661,0],[0,5.661],[5.661,0],[0,-5.661]],"v":[[0,-10.25],[-10.25,0],[0,10.25],[10.25,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Contour 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.819607902976,0.400000029919,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-3.75,-83.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.454901993275,0.61960786581,0.4392157197,1],"ix":4},"o":{"a":0,"k":0,"ix":5},"r":1,"bm":0,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false}],"ip":0,"op":1314,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"7","sr":1,"ks":{"o":{"a":0,"k":30,"ix":11,"x":"var $bm_rt;\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l;\na = thisComp.layer('>>Controller');\nb = a.position.value;\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\nif (isEnabled == 0) {\n $bm_rt = value;\n} else {\n d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\n o = $bm_div(a.scale.value[0], 100);\n f = $bm_div($bm_mul(o, 300), 2);\n g = $bm_mul(f, d);\n h = thisLayer.toWorld(thisLayer.anchorPoint);\n dx = $bm_sub(b[0], h[0]);\n dy = $bm_sub(b[1], h[1]);\n iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\n i = Math.sqrt(iSq);\n var k;\n if (i > f) {\n k = 0;\n } else if (i < g) {\n k = 1;\n } else {\n k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\n }\n $bm_rt = l = $bm_mul(a.effect('Falloff - Opacit\\xe9')('Pseudo/ajO511f0e9a91-0001'), -1);\n if (c > 0) {\n $bm_rt = $bm_sub(value, $bm_mul(l, $bm_sub(1, k)));\n } else {\n $bm_rt = $bm_sub(value, $bm_mul(l, k));\n }\n}"},"r":{"a":0,"k":-10,"ix":10},"p":{"a":0,"k":[1648.856,1449.728,0],"ix":2},"a":{"a":0,"k":[-3.75,-83.75,0],"ix":1},"s":{"a":0,"k":[334.146,334.146,100],"ix":6,"x":"var $bm_rt;\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l, m, n, result, result;\na = thisComp.layer('>>Controller');\nb = a.position.value;\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\nif (isEnabled == 0) {\n $bm_rt = value;\n} else {\n d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\n o = $bm_div(a.scale.value[0], 100);\n f = $bm_div($bm_mul(o, 300), 2);\n g = $bm_mul(f, d);\n h = thisLayer.toWorld(thisLayer.anchorPoint);\n dx = $bm_sub(b[0], h[0]);\n dy = $bm_sub(b[1], h[1]);\n iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\n i = Math.sqrt(iSq);\n var k;\n if (i > f) {\n k = 0;\n } else if (i < g) {\n k = 1;\n } else {\n k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\n }\n l = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0001'), -1);\n m = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0002'), -1);\n $bm_rt = n = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0003'), -1);\n if (c > 0) {\n result = [\n $bm_sub(value[0], $bm_mul(l, $bm_sub(1, k))),\n $bm_sub(value[1], $bm_mul(m, $bm_sub(1, k)))\n ];\n if (value.length === 3) {\n result.push($bm_sub(value[2], $bm_mul(n, $bm_sub(1, k))));\n }\n $bm_rt = result;\n } else {\n result = [\n $bm_sub(value[0], $bm_mul(l, k)),\n $bm_sub(value[1], $bm_mul(m, k))\n ];\n if (value.length === 3) {\n result.push($bm_sub(value[2], $bm_mul(n, k)));\n }\n $bm_rt = result;\n }\n}"}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[5.661,0],[0,-5.661],[-5.661,0],[0,5.661]],"o":[[-5.661,0],[0,5.661],[5.661,0],[0,-5.661]],"v":[[0,-10.25],[-10.25,0],[0,10.25],[10.25,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Contour 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.819607902976,0.400000029919,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-3.75,-83.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.454901993275,0.61960786581,0.4392157197,1],"ix":4},"o":{"a":0,"k":0,"ix":5},"r":1,"bm":0,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false}],"ip":0,"op":1314,"st":0,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"8","sr":1,"ks":{"o":{"a":0,"k":30,"ix":11,"x":"var $bm_rt;\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l;\na = thisComp.layer('>>Controller');\nb = a.position.value;\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\nif (isEnabled == 0) {\n $bm_rt = value;\n} else {\n d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\n o = $bm_div(a.scale.value[0], 100);\n f = $bm_div($bm_mul(o, 300), 2);\n g = $bm_mul(f, d);\n h = thisLayer.toWorld(thisLayer.anchorPoint);\n dx = $bm_sub(b[0], h[0]);\n dy = $bm_sub(b[1], h[1]);\n iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\n i = Math.sqrt(iSq);\n var k;\n if (i > f) {\n k = 0;\n } else if (i < g) {\n k = 1;\n } else {\n k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\n }\n $bm_rt = l = $bm_mul(a.effect('Falloff - Opacit\\xe9')('Pseudo/ajO511f0e9a91-0001'), -1);\n if (c > 0) {\n $bm_rt = $bm_sub(value, $bm_mul(l, $bm_sub(1, k)));\n } else {\n $bm_rt = $bm_sub(value, $bm_mul(l, k));\n }\n}"},"r":{"a":0,"k":-10,"ix":10},"p":{"a":0,"k":[1660,1541.029,0],"ix":2},"a":{"a":0,"k":[-3.75,-83.75,0],"ix":1},"s":{"a":0,"k":[334.146,334.146,100],"ix":6,"x":"var $bm_rt;\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l, m, n, result, result;\na = thisComp.layer('>>Controller');\nb = a.position.value;\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\nif (isEnabled == 0) {\n $bm_rt = value;\n} else {\n d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\n o = $bm_div(a.scale.value[0], 100);\n f = $bm_div($bm_mul(o, 300), 2);\n g = $bm_mul(f, d);\n h = thisLayer.toWorld(thisLayer.anchorPoint);\n dx = $bm_sub(b[0], h[0]);\n dy = $bm_sub(b[1], h[1]);\n iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\n i = Math.sqrt(iSq);\n var k;\n if (i > f) {\n k = 0;\n } else if (i < g) {\n k = 1;\n } else {\n k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\n }\n l = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0001'), -1);\n m = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0002'), -1);\n $bm_rt = n = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0003'), -1);\n if (c > 0) {\n result = [\n $bm_sub(value[0], $bm_mul(l, $bm_sub(1, k))),\n $bm_sub(value[1], $bm_mul(m, $bm_sub(1, k)))\n ];\n if (value.length === 3) {\n result.push($bm_sub(value[2], $bm_mul(n, $bm_sub(1, k))));\n }\n $bm_rt = result;\n } else {\n result = [\n $bm_sub(value[0], $bm_mul(l, k)),\n $bm_sub(value[1], $bm_mul(m, k))\n ];\n if (value.length === 3) {\n result.push($bm_sub(value[2], $bm_mul(n, k)));\n }\n $bm_rt = result;\n }\n}"}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[5.661,0],[0,-5.661],[-5.661,0],[0,5.661]],"o":[[-5.661,0],[0,5.661],[5.661,0],[0,-5.661]],"v":[[0,-10.25],[-10.25,0],[0,10.25],[10.25,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Contour 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.819607902976,0.400000029919,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-3.75,-83.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.454901993275,0.61960786581,0.4392157197,1],"ix":4},"o":{"a":0,"k":0,"ix":5},"r":1,"bm":0,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false}],"ip":0,"op":1314,"st":0,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"9","sr":1,"ks":{"o":{"a":0,"k":30,"ix":11,"x":"var $bm_rt;\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l;\na = thisComp.layer('>>Controller');\nb = a.position.value;\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\nif (isEnabled == 0) {\n $bm_rt = value;\n} else {\n d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\n o = $bm_div(a.scale.value[0], 100);\n f = $bm_div($bm_mul(o, 300), 2);\n g = $bm_mul(f, d);\n h = thisLayer.toWorld(thisLayer.anchorPoint);\n dx = $bm_sub(b[0], h[0]);\n dy = $bm_sub(b[1], h[1]);\n iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\n i = Math.sqrt(iSq);\n var k;\n if (i > f) {\n k = 0;\n } else if (i < g) {\n k = 1;\n } else {\n k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\n }\n $bm_rt = l = $bm_mul(a.effect('Falloff - Opacit\\xe9')('Pseudo/ajO511f0e9a91-0001'), -1);\n if (c > 0) {\n $bm_rt = $bm_sub(value, $bm_mul(l, $bm_sub(1, k)));\n } else {\n $bm_rt = $bm_sub(value, $bm_mul(l, k));\n }\n}"},"r":{"a":0,"k":-10,"ix":10},"p":{"a":0,"k":[1622.046,1626.348,0],"ix":2},"a":{"a":0,"k":[-3.75,-83.75,0],"ix":1},"s":{"a":0,"k":[334.146,334.146,100],"ix":6,"x":"var $bm_rt;\nvar a, b, c, isEnabled, d, o, f, g, h, dx, dy, iSq, i, l, m, n, result, result;\na = thisComp.layer('>>Controller');\nb = a.position.value;\nc = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0002');\n$bm_rt = isEnabled = a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0001');\nif (isEnabled == 0) {\n $bm_rt = value;\n} else {\n d = $bm_div(a.effect('Falloff Master')('Pseudo/b0OA8d132c8bv-0003').value, 100);\n o = $bm_div(a.scale.value[0], 100);\n f = $bm_div($bm_mul(o, 300), 2);\n g = $bm_mul(f, d);\n h = thisLayer.toWorld(thisLayer.anchorPoint);\n dx = $bm_sub(b[0], h[0]);\n dy = $bm_sub(b[1], h[1]);\n iSq = $bm_sum($bm_mul(dx, dx), $bm_mul(dy, dy));\n i = Math.sqrt(iSq);\n var k;\n if (i > f) {\n k = 0;\n } else if (i < g) {\n k = 1;\n } else {\n k = $bm_sub(1, $bm_div($bm_sub(i, g), $bm_sub(f, g)));\n }\n l = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0001'), -1);\n m = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0002'), -1);\n $bm_rt = n = $bm_mul(a.effect('Falloff - Echelle')('Pseudo/iSOkadb76865x-0003'), -1);\n if (c > 0) {\n result = [\n $bm_sub(value[0], $bm_mul(l, $bm_sub(1, k))),\n $bm_sub(value[1], $bm_mul(m, $bm_sub(1, k)))\n ];\n if (value.length === 3) {\n result.push($bm_sub(value[2], $bm_mul(n, $bm_sub(1, k))));\n }\n $bm_rt = result;\n } else {\n result = [\n $bm_sub(value[0], $bm_mul(l, k)),\n $bm_sub(value[1], $bm_mul(m, k))\n ];\n if (value.length === 3) {\n result.push($bm_sub(value[2], $bm_mul(n, k)));\n }\n $bm_rt = result;\n }\n}"}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[5.661,0],[0,-5.661],[-5.661,0],[0,5.661]],"o":[[-5.661,0],[0,5.661],[5.661,0],[0,-5.661]],"v":[[0,-10.25],[-10.25,0],[0,10.25],[10.25,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Contour 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.819607902976,0.400000029919,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-3.75,-83.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.454901993275,0.61960786581,0.4392157197,1],"ix":4},"o":{"a":0,"k":0,"ix":5},"r":1,"bm":0,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false}],"ip":0,"op":1314,"st":0,"bm":0}]},{"id":"comp_1","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Calque de forme 15","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1500,1744,0],"ix":2},"a":{"a":0,"k":[49,244,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[42,236],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Tracé rectangulaire 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[0.766274964576,0.137628996606,0.137628996606,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Contour 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.211764720842,0.270588235294,0.309803921569,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[49,244],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformer "}],"nm":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"rd","nm":"Sommets arrondis 1","r":{"a":0,"k":15,"ix":1},"ix":2,"mn":"ADBE Vector Filter - RC","hd":false}],"ip":0,"op":1320,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Calque de forme 14","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":90,"ix":10},"p":{"a":0,"k":[1500,1694,0],"ix":2},"a":{"a":0,"k":[49,244,0],"ix":1},"s":{"a":0,"k":[100,56.78,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[42,236],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Tracé rectangulaire 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[0.766274964576,0.137628996606,0.137628996606,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Contour 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.211764720842,0.270588235294,0.309803921569,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[49,244],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformer "}],"nm":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"rd","nm":"Sommets arrondis 1","r":{"a":0,"k":24,"ix":1},"ix":2,"mn":"ADBE Vector Filter - RC","hd":false}],"ip":0,"op":1320,"st":0,"bm":0}]},{"id":"comp_2","layers":[{"ddd":0,"ind":1,"ty":2,"nm":"Calque 10/petits coeurs.ai","cl":"ai","refId":"image_0","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0],"y":[0]},"t":330,"s":[100]},{"i":{"x":[0.259],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":426,"s":[70.581]},{"t":566,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.444,"y":1},"o":{"x":0.129,"y":0},"t":330,"s":[1500,1500,0],"to":[23.389,-291.222,0],"ti":[223.278,79.556,0]},{"t":566,"s":[1030.333,1052.667,0]}],"ix":2},"a":{"a":0,"k":[27.5,22.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.444,0.444,0.667],"y":[1,1,1]},"o":{"x":[0.129,0.129,0.333],"y":[0,0,0]},"t":330,"s":[0,0,100]},{"t":564,"s":[395,395,100]}],"ix":6}},"ao":0,"ip":0,"op":1234,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":2,"nm":"Calque 11/petits coeurs.ai","cl":"ai","refId":"image_1","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0],"y":[0]},"t":393,"s":[100]},{"i":{"x":[0.259],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":489,"s":[70.581]},{"t":627,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.444,"y":1},"o":{"x":0.129,"y":0},"t":393,"s":[1500,1500,0],"to":[155.333,-334.278,0],"ti":[-128.667,114.278,0]},{"t":629,"s":[1492,1024.333,0]}],"ix":2},"a":{"a":0,"k":[30.5,25,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.444,0.444,0.667],"y":[1,1,1]},"o":{"x":[0.129,0.129,0.333],"y":[0,0,0]},"t":393,"s":[0,0,100]},{"t":627,"s":[395,395,100]}],"ix":6}},"ao":0,"ip":63,"op":1297,"st":63,"bm":0},{"ddd":0,"ind":3,"ty":2,"nm":"Calque 12/petits coeurs.ai","cl":"ai","refId":"image_2","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0],"y":[0]},"t":361,"s":[100]},{"i":{"x":[0.259],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":457,"s":[70.581]},{"t":596,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.444,"y":1},"o":{"x":0.129,"y":0},"t":361,"s":[1500,1500,0],"to":[12.556,-242.833,0],"ti":[2.444,362.833,0]},{"t":597,"s":[1925.333,1103,0]}],"ix":2},"a":{"a":0,"k":[33,27,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.444,0.444,0.667],"y":[1,1,1]},"o":{"x":[0.129,0.129,0.333],"y":[0,0,0]},"t":361,"s":[0,0,100]},{"t":596,"s":[395,395,100]}],"ix":6}},"ao":0,"ip":31,"op":1265,"st":31,"bm":0},{"ddd":0,"ind":4,"ty":2,"nm":"Calque 13/petits coeurs.ai","cl":"ai","refId":"image_3","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0],"y":[0]},"t":434,"s":[100]},{"i":{"x":[0.259],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":530,"s":[70.581]},{"t":668,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.474,"y":0.622},"o":{"x":0.153,"y":0},"t":434,"s":[1500,1500,0],"to":[-11.952,-214.891,0],"ti":[200.508,51.457,0]},{"i":{"x":0.628,"y":1},"o":{"x":0.296,"y":0.591},"t":584,"s":[1758.198,1215.93,0],"to":[-27.401,-7.032,0],"ti":[37.611,2.091,0]},{"t":670,"s":[1658.333,1206.667,0]}],"ix":2},"a":{"a":0,"k":[36,29.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.444,0.444,0.667],"y":[1,1,1]},"o":{"x":[0.129,0.129,0.333],"y":[0,0,0]},"t":434,"s":[0,0,100]},{"t":668,"s":[395,395,100]}],"ix":6}},"ao":0,"ip":104,"op":1338,"st":104,"bm":0},{"ddd":0,"ind":5,"ty":2,"nm":"Calque 14/petits coeurs.ai","cl":"ai","refId":"image_4","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0],"y":[0]},"t":358,"s":[100]},{"i":{"x":[0.259],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":454,"s":[70.581]},{"t":597,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.444,"y":1},"o":{"x":0.129,"y":0},"t":358,"s":[1500,1500,0],"to":[1.944,364.444,0],"ti":[-463.333,-446.667,0]},{"t":594,"s":[2171.667,1556.667,0]}],"ix":2},"a":{"a":0,"k":[38.5,31,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.444,0.444,0.667],"y":[1,1,1]},"o":{"x":[0.129,0.129,0.333],"y":[0,0,0]},"t":358,"s":[0,0,100]},{"t":597,"s":[395,395,100]}],"ix":6}},"ao":0,"ip":28,"op":1262,"st":28,"bm":0},{"ddd":0,"ind":6,"ty":2,"nm":"Calque 15/petits coeurs.ai","cl":"ai","refId":"image_5","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0],"y":[0]},"t":330,"s":[100]},{"i":{"x":[0.259],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":426,"s":[70.581]},{"t":566,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.444,"y":1},"o":{"x":0.129,"y":0},"t":330,"s":[1500,1500,0],"to":[2.222,282.222,0],"ti":[316.111,24.444,0]},{"t":566,"s":[906.667,1531.667,0]}],"ix":2},"a":{"a":0,"k":[37,31.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.444,0.444,0.667],"y":[1,1,1]},"o":{"x":[0.129,0.129,0.333],"y":[0,0,0]},"t":330,"s":[0,0,100]},{"t":566,"s":[395,395,100]}],"ix":6}},"ao":0,"ip":0,"op":1234,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":2,"nm":"Calque 16/petits coeurs.ai","cl":"ai","refId":"image_6","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0],"y":[0]},"t":410,"s":[100]},{"i":{"x":[0.259],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":506,"s":[70.581]},{"t":645,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.444,"y":1},"o":{"x":0.129,"y":0},"t":410,"s":[1500,1500,0],"to":[-24.444,-25.556,0],"ti":[81.667,128.611,0]},{"t":646,"s":[1353.333,1346.667,0]}],"ix":2},"a":{"a":0,"k":[41.5,34,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.444,0.444,0.667],"y":[1,1,1]},"o":{"x":[0.129,0.129,0.333],"y":[0,0,0]},"t":410,"s":[0,0,100]},{"t":645,"s":[395,395,100]}],"ix":6}},"ao":0,"ip":80,"op":1314,"st":80,"bm":0},{"ddd":0,"ind":8,"ty":2,"nm":"Calque 17/petits coeurs.ai","cl":"ai","refId":"image_7","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0],"y":[0]},"t":390,"s":[100]},{"i":{"x":[0.259],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":486,"s":[70.581]},{"t":503,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.444,"y":1},"o":{"x":0.129,"y":0},"t":390,"s":[1500,1500,0],"to":[340.278,-158.333,0],"ti":[-311.944,300,0]},{"t":626,"s":[1761.667,930,0]}],"ix":2},"a":{"a":0,"k":[43.5,37,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.444,0.444,0.667],"y":[1,1,1]},"o":{"x":[0.129,0.129,0.333],"y":[0,0,0]},"t":390,"s":[0,0,100]},{"t":626,"s":[395,395,100]}],"ix":6}},"ao":0,"ip":60,"op":1294,"st":60,"bm":0},{"ddd":0,"ind":9,"ty":2,"nm":"Calque 18/petits coeurs.ai","cl":"ai","refId":"image_8","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0],"y":[0]},"t":348,"s":[100]},{"i":{"x":[0.259],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":444,"s":[70.581]},{"t":586,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.444,"y":1},"o":{"x":0.129,"y":0},"t":348,"s":[1496.667,1498.333,0],"to":[-5.556,-277.778,0],"ti":[-609.444,-140.556,0]},{"t":584,"s":[2153.333,1233.333,0]}],"ix":2},"a":{"a":0,"k":[43,36,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.444,0.444,0.667],"y":[1,1,1]},"o":{"x":[0.129,0.129,0.333],"y":[0,0,0]},"t":348,"s":[0,0,100]},{"t":586,"s":[395,395,100]}],"ix":6}},"ao":0,"ip":18,"op":1252,"st":18,"bm":0},{"ddd":0,"ind":10,"ty":2,"nm":"Calque 3/petits coeurs.ai","cl":"ai","refId":"image_9","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0],"y":[0]},"t":402,"s":[100]},{"i":{"x":[0.259],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":498,"s":[70.581]},{"t":637,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.444,"y":1},"o":{"x":0.129,"y":0},"t":402,"s":[1500,1500,0],"to":[11.389,246.111,0],"ti":[-86.389,90.556,0]},{"t":638,"s":[1743.333,1446.667,0]}],"ix":2},"a":{"a":0,"k":[17,14,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.444,0.444,0.667],"y":[1,1,1]},"o":{"x":[0.129,0.129,0.333],"y":[0,0,0]},"t":402,"s":[0,0,100]},{"t":637,"s":[395,395,100]}],"ix":6}},"ao":0,"ip":72,"op":1306,"st":72,"bm":0},{"ddd":0,"ind":11,"ty":2,"nm":"Calque 4/petits coeurs.ai","cl":"ai","refId":"image_10","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0],"y":[0]},"t":330,"s":[100]},{"i":{"x":[0.259],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":426,"s":[70.581]},{"t":566,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.444,"y":1},"o":{"x":0.129,"y":0},"t":330,"s":[1500,1500,0],"to":[1.389,290.833,0],"ti":[-111.389,-32.5,0]},{"t":566,"s":[1728.333,1655,0]}],"ix":2},"a":{"a":0,"k":[17.5,15.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.444,0.444,0.667],"y":[1,1,1]},"o":{"x":[0.129,0.129,0.333],"y":[0,0,0]},"t":330,"s":[0,0,100]},{"t":566,"s":[395,395,100]}],"ix":6}},"ao":0,"ip":0,"op":1234,"st":0,"bm":0},{"ddd":0,"ind":12,"ty":2,"nm":"Calque 5/petits coeurs.ai","cl":"ai","refId":"image_11","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0],"y":[0]},"t":386,"s":[100]},{"i":{"x":[0.259],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":482,"s":[70.581]},{"t":621,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.444,"y":1},"o":{"x":0.129,"y":0},"t":386,"s":[1500,1500,0],"to":[-4.167,-346.111,0],"ti":[130.833,249.444,0]},{"t":622,"s":[1833.333,1348.333,0]}],"ix":2},"a":{"a":0,"k":[17.5,15.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.444,0.444,0.667],"y":[1,1,1]},"o":{"x":[0.129,0.129,0.333],"y":[0,0,0]},"t":386,"s":[0,0,100]},{"t":621,"s":[395,395,100]}],"ix":6}},"ao":0,"ip":56,"op":1290,"st":56,"bm":0},{"ddd":0,"ind":13,"ty":2,"nm":"Calque 6/petits coeurs.ai","cl":"ai","refId":"image_12","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0],"y":[0]},"t":350,"s":[100]},{"i":{"x":[0.259],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":446,"s":[70.581]},{"t":586,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.444,"y":1},"o":{"x":0.129,"y":0},"t":350,"s":[1498.333,1501.667,0],"to":[5.278,137.5,0],"ti":[-0.278,-39.167,0]},{"t":586,"s":[1500,1736.667,0]}],"ix":2},"a":{"a":0,"k":[23.5,18.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.444,0.444,0.667],"y":[1,1,1]},"o":{"x":[0.129,0.129,0.333],"y":[0,0,0]},"t":350,"s":[0,0,100]},{"t":586,"s":[395,395,100]}],"ix":6}},"ao":0,"ip":20,"op":1254,"st":20,"bm":0},{"ddd":0,"ind":14,"ty":2,"nm":"Calque 7/petits coeurs.ai","cl":"ai","refId":"image_13","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0],"y":[0]},"t":374,"s":[100]},{"i":{"x":[0.259],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":470,"s":[70.581]},{"t":611,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.444,"y":1},"o":{"x":0.129,"y":0},"t":374,"s":[1500,1500,0],"to":[22.222,-262.778,0],"ti":[-80.556,181.111,0]},{"t":610,"s":[1283.333,1123.333,0]}],"ix":2},"a":{"a":0,"k":[23,18.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.444,0.444,0.667],"y":[1,1,1]},"o":{"x":[0.129,0.129,0.333],"y":[0,0,0]},"t":374,"s":[0,0,100]},{"t":611,"s":[395,395,100]}],"ix":6}},"ao":0,"ip":44,"op":1278,"st":44,"bm":0},{"ddd":0,"ind":15,"ty":2,"nm":"Calque 8/petits coeurs.ai","cl":"ai","refId":"image_14","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0],"y":[0]},"t":330,"s":[100]},{"i":{"x":[0.259],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":426,"s":[70.581]},{"t":566,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.444,"y":1},"o":{"x":0.129,"y":0},"t":330,"s":[1500,1500,0],"to":[-30,87.222,0],"ti":[-16.667,-28.889,0]},{"t":566,"s":[1600,1673.333,0]}],"ix":2},"a":{"a":0,"k":[24,19,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.444,0.444,0.667],"y":[1,1,1]},"o":{"x":[0.129,0.129,0.333],"y":[0,0,0]},"t":330,"s":[0,0,100]},{"t":566,"s":[395,395,100]}],"ix":6}},"ao":0,"ip":0,"op":1234,"st":0,"bm":0},{"ddd":0,"ind":16,"ty":2,"nm":"Calque 9/petits coeurs.ai","cl":"ai","refId":"image_15","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0],"y":[0]},"t":420,"s":[100]},{"i":{"x":[0.259],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":516,"s":[70.581]},{"t":657,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.444,"y":1},"o":{"x":0.129,"y":0},"t":420,"s":[1500,1500,0],"to":[12.778,408.056,0],"ti":[11.111,-1.944,0]},{"t":656,"s":[1593.333,1361.667,0]}],"ix":2},"a":{"a":0,"k":[25.5,20.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.444,0.444,0.667],"y":[1,1,1]},"o":{"x":[0.129,0.129,0.333],"y":[0,0,0]},"t":420,"s":[0,0,100]},{"t":657,"s":[395,395,100]}],"ix":6}},"ao":0,"ip":90,"op":1324,"st":90,"bm":0}]},{"id":"comp_3","layers":[{"ddd":0,"ind":1,"ty":2,"nm":"main droite/main de priere.ai","cl":"ai","refId":"image_16","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.999],"y":[1]},"o":{"x":[0.46],"y":[0]},"t":250,"s":[0]},{"t":380,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.999,"y":1},"o":{"x":0.46,"y":0},"t":250,"s":[854,856.333,0],"to":[12,280.667,0],"ti":[-435.667,-18,0]},{"t":380,"s":[1458,1544,0]}],"ix":2},"a":{"a":0,"k":[29,83,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.999,0.999,0.999],"y":[1,1,1]},"o":{"x":[0.46,0.46,0.46],"y":[0,0,0]},"t":250,"s":[310,310,100]},{"t":380,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":1234,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":2,"nm":"main gauche/main de priere.ai","cl":"ai","refId":"image_17","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.999],"y":[1]},"o":{"x":[0.46],"y":[0]},"t":250,"s":[0]},{"t":380,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.999,"y":1},"o":{"x":0.46,"y":0},"t":250,"s":[1975,821.667,0],"to":[-1.667,321.333,0],"ti":[365.333,-5.667,0]},{"t":380,"s":[1534,1544,0]}],"ix":2},"a":{"a":0,"k":[32,83,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.999,0.999,0.999],"y":[1,1,1]},"o":{"x":[0.46,0.46,0.46],"y":[0,0,0]},"t":250,"s":[310,310,100]},{"t":380,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":1234,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"chapelet","refId":"comp_0","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.877],"y":[0.619]},"o":{"x":[0.23],"y":[0]},"t":516,"s":[100]},{"t":686,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1500,1428,0],"ix":2},"a":{"a":0,"k":[1500,1500,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.92,0.92,0.91],"y":[-0.117,-0.117,1]},"o":{"x":[0.23,0.23,0.23],"y":[0,0,0]},"t":516,"s":[100,100,100]},{"t":686,"s":[354.999,354.999,100]}],"ix":6}},"ao":0,"w":3000,"h":3000,"ip":1,"op":1201,"st":1,"bm":0},{"ddd":0,"ind":2,"ty":0,"nm":"coeur","refId":"comp_2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1500,1500,0],"ix":2},"a":{"a":0,"k":[1500,1500,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":3000,"h":3000,"ip":308,"op":1508,"st":308,"bm":0},{"ddd":0,"ind":3,"ty":0,"nm":"main","refId":"comp_3","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":530,"s":[0]},{"i":{"x":[0.999],"y":[1]},"o":{"x":[0.69],"y":[0]},"t":723,"s":[100]},{"t":807,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1500,1500,0],"ix":2},"a":{"a":0,"k":[1500,1500,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":3000,"h":3000,"ip":276,"op":1476,"st":276,"bm":0}],"markers":[{"tm":272,"cm":"1","dr":0}]}
================================================
FILE: assets/content.md
================================================
---
__Advertisement :)__
- __[pica](https://nodeca.github.io/pica/demo/)__ - high quality and fast image
resize in browser.
- __[babelfish](https://github.com/nodeca/babelfish/)__ - developer friendly
i18n with plurals support and easy syntax.
You will like those projects!
---
# h1 Heading 8-)
## h2 Heading
### h3 Heading
#### h4 Heading
##### h5 Heading
###### h6 Heading
## Horizontal Rules
___
---
***
## Typographic replacements
Enable typographer option to see result.
(c) (C) (r) (R) (tm) (TM) (p) (P) +-
test.. test... test..... test?..... test!....
!!!!!! ???? ,, -- ---
"Smartypants, double quotes" and 'single quotes'
## Emphasis
**This is bold text**
__This is bold text__
*This is italic text*
_This is italic text_
~~Strikethrough~~
## Blockquotes
> Blockquotes can also be nested...
>> ...by using additional greater-than signs right next to each other...
> > > ...or with spaces between arrows.
## Lists
Unordered
+ Create a list by starting a line with `+`, `-`, or `*`
+ Sub-lists are made by indenting 2 spaces:
- Marker character change forces new list start:
* Ac tristique libero volutpat at
+ Facilisis in pretium nisl aliquet
- Nulla volutpat aliquam velit
+ Very easy!
Ordered
1. Lorem ipsum dolor sit amet
2. Consectetur adipiscing elit
3. Integer molestie lorem at massa
1. You can use sequential numbers...
1. ...or keep all the numbers as `1.`
Start numbering with offset:
57. foo
1. bar
## Code
Inline `code`
Indented code
// Some comments
line 1 of code
line 2 of code
line 3 of code
Block code "fences"
```
Sample text here...
```
Syntax highlighting
``` js
var foo = function (bar) {
return bar++;
};
console.log(foo(5));
```
## Tables
| Option | Description |
| ------ | ----------- |
| data | path to data files to supply the data that will be passed into templates. |
| engine | engine to be used for processing templates. Handlebars is the default. |
| ext | extension to be used for dest files. |
Right aligned columns
| Option | Description |
| ------:| -----------:|
| data | path to data files to supply the data that will be passed into templates. |
| engine | engine to be used for processing templates. Handlebars is the default. |
| ext | extension to be used for dest files. |
## Links
[link text](http://dev.nodeca.com)
[link with title](http://nodeca.github.io/pica/demo/ "title text!")
Autoconverted link https://github.com/nodeca/pica (enable linkify to see)
## Images


Like links, Images also have a footnote style syntax
![Alt text][id]
With a reference later in the document defining the URL location:
[id]: https://octodex.github.com/images/dojocat.jpg "The Dojocat"
## Plugins
The killer feature of `markdown-it` is very effective support of
[syntax plugins](https://www.npmjs.org/browse/keyword/markdown-it-plugin).
### [Emojies](https://github.com/markdown-it/markdown-it-emoji)
> Classic markup: :wink: :cry: :laughing: :yum:
>
> Shortcuts (emoticons): :-) :-( 8-) ;)
see [how to change output](https://github.com/markdown-it/markdown-it-emoji#change-output) with twemoji.
### [Subscript](https://github.com/markdown-it/markdown-it-sub) / [Superscript](https://github.com/markdown-it/markdown-it-sup)
- 19^th^
- H~2~O
### [\<ins>](https://github.com/markdown-it/markdown-it-ins)
++Inserted text++
### [\<mark>](https://github.com/markdown-it/markdown-it-mark)
==Marked text==
### [Footnotes](https://github.com/markdown-it/markdown-it-footnote)
Footnote 1 link[^first].
Footnote 2 link[^second].
Inline footnote^[Text of inline footnote] definition.
Duplicated footnote reference[^second].
[^first]: Footnote **can have markup**
and multiple paragraphs.
[^second]: Footnote text.
### [Definition lists](https://github.com/markdown-it/markdown-it-deflist)
Term 1
: Definition 1
with lazy continuation.
Term 2 with *inline markup*
: Definition 2
{ some code, part of Definition 2 }
Third paragraph of definition 2.
_Compact style:_
Term 1
~ Definition 1
Term 2
~ Definition 2a
~ Definition 2b
### [Abbreviations](https://github.com/markdown-it/markdown-it-abbr)
This is HTML abbreviation example.
It converts "HTML", but keep intact partial entries like "xxxHTMLyyy" and so on.
*[HTML]: Hyper Text Markup Language
### [Custom containers](https://github.com/markdown-it/markdown-it-container)
::: warning
*here be dragons*
:::
================================================
FILE: assets/qui_sommes_nous.md
================================================

### Qui sommes nous?
## Les Sœurs Dominicaines de Notre-Dame de la Délivrande à Madagascar
**Un charisme au service de la communauté**

Nous sommes les Sœurs Dominicaines de Notre-Dame de la Délivrande, une congrégation religieuse catholique fondée en 1811. Notre charisme se base sur quatre piliers: l'étude, la prière, la prédication et la vie fraternelle. Guidées par ces valeurs, nous nous investissons dans divers domaines pour servir les populations locales et contribuer au développement social et spirituel des communautés.
**Arrivée à Madagascar et implantation à Antsirabe**
En 2008, **nous** avons répondu à l'appel de l'Église catholique de Madagascar et **avons** établi une communauté dans le quartier de Saharoaloha à Antsirabe. Depuis lors, **nous** nous activons dans plusieurs œuvres sociales et pastorales, apportant **notre** contribution au bien-être de la population locale.
**Œuvres et actions multiples**

Le champ d'action des Sœurs Dominicaines à Madagascar est vaste et diversifié. **Nous** gérons une cantine qui offre des repas quotidiens aux enfants défavorisés. **Nous** nous impliquons également dans la pastorale de la paroisse de Bevokatra, de la Chapelle militaire et de Saint Luc Ambohimena.
Soucieuses du développement holistique de la communauté, **nous** gérons également une ferme qui assure la production de denrées alimentaires et une source de revenus. **Nous** dirigeons aussi un dispensaire qui offre des soins médicaux aux populations démunies.

L'éducation est un autre domaine d'intervention important pour la congrégation. **Nous** avons mis en place une école de la seconde chance pour les jeunes en décrochage scolaire et parrainons une dizaine d'enfants pour leur assurer une éducation et un avenir meilleur.
**Une communauté dynamique et en croissance**
La communauté des Sœurs Dominicaines à Madagascar est composée de 13 sœurs malgaches et de 3 sœurs martiniquaises. **Nous sommes** accompagnées par 43 jeunes en formation qui aspirent à suivre **notre** exemple et à embrasser la vie religieuse. Cette communauté dynamique et en croissance est un véritable pilier pour la communauté locale et un symbole de l'engagement de l'Église catholique au service des plus démunis.
**Conclusion**
Les Sœurs Dominicaines de Notre-Dame de la Délivrande constituent une force vive dans la communauté d'Antsirabe. Par **nos** œuvres multiples et **notre** engagement sans faille, **nous** contribuons de manière significative au développement social, éducatif et spirituel de la population. **Notre** présence est un précieux atout pour la ville et un modèle d'inspiration pour les générations futures.
**Pour plus d'informations:**
- Site web de la congrégation: <URL non valide supprimée>
- Page Facebook de la communauté à Madagascar: <URL non valide supprimée>
================================================
FILE: assets/sample.md
================================================
---
__Advertisement :)__
- __[pica](https://nodeca.github.io/pica/demo/)__ - high quality and fast image
resize in browser.
- __[babelfish](https://github.com/nodeca/babelfish/)__ - developer friendly
i18n with plurals support and easy syntax.
You will like those projects!
---
# h1 Heading 8-)
## h2 Heading
### h3 Heading
#### h4 Heading
##### h5 Heading
###### h6 Heading
## Horizontal Rules
___
---
***
## Typographic replacements
Enable typographer option to see result.
(c) (C) (r) (R) (tm) (TM) (p) (P) +-
test.. test... test..... test?..... test!....
!!!!!! ???? ,, -- ---
"Smartypants, double quotes" and 'single quotes'
## Emphasis
**This is bold text**
__This is bold text__
*This is italic text*
_This is italic text_
~~Strikethrough~~
## Blockquotes
> Blockquotes can also be nested...
>> ...by using additional greater-than signs right next to each other...
> > > ...or with spaces between arrows.
## Lists
Unordered
+ Create a list by starting a line with `+`, `-`, or `*`
+ Sub-lists are made by indenting 2 spaces:
- Marker character change forces new list start:
* Ac tristique libero volutpat at
+ Facilisis in pretium nisl aliquet
- Nulla volutpat aliquam velit
+ Very easy!
Ordered
1. Lorem ipsum dolor sit amet
2. Consectetur adipiscing elit
3. Integer molestie lorem at massa
1. You can use sequential numbers...
1. ...or keep all the numbers as `1.`
Start numbering with offset:
57. foo
1. bar
## Code
Inline `code`
Indented code
// Some comments
line 1 of code
line 2 of code
line 3 of code
Block code "fences"
```
Sample text here...
```
Syntax highlighting
``` js
var foo = function (bar) {
return bar++;
};
console.log(foo(5));
```
## Tables
| Option | Description |
| ------ | ----------- |
| data | path to data files to supply the data that will be passed into templates. |
| engine | engine to be used for processing templates. Handlebars is the default. |
| ext | extension to be used for dest files. |
Right aligned columns
| Option | Description |
| ------:| -----------:|
| data | path to data files to supply the data that will be passed into templates. |
| engine | engine to be used for processing templates. Handlebars is the default. |
| ext | extension to be used for dest files. |
## Links
[link text](http://dev.nodeca.com)
[link with title](http://nodeca.github.io/pica/demo/ "title text!")
Autoconverted link https://github.com/nodeca/pica (enable linkify to see)
## Images


Like links, Images also have a footnote style syntax
![Alt text][id]
With a reference later in the document defining the URL location:
[id]: https://octodex.github.com/images/dojocat.jpg "The Dojocat"
## Plugins
The killer feature of `markdown-it` is very effective support of
[syntax plugins](https://www.npmjs.org/browse/keyword/markdown-it-plugin).
### [Emojies](https://github.com/markdown-it/markdown-it-emoji)
> Classic markup: :wink: :cry: :laughing: :yum:
>
> Shortcuts (emoticons): :-) :-( 8-) ;)
see [how to change output](https://github.com/markdown-it/markdown-it-emoji#change-output) with twemoji.
### [Subscript](https://github.com/markdown-it/markdown-it-sub) / [Superscript](https://github.com/markdown-it/markdown-it-sup)
- 19^th^
- H~2~O
### [\<ins>](https://github.com/markdown-it/markdown-it-ins)
++Inserted text++
### [\<mark>](https://github.com/markdown-it/markdown-it-mark)
==Marked text==
### [Footnotes](https://github.com/markdown-it/markdown-it-footnote)
Footnote 1 link[^first].
Footnote 2 link[^second].
Inline footnote^[Text of inline footnote] definition.
Duplicated footnote reference[^second].
[^first]: Footnote **can have markup**
and multiple paragraphs.
[^second]: Footnote text.
### [Definition lists](https://github.com/markdown-it/markdown-it-deflist)
Term 1
: Definition 1
with lazy continuation.
Term 2 with *inline markup*
: Definition 2
{ some code, part of Definition 2 }
Third paragraph of definition 2.
_Compact style:_
Term 1
~ Definition 1
Term 2
~ Definition 2a
~ Definition 2b
### [Abbreviations](https://github.com/markdown-it/markdown-it-abbr)
This is HTML abbreviation example.
It converts "HTML", but keep intact partial entries like "xxxHTMLyyy" and so on.
*[HTML]: Hyper Text Markup Language
### [Custom containers](https://github.com/markdown-it/markdown-it-container)
::: warning
*here be dragons*
:::
================================================
FILE: cors.json
================================================
[
{
"origin":["*"],
"method":["GET"],
"maxAgeSeconds": 3600
}
]
================================================
FILE: dap.ps1
================================================
# Simple powershell script for automating build and deploy in the [avant_premiere] channel.
# flutter build web --release
# firebase hosting:channel:deploy avant_premiere
D:\dev\flutter\bin\cache\dart-sdk\bin\dart.exe --disable-dart-dev D:\dev\flutter\bin\cache\dart-sdk\bin\snapshots\frontend_server.dart.snapshot --sdk-root D:\dev\flutter\bin\cache\flutter_web_sdk/ --incremental --target=dartdevc --experimental-emit-debug-metadata -DFLUTTER_WEB_AUTO_DETECT=true -DFLUTTER_WEB_CANVASKIT_URL=https://www.gstatic.com/flutter-canvaskit/3f3e560236539b7e2702f5ac790b2a4691b32d49/ --output-dill C:\Users\JOSEPH~1\AppData\Local\Temp\flutter_tools.a5149c9d\flutter_tool.b6134d75\app.dill --packages D:\Projects\ahl\.dart_tool\package_config.json -Ddart.vm.profile=false -Ddart.vm.product=false --enable-asserts --track-widget-creation --filesystem-root C:\Users\JOSEPH~1\AppData\Local\Temp\flutter_tools.a5149c9d\flutter_tools.e8b57183 --filesystem-scheme org-dartlang-app --initialize-from-dill build\a072907fec955372e484c180f3334617.cache.dill.track.dill --platform file:///D:/dev/flutter/bin/cache/flutter_web_sdk/kernel/ddc_outline_sound.dill --verbosity=error --sound-null-safety
================================================
FILE: devtools_options.yaml
================================================
extensions:
- provider: true
================================================
FILE: firebase.json
================================================
{
"hosting": {
"public": "build/web/",
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
],
"rewrites": [
{
"source": "**",
"destination": "/index.html"
}
]
},
"emulators": {
"auth": {
"port": 9099
},
"firestore": {
"port": 46561
},
"hosting": {
"port": 5000
},
"storage": {
"port": 9199
},
"ui": {
"enabled": true
},
"singleProjectMode": true
},
"storage": {
"rules": "storage.rules"
},
"firestore": {
"rules": "firestore.rules",
"indexes": "firestore.indexes.json"
}
}
================================================
FILE: firestore.indexes.json
================================================
{
"indexes": [],
"fieldOverrides": []
}
================================================
FILE: firestore.rules
================================================
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read: if true;
}
match /users/{document=**}{
allow write: if true;
}
match /prayer_requests/{document=**}{
allow write: if true;
allow read: if true;
}
}
}
================================================
FILE: functions/main.py
================================================
# Welcome to Cloud Functions for Firebase for Python!
# To get started, simply uncomment the below code or create your own.
# Deploy with `firebase deploy`
from firebase_functions import https_fn
from firebase_admin import initialize_app
# initialize_app()
#
#
# @https_fn.on_request()
# def on_request_example(req: https_fn.Request) -> https_fn.Response:
# return https_fn.Response("Hello world!")
================================================
FILE: functions/requirements.txt
================================================
firebase_functions~=0.1.0
================================================
FILE: l10n.yaml
================================================
arb-dir: lib/src/localization
template-arb-file: app_fr.arb
output-localization-file: app_localizations.dart
untranslated-messages-file: untranslated_message.txt
================================================
FILE: lib/ahl_barrel.dart
================================================
library;
import 'package:ahl/src/utils/breakpoint_resolver.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
part 'src/assets/assets.dart';
part 'src/constants/constants.dart';
================================================
FILE: lib/firebase_options.dart
================================================
// File generated by FlutterFire CLI.
// ignore_for_file: lines_longer_than_80_chars, avoid_classes_with_only_static_members
import 'package:firebase_core/firebase_core.dart' show FirebaseOptions;
import 'package:flutter/foundation.dart'
show defaultTargetPlatform, kIsWeb, TargetPlatform;
/// Default [FirebaseOptions] for use with your Firebase apps.
///
/// Example:
/// ```dart
/// import 'firebase_options.dart';
/// // ...
/// await Firebase.initializeApp(
/// options: DefaultFirebaseOptions.currentPlatform,
/// );
/// ```
class DefaultFirebaseOptions {
static FirebaseOptions get currentPlatform {
if (kIsWeb) {
return web;
}
switch (defaultTargetPlatform) {
case TargetPlatform.android:
throw UnsupportedError(
'DefaultFirebaseOptions have not been configured for android - '
'you can reconfigure this by running the FlutterFire CLI again.',
);
case TargetPlatform.iOS:
throw UnsupportedError(
'DefaultFirebaseOptions have not been configured for ios - '
'you can reconfigure this by running the FlutterFire CLI again.',
);
case TargetPlatform.macOS:
throw UnsupportedError(
'DefaultFirebaseOptions have not been configured for macos - '
'you can reconfigure this by running the FlutterFire CLI again.',
);
case TargetPlatform.windows:
throw UnsupportedError(
'DefaultFirebaseOptions have not been configured for windows - '
'you can reconfigure this by running the FlutterFire CLI again.',
);
case TargetPlatform.linux:
throw UnsupportedError(
'DefaultFirebaseOptions have not been configured for linux - '
'you can reconfigure this by running the FlutterFire CLI again.',
);
default:
throw UnsupportedError(
'DefaultFirebaseOptions are not supported for this platform.',
);
}
}
static const FirebaseOptions web = FirebaseOptions(
apiKey: 'AIzaSyB3NGL68GwU26EZyhuK1TgApgyjed6Xmuk',
appId: '1:452957179496:web:511c2c7b5acddca9e8b5dd',
messagingSenderId: '452957179496',
projectId: 'aujourdhuilavenir',
authDomain: 'aujourdhuilavenir.firebaseapp.com',
storageBucket: 'aujourdhuilavenir.appspot.com',
measurementId: 'G-RJLCGV14LF',
);
}
================================================
FILE: lib/main.dart
================================================
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_web_plugins/url_strategy.dart';
import 'package:lottie/lottie.dart';
import 'package:provider/provider.dart';
import 'package:meta_seo/meta_seo.dart';
import 'src/app.dart';
import 'src/firebase_constants.dart';
import 'src/settings/settings_controller.dart';
import 'src/settings/settings_service.dart';
import 'src/theme/theme.dart';
// test on github auto deploy
void main() async {
/// Meta Seo Setup
if(kIsWeb){
MetaSEO().config();
}
// ensure flutter is initialized
// WidgetsFlutterBinding.ensureInitialized();
// Make the app url based
usePathUrlStrategy();
// Set up the SettingsController, which will glue user settings to multiple
// Flutter Widgets.
final settingsController = SettingsController(SettingsService());
// Load the user's preferred theme while the splash screen is displayed.
// This prevents a sudden theme change when the app is first displayed.
settingsController.loadSettings();
// Run the app and pass in the SettingsController. The app listens to the
// SettingsController for changes, then passes it further down to the
// SettingsView.
// here we go with firebase setup.
// It is better to await this flutter app, but when working offline, it makes
// the app not loading.
runApp(
ChangeNotifierProvider.value(
value: settingsController,
child: FutureBuilder(
future: firebaseApp,
builder: (context, snapshot) {
if (snapshot.hasData) {
return MyApp(
settingsController: settingsController,
);
} else {
return Container(
color: AhlTheme.background,
child: LottieBuilder.asset(
'animations/loading.json',
repeat: true,),
);
}
},
),
),
);
}
================================================
FILE: lib/src/app.dart
================================================
import 'package:ahl/src/article_view/view/article_view.dart';
import 'package:ahl/src/pages/novena_page/novena_page.dart';
import 'package:ahl/src/pages/projects/project_page_view.dart';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:firebase_article/firebase_article.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:go_router/go_router.dart';
import 'package:ahl/src/pages/homepage/donation/donation_page.dart';
import 'package:ahl/src/pages/prayers/prayers_page.dart';
import 'package:ahl/src/pages/projects/projects_page.dart';
import 'package:ahl/src/pages/rosary/rosary_page.dart';
import 'package:ahl/src/pages/who_we_are/who_we_are.dart';
import 'package:ahl/src/project_space/bloc.dart';
import 'package:ahl/src/article_view/bloc/bloc.dart';
import 'firebase_constants.dart';
import 'pages/homepage/homepage.dart';
import 'theme/theme.dart';
import 'settings/settings_controller.dart';
/// The route widget of the website.
class MyApp extends StatefulWidget {
const MyApp({
super.key,
required this.settingsController,
this.home,
});
final SettingsController settingsController;
final Widget? home;
@override
State<MyApp> createState() => _MyAppState();
static void setLocal(BuildContext context, Locale newLocale) async {
_MyAppState? state = context.findAncestorStateOfType<_MyAppState>();
state?.changeLanguage(newLocale);
}
}
class _MyAppState extends State<MyApp> {
Locale? _locale = const Locale('fr', 'FR');
late SettingsController settingsController;
final GoRouter router = GoRouter(
routes: [
GoRoute(
path: '/',
name: HomePage.routeName,
builder: (_, __) => const HomePage(),
routes: [
/// Project
GoRoute(
path: ProjectsPage.routeName,
name: ProjectsPage.routeName,
builder: (_, __) => const ProjectsPage(),
routes: [
GoRoute(
path: ":projectId",
// name: ProjectsPage.routeName,
builder: (context, state) {
// get article id from path
String? projectId = state.pathParameters["projectId"];
//? Not working
// when no project isn't specified, go to the all project.
// if (state.pathParameters.isEmpty || articleId == null) {
// return const ProjectsPage();
// } else {
// context.read<ProjectBloc>().add(
// GetArticleByIdEvent(id: articleId),
// );
// return BlocBuilder<ProjectBloc, ArticleState<Article>>(
// builder: (context, state) {
// // get project
// var project = state.articles?[articleId];
// if (project == null) {
// return const ProjectsPage();
// } else {
// return ProjectPageView(project: project);
// }
// },
// );
// }
// Passing the article name to ProjectPageView instead
if (projectId != null && projectId.trim() != "") {
return ProjectPageView(
projectId: projectId,
);
} else {
return const ProjectsPage();
}
},
),
],
),
// GoRoute(
// path: ArticleView.routeName,
// builder: (_, __) => const ProjectsPage(),
// routes: [
// Articles
GoRoute(
name: ArticleContentPage.routeName,
path: "${ArticleContentPage.routeName}/:articleId",
// name: ProjectsPage.routeName,
builder: (context, state) {
// get article id from path
String? articleId = state.pathParameters["articleId"];
// Passing the article name to ProjectPageView instead
if (state.extra != null) {
return ArticleContentPage(
article: state.extra as Article,
);
} else /*if (articleId != null && articleId.trim() != "")*/ {
return ArticleContentPage.fromId(articleId: articleId);
}
// else {
// return const ArticlesPage();
// }
},
),
// Novena
GoRoute(
name: NovenaPage.routeName,
path: "${NovenaPage.routeName}/:novenaId",
// name: ProjectsPage.routeName,
builder: (context, state) {
// get article id from path
String? articleId = state.pathParameters["novenaId"];
// Passing the article name to ProjectPageView instead
if (state.extra != null) {
return NovenaPage(
novena: state.extra as Article,
);
} else /*if (articleId != null && articleId.trim() != "")*/ {
return NovenaPage.fromId(novenaId: articleId);
}
// else {
// return const ArticlesPage();
// }
},
),
// ],
// ),
// Prayers
GoRoute(
path: PrayersPage.routeName,
name: PrayersPage.routeName,
builder: (_, __) => const PrayersPage(),
routes: [
GoRoute(
path: RosaryPage.routeName,
name: RosaryPage.routeName,
builder: (_, __) => const RosaryPage(),
),
],
),
// Who we are
GoRoute(
path: WhoWeArePage.routeName,
name: WhoWeArePage.routeName,
builder: (_, __) => const WhoWeArePage(),
),
//Donnation Page
GoRoute(
path: DonationPage.routeName,
name: DonationPage.routeName,
builder: (_, __) => const DonationPage(),
),
],
),
],
);
void changeLanguage(Locale locale) {
setState(
() {
_locale = locale;
settingsController.updateLocales([locale]);
},
);
}
@override
void initState() {
settingsController = widget.settingsController;
super.initState();
}
@override
Widget build(BuildContext context) {
// Glue the SettingsController to the MaterialApp.
//
// The ListenableBuilder Widget listens to the SettingsController for changes.
// Whenever the user updates their settings, the MaterialApp is rebuilt.
return MultiBlocProvider(
providers: [
BlocProvider(
create: (context) => ArticleBloc(
repo: ArticlesRepository<Article>(firestoreInstance: firestore),
),
),
BlocProvider(
create: (context) => ProjectBloc(
firebaseFirestore: firestore,
),
),
],
child: ListenableBuilder(
listenable: settingsController,
builder: (BuildContext context, Widget? child) {
return LayoutBuilder(
builder: (context, constraints) => MaterialApp.router(
// Providing a restorationScopeId allows the Navigator built by the
// MaterialApp to restore the navigation stack when a user leaves and
// returns to the app after it has been killed while running in the
// background.
restorationScopeId: 'ahl',
// Provide the generated AppLocalizations to the MaterialApp. This
// allows descendant Widgets to display the correct translations
// depending on the user's locale.
localizationsDelegates: const [
AppLocalizations.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: AppLocalizations.supportedLocales,
locale: _locale,
// Use AppLocalizations to configure the correct application title
// depending on the user's locale.
//
// The appTitle is defined in .arb files found in the localization
// directory.
onGenerateTitle: (BuildContext context) =>
AppLocalizations.of(context)!.appTitle,
// Define a light and dark color theme. Then, read the user's
// preferred ThemeMode (light, dark, or system default) from the
// SettingsController to display the correct theme.
theme: AhlTheme.lightTheme(
MediaQuery.maybeOf(context)!.size.width,
),
darkTheme: ThemeData.dark(
useMaterial3: true,
),
themeMode: settingsController.themeMode,
// Define a function to handle named routes in order to support
// Flutter web url navigation and deep linking.
// onGenerateRoute: (RouteSettings routeSettings) {
// log("Route settings is $routeSettings");
// return MaterialPageRoute<void>(
// settings: routeSettings,
// builder: (BuildContext context) {
// return FutureBuilder(
// future: firebaseApp,
// builder: (context, snapshot) {
// if (snapshot.hasData) {
// switch (routeSettings.name) {
// case SettingsView.routeName:
// return SettingsView(
// controller: settingsController);
// case SampleItemDetailsView.routeName:
// return const SampleItemDetailsView();
// case HomePage.routeName:
// return HomePage();
// case ProjectsPage.routeName:
// return const ProjectsPage();
// case PrayersPage.routeName:
// return const PrayersPage();
// case RosaryPage.routeName:
// return const RosaryPage();
// case SaintsPage.routeName:
// return const SaintsPage();
// case ArticlesPage.routeName:
// return const ArticlesPage();
// case WhoWeArePage.routeName:
// return const WhoWeArePage();
// case DonationPage.routeName:
// return const DonationPage();
// // todo: add 400 not found page
// default:
// return widget.home ?? HomePage();
// }
// } else {
// return Scaffold(
// body: LoadingView(
// work: firebaseApp,
// ),
// );
// }
// },
// );
// },
// );
// },
routerConfig: router,
),
);
},
),
);
}
}
================================================
FILE: lib/src/article_view/bloc/bloc.dart
================================================
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_article/firebase_article.dart' as fire_art;
import 'package:firebase_article/firebase_article.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'dart:developer' as developer;
import '../state/state.dart';
import '../event/event.dart';
class ArticleBloc extends Bloc<ArticleEvent, ArticleState<fire_art.Article>> {
ArticleBloc({required fire_art.ArticlesRepository<fire_art.Article> repo})
: _repo = repo,
super(const ArticleState(
articles: null,
status: ArticleStatus.initial,
error: null,
)) {
on<GetArticleByIdEvent>(_onGetArticleById);
on<GetArticleByPathEvent>(_onGetArticleByPath);
on<GetHighlightArticleEvent>(_onGetHighlightedArticle);
on<GetArticleListEvent>(_onGetArticleListEvent);
on<InitializeArticleBlocEvent>(_onInitializeArticleBlocEvent);
add(InitializeArticleBlocEvent());
on<GetHighlightPathEvent>(_onGetHighlightPath);
on<GetHighlightCollectionEvent>(_onGetHighlightCollection);
}
ArticleBloc.inCollection(
{required String collection, required FirebaseFirestore firestore})
: _repo = fire_art.ArticlesRepository<fire_art.Article>(
firestoreInstance: firestore, collection: collection),
super(const ArticleState(
articles: null,
status: ArticleStatus.initial,
error: null,
)) {
on<GetArticleByIdEvent>(_onGetArticleById);
on<GetArticleByPathEvent>(_onGetArticleByPath);
on<GetHighlightArticleEvent>(_onGetHighlightedArticle);
on<GetArticleListEvent>(_onGetArticleListEvent);
on<InitializeArticleBlocEvent>(_onInitializeArticleBlocEvent);
on<GetHighlightPathEvent>(_onGetHighlightPath);
on<GetHighlightCollectionEvent>(_onGetHighlightCollection);
add(InitializeArticleBlocEvent());
}
final fire_art.ArticlesRepository<fire_art.Article> _repo;
void _onGetHighlightPath(GetHighlightPathEvent event, Emitter emit) async {
emit(
state.copyWith(
status: ArticleStatus.initial,
),
);
var highlightPath = await _repo.getHighlightedPath();
emit(
state.copyWith(
status: ArticleStatus.succeed,
highlightPath: highlightPath,
),
);
}
void _onGetHighlightCollection(
GetHighlightCollectionEvent event, Emitter emit) async {
emit(
state.copyWith(
status: ArticleStatus.initial,
),
);
var highlightCollection = await _repo.getHighlightedCollection();
emit(
state.copyWith(
status: ArticleStatus.succeed,
highlightCollection: highlightCollection,
),
);
}
void _onInitializeArticleBlocEvent(
InitializeArticleBlocEvent event,
Emitter emit,
) {
emit(state.copyWith(
status: ArticleStatus.initial,
articles: null,
error: null,
));
}
void _onGetArticleById(GetArticleByIdEvent event, Emitter emit) async {
emit(
state.copyWith(
status: ArticleStatus.initial,
error: null,
),
);
Object? error;
fire_art.Article? result;
try {
if (event.collection == null) {
result = await _repo.getArticleById(articleId: event.id!);
} else {
result = await _repo.getArticleByPath(
path: "/${event.collection}/${event.id}");
}
} catch (e) {
error = e;
}
if (result != null) {
emit(
state.copyWith(
status: ArticleStatus.succeed,
articles: {result.id: result},
error: null,
),
);
} else {
emit(
state.copyWith(
status: ArticleStatus.failed,
articles: null,
error: error,
),
);
}
}
void _onGetArticleByPath(GetArticleByPathEvent event, Emitter emit) async {
Object? error;
fire_art.Article? result;
try {
if (event.collection == null) {
if (event.path == null) {
result = await _repo.getArticleById(articleId: event.id!);
} else {
result = await _repo.getArticleByPath(path: event.path!);
}
} else {
result = await _repo.getArticleByPath(
path: "/${event.collection}/${event.id}");
}
} catch (e) {
error = e;
}
if (result != null) {
emit(
state.copyWith(
status: ArticleStatus.succeed,
articles: {result.id: result},
error: null,
),
);
} else {
emit(
state.copyWith(
status: ArticleStatus.failed,
articles: null,
error: error,
),
);
}
}
void _onGetHighlightedArticle(
GetHighlightArticleEvent event, Emitter emit) async {
Object? error;
fire_art.Article? result;
emit(state.copyWith(
status: ArticleStatus.initial,
));
try {
result = await _repo.getHighlighted();
if (result != null) {
emit(
state.copyWith(
status: ArticleStatus.succeed,
articles: {result.id: result},
error: null,
highlightArticle: result,
),
);
developer.log('[ArticleBloc]: state: $state');
}
} catch (e) {
error = 'Error getting highlight article : $e';
if (result == null) {
emit(state.copyWith(
status: ArticleStatus.failed,
error: error,
articles: null,
// highlightArticle: null,
));
}
}
}
void _onGetArticleListEvent(GetArticleListEvent event, Emitter emit) async {
try {
List<fire_art.Article>? articles;
if (event.ids != null) {
articles = await _repo.getArticlesSubListByIds(event.ids!)
as List<fire_art.Article>;
}
if (event.foldLength != null) {
articles?.addAll(
await _repo.getArticlesSubListByLength(event.foldLength!)
as List<fire_art.Article>);
}
// build map articles
Map<String, Article>? mapArticles = (articles != null)
? {for (var article in articles) article.id: article}
: null;
emit(
state.copyWith(
articles: mapArticles, status: ArticleStatus.succeed, error: null),
);
} catch (e) {
developer.log('[Article Bloc] Error getting article list: $e');
}
}
}
================================================
FILE: lib/src/article_view/data/data.dart
================================================
// A barrel that contain every data implementation
================================================
FILE: lib/src/article_view/event/event.dart
================================================
final class ArticleEvent {
const ArticleEvent({this.id});
final String? id;
}
final class GetHighlightArticleEvent extends ArticleEvent {
const GetHighlightArticleEvent() : super(id: null);
}
final class GetArticleByIdEvent extends ArticleEvent {
const GetArticleByIdEvent({
required super.id,
this.collection,
});
final String? collection;
}
final class GetArticleByPathEvent extends ArticleEvent {
const GetArticleByPathEvent.fromCollection({
required super.id,
this.collection,
}): path = null;
const GetArticleByPathEvent({required this.path}):collection = null;
final String? path;
final String? collection;
}
final class GetHighlightPathEvent extends ArticleEvent {
const GetHighlightPathEvent();
}
final class GetHighlightCollectionEvent extends ArticleEvent {
const GetHighlightCollectionEvent();
}
/// Request A list of article from the server.
final class GetArticleListEvent extends ArticleEvent {
const GetArticleListEvent({
this.foldLength = 1,
this.ids,
}) : assert(
ids == null && foldLength != null ||
ids != null && foldLength == null,
'ids and [foldLength] can\'t be provided at the same time',
),
super(
id: null,
);
final int? foldLength;
final List<String>? ids;
}
final class InitializeArticleBlocEvent extends ArticleEvent {
InitializeArticleBlocEvent() : super(id: null);
}
================================================
FILE: lib/src/article_view/state/state.dart
================================================
import 'package:equatable/equatable.dart';
import 'package:firebase_article/firebase_article.dart';
enum ArticleStatus {
initial,
/// when no request has sent yet
succeed,
/// when a request has be done successfully
failed,
/// when a request
}
class ArticleState<T extends Article> extends Equatable {
const ArticleState({
this.status = ArticleStatus.initial,
this.articles,
this.error,
this.highlightArticle,
this.highlightCollection,
this.highlightPath,
});
final ArticleStatus status;
final Map<String, T>? articles;
final Object? error;
final T? highlightArticle;
final String? highlightPath;
final String? highlightCollection;
ArticleState<T> copyWith({
ArticleStatus? status,
Map<String, T>? articles,
Object? error,
T? highlightArticle,
String? highlightPath,
String? highlightCollection,
}) {
Map<String, T> newArticles = {};
if (articles != null) {
newArticles.addAll(articles);
}
if (this.articles != null) {
newArticles.addAll(this.articles!);
}
return ArticleState<T>(
status: status ?? this.status,
articles: newArticles,
error: error ?? this.error,
highlightArticle: highlightArticle ?? this.highlightArticle,
highlightCollection: highlightCollection ?? this.highlightCollection,
highlightPath: highlightPath ?? this.highlightPath,
);
}
@override
List<Object?> get props => [
status,
articles,
error,
highlightArticle,
highlightPath,
highlightCollection,
];
}
================================================
FILE: lib/src/article_view/view/article_content_view.dart
================================================
part of 'article_view.dart';
/// Article Page
class ArticleContentPage extends StatefulWidget {
/// Build [ArticleContentPage] from a article object.
///
/// [article] is required to be not null.
const ArticleContentPage({
super.key,
required this.article,
this.collection = "articles",
}) : articleId = null;
/// Build article page from article id.
const ArticleContentPage.fromId({
super.key,
this.collection = "articles",
required this.articleId,
}) : article = null;
/// The article base route name
static const String routeName = 'articles';
/// The current article to be displayed.
final Article? article;
/// The collection where to look for article files
final String? collection;
/// Article id.
///
/// It's a path where to search for the article data on the firestore.
final String? articleId;
@override
State<ArticleContentPage> createState() => ArticleContentPageState();
}
class ArticleContentPageState extends State<ArticleContentPage> {
/// The page scrollController;
late ScrollController scrollController;
/// The current article to be displayed.
///
/// If [widget.article] is not null, then it is that article.
/// If not, then [article] if fetched from [ArticleBloc].
late Article? article;
Future<String> getImageUrl(Article article) async {
ArticleStorageUtils articleUtils = ArticleStorageUtils(
article: article, collection: widget.collection ?? "articles");
return await articleUtils.getCoverImageUrl() ?? "";
}
void articleSeoSetup(BuildContext context) {
if (kIsWeb) {
log('start seo setup');
WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
if (context.mounted) {
HeadTagUtil.setHead(
title: article!.title!,
description: article!.relations![0]['preview'] as String,
keywords: [
'Madagascar',
'Notre Dame de la Delivrande',
'Sœur Dominicaines Missionnaires de Notre Dame de la Délivrande',
],
// imageUrl: getImageUrl(article!),
url:
"https://aujourdhuilavenir.org/${widget.collection ?? "articles"}/${article!.id}",
);
CreateHtml.makeWidgetTree(context);
}
});
// Define MetaSEO object
MetaSEO meta = MetaSEO();
// set document title to article title
web.document.title = article!.title!;
// Set decription to article preview
meta.description(
description: article!.relations![0]['preview'] as String);
// add meta seo data for web app as you want
meta.ogTitle(ogTitle: article!.title!);
meta.keywords(
keywords:
'Madagascar, Notre Dame de la Delivrande, Sœur Dominicaines Missionnaires de Notre Dame de la Délivrande,');
// meta.ogImage(ogImage: await getImageUrl(article!));
} else {
log('SEO setup is not supported on mobile');
}
}
@override
void initState() {
/// get article from [widget]
article = widget.article;
super.initState();
scrollController = ScrollController(
keepScrollOffset: true,
initialScrollOffset: 0,
);
}
@override
void dispose() {
scrollController.dispose();
article = null;
super.dispose();
}
@override
Widget build(BuildContext context) {
// setup seo
if (article != null) {
// Make Open Graph setup
articleSeoSetup(context);
}
/// If [article] is null, then retriever it from [ArticleBloc].
if (article == null) {
context.read<ArticleBloc>().add(
GetArticleByIdEvent(id: widget.articleId),
);
} else {
/// when article is not null
String? type = widget.article!.relations?[0]['type'];
switch (type) {
case 'novena':
context.goNamed(NovenaPage.routeName, extra: article);
return const SizedBox();
default:
return LayoutBuilder(
builder: (context, constraints) => Scaffold(
endDrawer: constraints.maxWidth <= ScreenSizes.large
? const AhlDrawer()
: null,
appBar: const AhlAppBar(),
body: ListView(
controller: scrollController,
addAutomaticKeepAlives: true,
children: [
ArticleContentView(
collection: widget.collection,
article: article!,
controller: scrollController,
),
const Gap(25),
const NewsLetterPrompt(),
const AhlFooter(),
],
),
),
);
}
}
return BlocBuilder<ArticleBloc, ArticleState<Article>>(
// buildWhen: (previous, current) =>
// previous.articles?[widget.articleId] == null,
builder: (context, state) {
String? type = widget.article?.relations?[0]['type'];
article = article ?? state.articles?[widget.articleId];
if (article == null) {
if (state.status == ArticleStatus.failed) {
context.goNamed(HomePage.routeName);
}
return Scaffold(
body: Container(
alignment: Alignment.center,
child: LottieBuilder.asset('animations/loading.json'),
),
);
}
switch (type) {
case 'novena':
context.goNamed(NovenaPage.routeName, extra: article);
return const SizedBox();
default:
return LayoutBuilder(
builder: (context, constraints) => Scaffold(
endDrawer: constraints.maxWidth <= ScreenSizes.large
? const AhlDrawer()
: null,
appBar: const AhlAppBar(),
body: ListView(
controller: scrollController,
addAutomaticKeepAlives: true,
children: [
ArticleContentView(
collection: widget.collection,
article: article!,
controller: scrollController,
),
const Gap(25),
const NewsLetterPrompt(),
const AhlFooter(),
],
),
),
);
}
},
);
}
}
class ArticleContentView extends StatefulWidget {
ArticleContentView({
this.isProject = false,
super.key,
required this.article,
this.collection = "articles",
this.controller,
this.label,
}) : articleUtils =
ArticleStorageUtils(article: article, collection: collection!);
final Article article;
final String? collection;
final ArticleStorageUtils articleUtils;
final ScrollController? controller;
final bool isProject;
final String? label;
@override
State<ArticleContentView> createState() => _ArticleContentViewState();
}
class _ArticleContentViewState extends State<ArticleContentView>
with AutomaticKeepAliveClientMixin {
@override
void initState() {
/// SEO setup
setupSeo(context);
super.initState();
}
/// Ask content.
Future<String> contentFetching() async {
SessionStorage cache = SessionStorage();
/// Read cache if it is available
String contentKey =
'${widget.collection}/${widget.article.id}/${widget.article.contentPath}';
if (cache[contentKey] != null) {
return cache[contentKey]!;
}
/// Make real request
final bytes = await firebase.storage
.child(
contentKey,
)
.getData();
String decodedString = utf8.decode(bytes!.toList());
/// Add result to cache
cache[contentKey] = decodedString;
return decodedString;
}
late Future<String> content;
late double screenWidth;
// late String articleKey = 'article_${widget.article.title}';
late SessionStorage cache = SessionStorage();
late Future<Uint8List?> _coverImage;
late MarkdownConfig minimalisticCorporateConfig;
@override
bool get wantKeepAlive => true;
@override
Widget build(BuildContext context) {
super.build(context);
setupSeo(context);
content = contentFetching();
widget.articleUtils.getCoverImage();
_coverImage = widget.articleUtils.getCoverImage();
screenWidth = MediaQuery.of(context).size.width;
minimalisticCorporateConfig = MarkdownConfig(
configs: [
ImgConfig(
builder: (String url, Map<String, String>? attribute) {
SessionStorage cache = SessionStorage();
if (cache[url] != null) {
return Align(
key: SeoKey(
TagType.img,
src: url,
attributes: attribute,
),
child: AhlImageViewer.fromFuture(
future: Future.value(
decodeUint8ListFromString(
cache[url]!,
),
),
),
);
} else {
if (url.contains('://')) {
return Align(
key: SeoKey(
TagType.img,
src: url,
attributes: attribute,
),
child: AhlImageViewer(
url: url,
attributes: attribute,
),
);
}
try {
log(url);
final Future<Uint8List?> future =
firebase.storage.child(url).getData();
future.then(
(value) {
if (value != null) {
if (cache[url] == null) {
cache[url] = encodeUint8ListToString(value);
}
}
},
);
return Container(
alignment: Alignment.center,
// constraints: BoxConstraints(
// maxHeight: resolveForBreakPoint(
// screenWidth,
// other: 575,
// small: 300,
// ),
// ),
child: AhlImageViewer.fromFuture(
key: SeoKey(
TagType.img,
src: url,
attributes: attribute,
),
// key: ValueKey(url),
future: future,
attributes: attribute,
),
);
// return Container();
} catch (e) {
log("[ArticleContentViewState] Error getting image: $e");
return Container(
alignment: Alignment.center,
child: const Icon(Icons.warning),
);
}
}
},
),
H1Config(
style: const H1Config().style.copyWith(
fontFamily: "Poppins",
color: AhlTheme.blackCharcoal,
fontSize: 32,
height: 1.25,
fontWeight: FontWeight.w600,
),
),
H2Config(
style: const H2Config().style.copyWith(
fontFamily: "Poppins",
color: AhlTheme.blackCharcoal,
fontSize: 28,
height: 1.4,
fontWeight: FontWeight.w600,
),
),
H3Config(
style: const H2Config().style.copyWith(
fontFamily: "Poppins",
color: AhlTheme.blackCharcoal,
fontSize: 24,
height: 1.4,
fontWeight: FontWeight.w600,
),
),
H4Config(
style: const H2Config().style.copyWith(
fontFamily: "Poppins",
color: AhlTheme.blackCharcoal,
fontSize: 22,
height: 1.25,
fontWeight: FontWeight.w600,
),
),
H5Config(
style: const H2Config().style.copyWith(
fontFamily: "Poppins",
color: AhlTheme.blackCharcoal,
fontSize: 16,
height: 1.5,
fontWeight: FontWeight.w600,
),
),
H6Config(
style: const H2Config().style.copyWith(
fontFamily: "Poppins",
color: AhlTheme.blackCharcoal,
fontSize: 14,
height: 1.4,
fontWeight: FontWeight.w600,
),
),
PConfig(
textStyle: const PConfig().textStyle.copyWith(
fontFamily: 'Poppins',
color: const Color(0xFF3F403C),
),
),
LinkConfig(
style: Theme.of(context).textTheme.labelLarge!.copyWith(
color: Theme.of(context).primaryColor,
decoration: TextDecoration.underline,
decorationColor: Theme.of(context).primaryColor,
// height: 5,
),
onTap: (url) {
launchUrl(Uri.parse(url));
},
),
// ImgConfig(
// builder: (url, attributes) {
// return Column(
// children: [
// Container(
// constraints: BoxConstraints(
// minWidth: 320,
// maxWidth: ContentSize.maxWidth(screenWidth),
// ),
// decoration: BoxDecoration(
// image: DecorationImage(image: NetworkImage(url)),
// borderRadius: BorderRadius.circular(BorderSizes.medium),
// ),
// clipBehavior: Clip.hardEdge,
// ),
// if (attributes['name'] != null) Text('${attributes["name"]}'),
// ],
// );
// },
// ),
],
);
return Center(
child: Container(
key: ValueKey(widget.article.title),
constraints:
BoxConstraints(maxWidth: ContentSize.maxWidth(screenWidth)),
// constraints: const BoxConstraints(maxWidth: 1024),
margin: EdgeInsets.symmetric(
horizontal: resolveForBreakPoint(
screenWidth,
other: Margins.small / 2,
// extraHuge: Margins.extraHuge,
// huge: Margins.huge,
// extraLarge: Margins.extraLarge,
// large: Margins.large,
),
),
// padding: EdgeInsets.symmetric(
// horizontal: resolveForBreakPoint(
// screenWidth,
// small: Margins.small,
// medium: Margins.small,
// large: Margins.large,
// extraLarge: Margins.extraLarge,
// other: Margins.huge,
// ),
// ),
child: buildMarkdownBlock(context),
),
);
}
// share button
Widget shareButtonBig = Builder(
builder: (context) => Container(
constraints: const BoxConstraints(maxWidth: 400),
alignment: Alignment.center,
child: OutlinedButton.icon(
onPressed: () {
var router = GoRouter.of(context);
String location = router.routeInformationProvider.value.uri.path;
Share.share("https://aujourdhuilavenir.org$location");
},
icon: const Icon(
Icons.share_outlined,
size: IconSizes.large,
),
label: Container(
height: 75,
alignment: Alignment.center,
child: Text(
'Partager',
style: Theme.of(context).textTheme.labelLarge!.copyWith(
fontSize: 22,
color: Theme.of(context).primaryColor,
),
),
),
),
),
);
// share button
Widget shareButton = Builder(
builder: (context) => OutlinedButton.icon(
onPressed: () {
var router = GoRouter.of(context);
String location = router.routeInformationProvider.value.uri.path;
Share.share("https://aujourdhuilavenir.org$location");
},
label: const Text('Partager'),
icon: const Icon(Icons.share_outlined),
),
);
Widget buildMarkdownBlock(BuildContext context) {
//seo
setupSeo(context);
// share button
Widget supportProjectButton = Builder(
builder: (context) => Container(
constraints: const BoxConstraints(maxWidth: 400),
child: ElevatedButton.icon(
style: ElevatedButton.styleFrom(
backgroundColor: Theme.of(context).primaryColor,
foregroundColor: Theme.of(context).colorScheme.onPrimary,
),
onPressed: () => Navigator.of(context).pushNamed(
DonationPage.routeName,
arguments: widget.article,
),
icon: SvgPicture.asset(
AhlAssets.dons,
width: IconSizes.large,
height: IconSizes.large,
),
label: Container(
alignment: Alignment.center,
height: 75,
// width: 250,
child: Text(
AppLocalizations.of(context)!.supportProject,
style: Theme.of(context).textTheme.labelLarge!.copyWith(
fontSize: 22,
color: Theme.of(context).colorScheme.onPrimary,
),
),
),
),
),
);
return Card(
color: Theme.of(context).colorScheme.surface,
child:
// padding: const EdgeInsets.all(Paddings.medium),
Column(
children: [
// label
Container(
padding: const EdgeInsets.all(Paddings.medium),
alignment: Alignment.centerLeft,
child: Text(
key: SeoKey(TagType.p,
text: widget.label ?? "", alt: "Article date"),
widget.label ??
DateTimeUtils.localizedFromStringDate(
dateString: widget.article.releaseDate, context: context),
style: Theme.of(context)
.textTheme
.labelMedium!
.copyWith(color: Theme.of(context).primaryColor),
),
),
// title
Container(
padding: const EdgeInsets.all(Paddings.medium),
alignment: Alignment.centerLeft,
child: Text(
widget.article.title ?? "",
key: SeoKey(TagType.h1, text: widget.article.title ?? ""),
style: resolveHeadlineTextThemeForBreakPoints(
MediaQuery.of(context).size.width,
context,
),
),
),
// const Padding(
// padding: EdgeInsets.symmetric(vertical: Paddings.medium),
// child: AhlDivider(
// leading: 0,
// trailing: 50,
// thickness: 16,
// ),
// ),
Container(
padding: const EdgeInsets.all(Paddings.medium),
alignment: Alignment.centerLeft,
child: Text(widget.article.relations?[0]['preview'],
key: SeoKey(
TagType.p,
text: widget.article.relations?[0]['preview'],
)),
),
// share button
Container(
alignment: Alignment.centerLeft,
padding: const EdgeInsets.symmetric(
vertical: 20,
horizontal: Paddings.medium,
),
child: Wrap(
alignment: WrapAlignment.start,
runAlignment: WrapAlignment.start,
spacing: 20,
runSpacing: 20,
crossAxisAlignment: WrapCrossAlignment.start,
children: [
ListenPodcastButton(
key: SeoKey(TagType.a,
text: "Listen Podcast", alt: "Play Podcast Button"),
article: widget.article,
collection: widget.collection,
),
shareButton,
],
),
),
SizedBox(
height: resolveForBreakPoint(
screenWidth,
other: 575,
small: 300,
),
width: double.maxFinite,
// constraints: const BoxConstraints.expand(),
child: AhlImageViewer.fromFuture(
fit: BoxFit.cover,
future: _coverImage,
),
),
// markdown content
Container(
padding: EdgeInsets.all(
resolveForBreakPoint(
screenWidth,
other: Paddings.big,
small: 10,
medium: 10,
),
),
child: FutureBuilder(
future: content,
builder: (context, snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.done:
if (snapshot.hasData) {
return MarkdownBlock(
key: SeoKey(TagType.p,
text: snapshot.data ?? "Empty article"),
data: snapshot.data ?? 'Error loading article.',
config: minimalisticCorporateConfig,
);
} else {
return Align(
alignment: Alignment.center,
child: Column(
children: [
Icon(
Icons.warning_rounded,
color: Theme.of(context).colorScheme.error,
),
Text(
'Error loading article content: ${snapshot.error}')
],
),
);
}
default:
return Container(
alignment: Alignment.center,
width: MediaQuery.of(context).size.height - 50,
child: const CircularProgressIndicator(),
);
// default:
// return Align(
// alignment: Alignment.center,
// child: Icon(
// Icons.warning_rounded,
// color: Theme.of(context).colorScheme.error,
// ),
// );
}
},
)),
Container(
padding: const EdgeInsets.symmetric(
vertical: 20, horizontal: Paddings.medium),
child: shareButtonBig,
),
if (widget.isProject)
Container(
padding: const EdgeInsets.all(Paddings.medium),
alignment: Alignment.center,
child: supportProjectButton,
),
Gap(
resolveSeparatorSize(context),
),
],
),
);
}
}
class ListenPodcastButton extends StatelessWidget {
const ListenPodcastButton({
super.key,
required this.article,
this.collection,
this.iconSize = 24,
});
final Article article;
final String? collection;
final double iconSize;
@override
Widget build(BuildContext context) {
if (article.relations?[0]['audio'] != null) {
return ElevatedButton.icon(
// shape: const StadiumBorder(),
// backgroundColor: Colors.transparent,
style: ElevatedButton.styleFrom(
// padding: const EdgeInsets.symmetric(
// vertical: 10,
// horizontal: 16,
// ),
foregroundColor: Theme.of(context).colorScheme.onPrimary,
backgroundColor: Theme.of(context).colorScheme.primary,
),
label: Text(
AppLocalizations.of(context)!.listenPodcast,
),
icon: const Icon(Icons.play_arrow),
onPressed: () {
PersistentBottomSheetController? controller;
controller = Scaffold.maybeOf(context)?.showBottomSheet((context) {
return Container(
constraints: const BoxConstraints.tightFor(
height: 125,
),
child: Stack(
children: [
FirebaseAudioPlayer(
article: article,
collection: collection,
),
Align(
alignment: Alignment.topRight,
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
IconButton(
icon: Icon(Icons.minimize, size: iconSize),
color: Theme.of(context).colorScheme.onPrimaryFixed,
onPressed: () {
controller?.close();
},
),
IconButton(
icon: Icon(Icons.close_rounded, size: iconSize),
color: Theme.of(context).colorScheme.onPrimaryFixed,
onPressed: () {
controller?.close();
},
),
],
),
),
],
),
);
});
},
);
} else {
return const SizedBox.shrink();
}
}
}
class AhlImageViewer extends StatefulWidget {
const AhlImageViewer({
super.key,
required this.url,
this.attributes,
this.fit = BoxFit.contain,
}) : future = null;
const AhlImageViewer.fromFuture(
{super.key, required this.future, this.attributes, this.fit})
: url = null;
final Future? future;
final String? url;
final Map<String, String>? attributes;
final BoxFit? fit;
@override
State<AhlImageViewer> createState() => _AhlImageViewerState();
}
class _AhlImageViewerState extends State<AhlImageViewer> {
late Future imageFuture;
@override
void initState() {
developer.log("[AhlImageViewer] State is initialized.");
super.initState();
if (widget.url != null) {
imageFuture = firebase.storage.child(widget.url!).getData();
} else {
imageFuture = widget.future!;
}
}
@override
Widget build(BuildContext context) {
//seo
setupSeo(context);
if (widget.url != null && widget.url!.contains("://")) {
return SizedBox(
height: double.tryParse(widget.attributes?['height'] ?? ""),
child: InkWell(
onTap: () {
Navigator.of(context).push(
DialogRoute(
context: context,
builder: (context) => ImageViewer(
child: Image.network(
cacheHeight: 500,
cacheWidth: 500,
gaplessPlayback: false,
widget.url!,
fit: widget.fit,
),
),
),
);
},
child: Image.network(
key: SeoKey(TagType.img, src: widget.url ?? ""),
widget.url!,
fit: widget.fit,
),
),
);
}
return SizedBox(
height: double.tryParse(widget.attributes?['height'] ?? ""),
child: FutureBuilder(
future: imageFuture,
key: ValueKey(widget.url),
builder: (context, snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.done:
if (snapshot.hasData) {
return InkWell(
onTap: () {
Navigator.of(context).push(
DialogRoute(
context: context,
builder: (context) => ImageViewer(
child: Image.memory(snapshot.data!),
),
),
);
},
child: Image.memory(
Uint8List.fromList(
snapshot.data!,
),
fit: widget.fit,
),
);
}
if (snapshot.hasError) {
return Container(
height: 400,
alignment: Alignment.center,
child: Column(
children: [
const Icon(Icons.error),
Text("Error getting Image: ${snapshot.error}"),
Text('Data: $snapshot'),
],
),
);
}
return Container(
height: 400,
alignment: Alignment.center,
child: const CircularProgressIndicator(),
);
default:
return Container(
height: 400,
alignment: Alignment.center,
child: const CircularProgressIndicator(),
);
}
},
),
);
}
}
================================================
FILE: lib/src/article_view/view/article_view.dart
================================================
import 'dart:developer';
import 'dart:convert';
import 'dart:developer' as developer;
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:flutter/foundation.dart';
import 'package:web/web.dart' as web;
import 'package:firebase_article/firebase_article.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:lottie/lottie.dart';
import 'package:share_plus/share_plus.dart';
import 'package:meta_seo/meta_seo.dart';
import 'package:logger/logger.dart';
import 'package:flutter_seo/flutter_seo.dart';
import 'package:gap/gap.dart';
import 'package:flutter_animate/flutter_animate.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:go_router/go_router.dart';
import 'package:markdown_widget/markdown_widget.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:session_storage/session_storage.dart';
import 'package:ahl/src/pages/homepage/donation/donation_page.dart';
import 'package:ahl/src/utils/firebase_utils.dart';
import 'package:ahl/src/pages/homepage/homepage.dart';
import 'package:ahl/src/pages/novena_page/novena_page.dart';
import 'package:ahl/src/newsletter/newsletter.dart';
import 'package:ahl/src/article_view/bloc/bloc.dart';
import 'package:ahl/src/article_view/event/event.dart';
import 'package:ahl/src/article_view/state/state.dart';
import 'package:ahl/src/firebase_constants.dart' as firebase;
import 'package:ahl/src/theme/theme.dart';
import 'package:ahl/src/utils/breakpoint_resolver.dart';
import '../../utils/date_time_utils.dart';
import 'package:ahl/ahl_barrel.dart';
import 'package:ahl/src/widgets/widgets.dart';
import '../../utils/seo.dart';
import '../../utils/storage_utils.dart';
part 'article_content_view.dart';
part 'highlight_article_tile.dart';
// import 'package:markdown_widget/markdown_widget.dart';
String monthTextResolve(BuildContext context, String monthName) {
List vowels = ['a', 'e', 'i', 'o', 'u', 'y'];
/// If the first element is a vowel.
//todo: change based on locale to.
if (vowels.contains(monthName.characters.first.toLowerCase())) {
return "Mois d'$monthName";
} else {
return 'Mois de $monthName';
}
}
/// A tile of article
class ArticleTile extends StatefulWidget {
const ArticleTile({
super.key,
required this.article,
});
final Article article;
@override
State<ArticleTile> createState() => ArticleTileState();
}
class ArticleTileState extends State<ArticleTile> {
// article of the tile
late Article article;
late ArticleStorageUtils articleStorageUtils;
@override
void initState() {
article = widget.article;
articleStorageUtils =
ArticleStorageUtils(article: article, collection: 'articles');
super.initState();
}
void goToReadingPage() {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
return ArticleContentPage(article: article);
},
),
);
}
@override
Widget build(BuildContext context) {
TextStyle? titleTheme = resolveHeadlineTextThemeForBreakPoints(
MediaQuery.of(context).size.width,
context,
);
return LayoutBuilder(
builder: (context, constraints) => Container(
// padding: const EdgeInsets.all(Paddings.big),
// clipBehavior: Clip.hardEdge,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(BorderSizes.big),
),
child: Material(
borderOnForeground: true,
child: InkWell(
onTap: goToReadingPage,
child: Container(
// margin: const EdgeInsets.symmetric(
// horizontal: Margins.mobileMedium,
// ),
constraints: const BoxConstraints(
maxWidth: 1130,
minWidth: 350,
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
if (article.title != null)
Padding(
padding: const EdgeInsets.only(
bottom: Paddings.big, top: Paddings.small),
child: Text(
article.title!,
style: titleTheme,
),
),
SizedBox(
height: 135,
// maxHeight: 232,
width: constraints.maxWidth,
child: Row(
children: [
Expanded(
flex: 1,
child: ConstrainedBox(
constraints: const BoxConstraints(
minHeight: 135,
maxHeight: 232,
),
child: (article.relations
?.first[RepoSetUp.coverImageKey] !=
null)
? FutureBuilder(
future: articleStorageUtils
.getCoverImage(), //getHeroHeaderImage(),
builder: (context, snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.done:
if (snapshot.hasData) {
return Container(
constraints: const BoxConstraints(
maxHeight: 135,
maxWidth: 185,
minWidth: 107,
),
decoration: BoxDecoration(
image: DecorationImage(
fit: BoxFit.cover,
image: MemoryImage(
snapshot.data!),
),
),
).animate().fadeIn(
curve: Curves.easeInOutBack,
);
} else {
return Container(
decoration: BoxDecoration(
borderRadius:
BorderRadius.circular(
BorderSizes.small),
color: Theme.of(context)
.colorScheme
.errorContainer,
),
child: Text(
'Error getting image: ${snapshot.error}',
style: Theme.of(context)
.textTheme
.labelSmall!
.copyWith(
color: Theme.of(context)
.colorScheme
.error,
),
).animate().fadeIn(),
);
}
case ConnectionState.waiting:
return Container(
alignment: Alignment.center,
decoration: BoxDecoration(
borderRadius:
BorderRadius.circular(
BorderSizes.small),
color: Theme.of(context)
.colorScheme
.primaryContainer,
),
child: SizedBox.square(
dimension: 50,
child: CircularProgressIndicator(
color: Theme.of(context)
.colorScheme
.primary,
),
),
);
default:
return Container(
alignment: Alignment.center,
decoration: BoxDecoration(
borderRadius:
BorderRadius.circular(
BorderSizes.small),
color: Theme.of(context)
.colorScheme
.secondaryContainer,
),
child: SizedBox.square(
dimension: 50,
child: CircularProgressIndicator(
color: Theme.of(context)
.colorScheme
.secondary,
),
),
);
}
},
)
: Expanded(
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(
BorderSizes.small),
color: Theme.of(context)
.colorScheme
.primaryContainer,
),
),
),
),
),
Expanded(
flex: 2,
child: Column(
children: [
Expanded(
flex: 1,
child: Row(
children: [
Container(
margin: const EdgeInsets.only(
left: Paddings.big,
right: Paddings.medium),
color: AhlTheme.yellowRelax,
constraints: const BoxConstraints.expand(
width: 25,
// height: 85,
),
),
Expanded(
flex: 1,
child: FutureBuilder(
future: Future.value(article.relations
?.first[RepoSetUp.previewKey]
as String),
builder: (context, snapshot) {
if (snapshot.hasData) {
return Container(
alignment: Alignment.topCenter,
child: Text(
snapshot.data!,
maxLines: 4,
style: Theme.of(context)
.textTheme
.bodyMedium!
.copyWith(
overflow: TextOverflow
.ellipsis),
),
);
} else if (snapshot.connectionState ==
ConnectionState.waiting) {
return Container(
alignment: Alignment.center,
decoration: BoxDecoration(
borderRadius:
BorderRadius.circular(
BorderSizes.small),
color: Theme.of(context)
.colorScheme
.primaryContainer,
),
child: SizedBox.square(
dimension: 50,
child:
CircularProgressIndicator(
color: Theme.of(context)
.colorScheme
.primary,
),
),
);
} else {
return Container(
decoration: BoxDecoration(
borderRadius:
BorderRadius.circular(
BorderSizes.small),
color: Theme.of(context)
.colorScheme
.errorContainer,
),
child: Text(
'Error getting content: ${snapshot.error}',
style: Theme.of(context)
.textTheme
.labelSmall!
.copyWith(
color: Theme.of(context)
.colorScheme
.error,
),
),
);
}
},
),
),
],
),
),
// Align(
// alignment: Alignment.centerRight,
// child: ElevatedButton(
// style: ElevatedButton.styleFrom(
// foregroundColor:
// Theme.of(context).colorScheme.onPrimary,
// backgroundColor:
// Theme.of(context).colorScheme.primary,
// ),
// onPressed: () {
// goToReadingPage();
// },
// child: const Text('Lire'),
// ),
// ),
],
),
),
],
),
),
],
),
),
),
),
),
);
}
}
/// A tile of article
class CardArticleTile extends StatefulWidget {
const CardArticleTile(
{super.key,
required this.article,
this.collection = 'articles',
this.callback,
this.direction,
this.maxHeight,
this.label,
this.title,
this.preview})
: articleId = null;
const CardArticleTile.fromId({
super.key,
required this.articleId,
this.collection = 'articles',
this.callback,
this.direction,
this.maxHeight,
this.label,
this.title,
this.preview,
}) : article = null;
final Article? article;
final String collection;
final VoidCallback? callback;
final String? articleId;
final Axis? direction;
final double? maxHeight;
/// A replacement string for the title
final String? label;
/// A replacement string for the title
final String? title;
/// A replacement string for the title
final String? preview;
@override
State<CardArticleTile> createState() => _CardArticleTileState();
}
class _CardArticleTileState extends State<CardArticleTile>
with AutomaticKeepAliveClientMixin {
// article of the tile
late Article? article;
late ArticleStorageUtils? articleStorageUtils;
/// The collection where to search the article image. This also the name of
/// firestore collection of the article.
late String collection;
final double elevation = 0;
late double _maxHeight;
@override
void initState() {
collection = getCollection(widget.articleId ?? "") ?? widget.collection;
// elevation = 5.0;
_maxHeight = (widget.direction == Axis.vertical) ? 400 : 300;
/// Make article transaction
///
/// Use from widget if it is not null. Trigger a request article event if not.
if (widget.article != null) {
article = widget.article!;
articleStorageUtils =
ArticleStorageUtils(article: article!, collection: collection);
} else {
article = null;
articleStorageUtils = null;
context.read<ArticleBloc>().add(
GetArticleByPathEvent.fromCollection(
id: widget.articleId!,
collection: collection,
),
);
}
super.initState();
}
/// Default callback.
///
/// Called when the the card is clicked.
void goToReadingPage() {
String articleId = widget.article?.id ?? widget.articleId!;
if (collection.startsWith('/')) {
collection = collection.substring(1);
}
context.go(
'/$collection/$articleId',
extra: article,
);
}
/// on Hover callback.
///
/// It is mainly used in the ui update.
void _onHover(bool isHovered) {
// if (isHovered) {
// setState(() {
// elevation = 25;
// });
// } else {
// setState(() {
// elevation = 5;
// });
// }
}
@override
Widget build(BuildContext context) {
super.build(context);
if (article != null) {
return buildTile(context, article!);
} else {
return BlocBuilder<ArticleBloc, ArticleState<Article>>(
buildWhen: (previous, current) =>
previous.articles == null ||
!previous.articles!.containsKey(widget.articleId),
builder: (context, state) {
article = state.articles?[widget.articleId];
if (article != null) {
articleStorageUtils =
ArticleStorageUtils(article: article!, collection: collection);
return buildTile(context, article!);
}
if (state.error != null) {
log("[CardArticleTile]: Error getting article: ${widget.articleId}. ${state.error}");
return const SizedBox.shrink();
} else {
return Align(
child: Container(
decoration: BoxDecoration(
color: Theme.of(context).colorScheme.surfaceContainerHigh,
borderRadius: BorderRadius.circular(BorderSizes.medium),
),
width: 330,
height: 400,
)
.animate(
onPlay: (controller) => controller.repeat(),
)
.then(delay: Durations.long1)
.shimmer(),
);
}
},
);
}
}
Widget buildTile(BuildContext context, Article article) {
super.build(context);
TextStyle? titleTheme = // Theme.of(context).textTheme.headlineSmall;
resolveHeadlineTextThemeForBreakPoints(
MediaQuery.of(context).size.width,
context,
);
DateTime releaseDate =
DateTimeUtils.parseReleaseDate(article.releaseDate ?? "");
return Card(
color: Colors.white,
elevation: elevation,
borderOnForeground: true,
clipBehavior: Clip.antiAlias,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(BorderSizes.medium),
),
child: InkWell(
onHover: _onHover,
onTap: widget.callback ?? goToReadingPage,
child: Container(
// padding: const EdgeInsets.all(Paddings.medium),
constraints: BoxConstraints(
maxWidth: resolveForBreakPoint(
MediaQuery.of(context).size.width,
// small: 330,
// medium: 330,
other: ContentSize.maxWidth(MediaQuery.of(context).size.width),
),
minWidth: 330,
maxHeight: widget.maxHeight ?? _maxHeight,
),
child: Flex(
direction: widget.direction ??
resolveForBreakPoint(
MediaQuery.of(context).size.width,
other: Axis.horizontal,
small: Axis.vertical,
medium: Axis.vertical,
),
children: [
Flexible(
child: Container(
alignment: Alignment.topLeft,
padding: (widget.direction == Axis.horizontal)
? const EdgeInsets.only(
top: Paddings.big,
left: Paddings.big,
right: Paddings.big,
)
: const EdgeInsets.only(
top: Paddings.medium,
right: Paddings.medium,
left: Paddings.medium,
// vertical: Paddings.big,
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.end,
children: [
// Flexible(
// child:
FittedBox(
child: Text(
widget.label ??
"${releaseDate.day} ${DateTimeUtils.localMonth(releaseDate.month, context)} ${releaseDate.year}",
style: Theme.of(context)
.textTheme
.labelMedium!
.copyWith(color: Theme.of(context).primaryColor),
),
),
//title
// Flexible(
// child:
// Padding(
// padding: const EdgeInsets.only(
// bottom: Paddings.small, top: Paddings.small),
// child:
// FittedBox(
// child:
Flexible(
flex: 1,
child: Align(
alignment: Alignment.bottomLeft,
child: Text(
widget.title ?? article.title ?? "",
style: titleTheme,
maxLines: 3,
overflow: TextOverflow.ellipsis,
),
),
),
// ),
// ),
// separator
// Flexible(
// child: Container(
// margin: const EdgeInsets.symmetric(
// vertical: Paddings.small,
// ),
// color: AhlTheme.yellowRelax,
// constraints: const BoxConstraints.expand(
// width: 100,
// height: 16,
// ),
// ),
// ),
const Gap(20),
Flexible(
flex: 2,
child: (widget.preview != null)
? Text(
widget.preview!,
)
: ArticlePreviewTextView(
article: article,
collection: collection,
callback: goToReadingPage,
),
),
],
),
),
),
// SizedBox(
// ],
// ),
// ),
// // Align(
// // alignment: Alignment.centerRight,
// // child: ElevatedButton(
// // style: ElevatedButton.styleFrom(
// // foregroundColor:
// // Theme.of(context).colorScheme.onPrimary,
// // backgroundColor:
// // Theme.of(context).colorScheme.primary,
// // ),
// // onPressed: () {
// // goToReadingPage();
// // },
// // child: const Text('Lire'),
// // ),
// // ),
// ],
// ),
// ),
Expanded(
child: ArticleCoverImage(
direction: widget.direction,
article: article,
collection: collection,
),
),
],
),
),
),
);
}
@override
bool get wantKeepAlive => true; // articleStorageUtils?.coverImage != null;
@override
void updateKeepAlive() {
super.updateKeepAlive();
}
}
class MobileArticleClipper extends CustomClipper<Path> {
@override
Path getClip(Size size) {
final path = Path();
path.moveTo(size.width, 0); // Start at top right corner
path.lineTo(0, size.height * 1 / 10); // Draw line to top right corner
path.lineTo(0, size.height); // Diagonal line down
path.lineTo(size.width, size.width);
// path.lineTo(0, size.height); // Line to bottom left corner
path.close(); // Close the path
return path;
}
@override
bool shouldReclip(MobileArticleClipper oldClipper) =>
false; // Optimizes performance if path doesn't change
}
class LargeArticleClipper extends CustomClipper<Path> {
@override
Path getClip(Size size) {
final path = Path();
path.moveTo(size.width * 1 / 4, 0); // Start at top right corner
path.lineTo(0, size.height); // Draw line to top right corner
path.lineTo(size.width, size.width);
path.lineTo(size.width, 0); // Diagonal line down
// path.lineTo(0, size.height); // Line to bottom left corner
path.close(); // Close the path
return path;
}
@override
bool shouldReclip(LargeArticleClipper oldClipper) =>
false; // Optimizes performance if path doesn't change
}
class ArticleCoverImage extends StatefulWidget {
const ArticleCoverImage({
super.key,
required this.article,
this.direction,
this.collection = 'articles',
});
final String collection;
final Article article;
final Axis? direction;
@override
State<ArticleCoverImage> createState() => ArticleCoverImageState();
}
class ArticleCoverImageState extends State<ArticleCoverImage> {
late ArticleStorageUtils articleStorageUtils;
late Future articleCoverImage;
late Article article;
final SessionStorage cache = SessionStorage();
late String coverImageCacheKey;
@override
void initState() {
super.initState();
articleStorageUtils = ArticleStorageUtils(
article: widget.article,
collection: widget.collection,
);
article = widget.article;
coverImageCacheKey = "${article.id}_cover_image";
articleCoverImage =
articleStorageUtils.getCoverImage(); //getHeroHeaderImage()
}
@override
Widget build(BuildContext context) {
Axis direction = widget.direction ??
resolveForBreakPoint<Axis>(
MediaQuery.of(context).size.width,
other: Axis.horizontal,
small: Axis.vertical,
medium: Axis.vertical,
);
return
// (cache[coverImageCacheKey] == null)
// ?
ConstrainedBox(
constraints: const BoxConstraints(
// minHeight: 135,
// maxHeight: 232,
),
child:
// (article.relations?.first[RepoSetUp.coverImageKey] != null)
//
gitextract_yz3aohkg/
├── .firebaserc
├── .github/
│ └── workflows/
│ ├── firebase-hosting-pull-request.yml
│ └── flutter_dep_get.yml
├── .hintrc
├── .metadata
├── README.md
├── analysis_options.yaml
├── assets/
│ ├── animations/
│ │ ├── done.lottie
│ │ └── loading.json
│ ├── content.md
│ ├── fonts/
│ │ └── butler/
│ │ ├── Butler_Black.otf
│ │ ├── Butler_Bold.otf
│ │ ├── Butler_Light.otf
│ │ ├── Butler_Regular.otf
│ │ ├── Butler_Ultra_Light.otf
│ │ ├── butler_extra_bold.otf
│ │ └── butler_medium.otf
│ ├── qui_sommes_nous.md
│ └── sample.md
├── cors.json
├── dap.ps1
├── devtools_options.yaml
├── firebase.json
├── firestore.indexes.json
├── firestore.rules
├── functions/
│ ├── main.py
│ └── requirements.txt
├── l10n.yaml
├── lib/
│ ├── ahl_barrel.dart
│ ├── firebase_options.dart
│ ├── main.dart
│ └── src/
│ ├── app.dart
│ ├── article_view/
│ │ ├── bloc/
│ │ │ └── bloc.dart
│ │ ├── data/
│ │ │ └── data.dart
│ │ ├── event/
│ │ │ └── event.dart
│ │ ├── state/
│ │ │ └── state.dart
│ │ └── view/
│ │ ├── article_content_view.dart
│ │ ├── article_view.dart
│ │ └── highlight_article_tile.dart
│ ├── assets/
│ │ └── assets.dart
│ ├── constants/
│ │ └── constants.dart
│ ├── firebase_constants.dart
│ ├── localization/
│ │ ├── app_en.arb
│ │ ├── app_fr.arb
│ │ └── locale_utils.dart
│ ├── newsletter/
│ │ ├── bloc/
│ │ │ └── bloc.dart
│ │ ├── event/
│ │ │ └── event.dart
│ │ ├── newsletter.dart
│ │ ├── newsletter_repository.dart
│ │ ├── state/
│ │ │ └── state.dart
│ │ └── view/
│ │ └── news_letter_view.dart
│ ├── pages/
│ │ ├── articles/
│ │ │ └── articles_page.dart
│ │ ├── homepage/
│ │ │ ├── donation/
│ │ │ │ └── donation_page.dart
│ │ │ ├── hero_header/
│ │ │ │ └── hero_header.dart
│ │ │ ├── homepage.dart
│ │ │ └── welcoming/
│ │ │ └── welcoming.dart
│ │ ├── novena_page/
│ │ │ ├── novena_article_extension.dart
│ │ │ └── novena_page.dart
│ │ ├── prayers/
│ │ │ └── prayers_page.dart
│ │ ├── projects/
│ │ │ ├── project_page_view.dart
│ │ │ └── projects_page.dart
│ │ ├── rosary/
│ │ │ └── rosary_page.dart
│ │ ├── saints/
│ │ │ └── saints.dart
│ │ └── who_we_are/
│ │ └── who_we_are.dart
│ ├── partners/
│ │ └── view.dart
│ ├── prayers_intention/
│ │ ├── bloc.dart
│ │ ├── event.dart
│ │ ├── model.dart
│ │ ├── prayer_request.dart
│ │ ├── repository.dart
│ │ ├── state.dart
│ │ └── view.dart
│ ├── prayers_space/
│ │ └── view.dart
│ ├── project_space/
│ │ ├── bloc.dart
│ │ ├── model.dart
│ │ └── view.dart
│ ├── rosary/
│ │ ├── rosary.dart
│ │ └── rosary_prompt.dart
│ ├── sample_feature/
│ │ ├── sample_item.dart
│ │ ├── sample_item_details_view.dart
│ │ └── sample_item_list_view.dart
│ ├── settings/
│ │ ├── settings_controller.dart
│ │ ├── settings_service.dart
│ │ └── settings_view.dart
│ ├── theme/
│ │ └── theme.dart
│ ├── utils/
│ │ ├── breakpoint_resolver.dart
│ │ ├── date_time_utils.dart
│ │ ├── firebase_utils.dart
│ │ ├── seo.dart
│ │ └── storage_utils.dart
│ ├── validation/
│ │ └── email_validation.dart
│ ├── who_we_are/
│ │ └── view.dart
│ └── widgets/
│ ├── actions.dart
│ ├── app_bar.dart
│ ├── audio_player.dart
│ ├── drawer.dart
│ ├── footer.dart
│ ├── forms_prompt.dart
│ ├── loading_page.dart
│ ├── logo.dart
│ ├── my_flutter_app_icons.dart
│ ├── prayers_request.dart
│ ├── promotion_bar.dart
│ ├── prompt_card.dart
│ ├── section_title.dart
│ ├── space_view.dart
│ └── widgets.dart
├── pubspec.yaml
├── secrets.md
├── storage.rules
├── test/
│ ├── articles/
│ │ ├── article_view_test.dart
│ │ ├── articles_bloc_test.dart
│ │ ├── articles_repository_test.dart
│ │ ├── bare_test.dart
│ │ └── collection_utils_test.dart
│ ├── breakpoint_resolver_test.dart
│ ├── breakpoint_utils/
│ │ └── separator_size_test.dart
│ ├── data_storage/
│ │ └── firestore_test.dart
│ ├── newsletter/
│ │ ├── newsletterbloc_test.dart
│ │ └── newsletterbloc_test.mocks.dart
│ ├── prayer_request/
│ │ ├── bloc_test.dart
│ │ └── repo_test.dart
│ ├── project_bloc/
│ │ └── project_bloc_test.dart
│ ├── project_page_view/
│ │ └── build_relations_test.dart
│ ├── unit_test.dart
│ └── widget_test.dart
├── untranslated_message.txt
└── web/
├── flutter_bootstrap.js
├── google-site-verification=zW71m6kfnZRv8zRIyqnpIJgMvlVlE0tK1aLMdqrTojg.txt
├── google91970a171ec523e2.html
├── index.html
├── js/
│ └── lottie.js
├── loader.css
├── loading_rosary.json
├── lottie.js
├── manifest.json
├── package.json
├── site.webmanifest
├── sitemap.xml
└── style.css
SYMBOL INDEX (1187 symbols across 87 files)
FILE: lib/firebase_options.dart
class DefaultFirebaseOptions (line 17) | class DefaultFirebaseOptions {
FILE: lib/main.dart
function main (line 16) | void main()
FILE: lib/src/app.dart
class MyApp (line 26) | class MyApp extends StatefulWidget {
method createState (line 37) | State<MyApp> createState()
method setLocal (line 39) | void setLocal(BuildContext context, Locale newLocale)
class _MyAppState (line 45) | class _MyAppState extends State<MyApp> {
method changeLanguage (line 187) | void changeLanguage(Locale locale)
method initState (line 197) | void initState()
method build (line 203) | Widget build(BuildContext context)
FILE: lib/src/article_view/bloc/bloc.dart
class ArticleBloc (line 11) | class ArticleBloc extends Bloc<ArticleEvent, ArticleState<fire_art.Artic...
method _onGetHighlightPath (line 50) | void _onGetHighlightPath(GetHighlightPathEvent event, Emitter emit)
method _onGetHighlightCollection (line 67) | void _onGetHighlightCollection(
method _onInitializeArticleBlocEvent (line 85) | void _onInitializeArticleBlocEvent(
method _onGetArticleById (line 96) | void _onGetArticleById(GetArticleByIdEvent event, Emitter emit)
method _onGetArticleByPath (line 135) | void _onGetArticleByPath(GetArticleByPathEvent event, Emitter emit)
method _onGetHighlightedArticle (line 172) | void _onGetHighlightedArticle(
method _onGetArticleListEvent (line 207) | void _onGetArticleListEvent(GetArticleListEvent event, Emitter emit)
FILE: lib/src/article_view/event/event.dart
class ArticleEvent (line 1) | final class ArticleEvent {
class GetHighlightArticleEvent (line 7) | final class GetHighlightArticleEvent extends ArticleEvent {
class GetArticleByIdEvent (line 11) | final class GetArticleByIdEvent extends ArticleEvent {
class GetArticleByPathEvent (line 19) | final class GetArticleByPathEvent extends ArticleEvent {
class GetHighlightPathEvent (line 31) | final class GetHighlightPathEvent extends ArticleEvent {
class GetHighlightCollectionEvent (line 35) | final class GetHighlightCollectionEvent extends ArticleEvent {
class GetArticleListEvent (line 40) | final class GetArticleListEvent extends ArticleEvent {
class InitializeArticleBlocEvent (line 57) | final class InitializeArticleBlocEvent extends ArticleEvent {
FILE: lib/src/article_view/state/state.dart
type ArticleStatus (line 4) | enum ArticleStatus {
class ArticleState (line 16) | class ArticleState<T extends Article> extends Equatable {
method copyWith (line 33) | ArticleState<T> copyWith({
FILE: lib/src/article_view/view/article_content_view.dart
class ArticleContentPage (line 4) | class ArticleContentPage extends StatefulWidget {
method createState (line 36) | State<ArticleContentPage> createState()
class ArticleContentPageState (line 39) | class ArticleContentPageState extends State<ArticleContentPage> {
method getImageUrl (line 49) | Future<String> getImageUrl(Article article)
method articleSeoSetup (line 55) | void articleSeoSetup(BuildContext context)
method initState (line 97) | void initState()
method dispose (line 110) | void dispose()
method build (line 117) | Widget build(BuildContext context)
class ArticleContentView (line 215) | class ArticleContentView extends StatefulWidget {
method createState (line 235) | State<ArticleContentView> createState()
class _ArticleContentViewState (line 238) | class _ArticleContentViewState extends State<ArticleContentView>
method initState (line 241) | void initState()
method contentFetching (line 249) | Future<String> contentFetching()
method build (line 286) | Widget build(BuildContext context)
method buildMarkdownBlock (line 548) | Widget buildMarkdownBlock(BuildContext context)
class ListenPodcastButton (line 755) | class ListenPodcastButton extends StatelessWidget {
method build (line 768) | Widget build(BuildContext context)
class AhlImageViewer (line 832) | class AhlImageViewer extends StatefulWidget {
method createState (line 850) | State<AhlImageViewer> createState()
class _AhlImageViewerState (line 853) | class _AhlImageViewerState extends State<AhlImageViewer> {
method initState (line 857) | void initState()
method build (line 869) | Widget build(BuildContext context)
FILE: lib/src/article_view/view/article_view.dart
function monthTextResolve (line 50) | String monthTextResolve(BuildContext context, String monthName)
class ArticleTile (line 63) | class ArticleTile extends StatefulWidget {
method createState (line 72) | State<ArticleTile> createState()
class ArticleTileState (line 75) | class ArticleTileState extends State<ArticleTile> {
method initState (line 82) | void initState()
method goToReadingPage (line 90) | void goToReadingPage()
method build (line 102) | Widget build(BuildContext context)
class CardArticleTile (line 378) | class CardArticleTile extends StatefulWidget {
method createState (line 420) | State<CardArticleTile> createState()
class _CardArticleTileState (line 423) | class _CardArticleTileState extends State<CardArticleTile>
method initState (line 439) | void initState()
method goToReadingPage (line 468) | void goToReadingPage()
method _onHover (line 483) | void _onHover(bool isHovered)
method build (line 496) | Widget build(BuildContext context)
method buildTile (line 539) | Widget buildTile(BuildContext context, Article article)
method updateKeepAlive (line 709) | void updateKeepAlive()
class MobileArticleClipper (line 714) | class MobileArticleClipper extends CustomClipper<Path> {
method getClip (line 716) | Path getClip(Size size)
method shouldReclip (line 730) | bool shouldReclip(MobileArticleClipper oldClipper)
class LargeArticleClipper (line 734) | class LargeArticleClipper extends CustomClipper<Path> {
method getClip (line 736) | Path getClip(Size size)
method shouldReclip (line 750) | bool shouldReclip(LargeArticleClipper oldClipper)
class ArticleCoverImage (line 754) | class ArticleCoverImage extends StatefulWidget {
method createState (line 766) | State<ArticleCoverImage> createState()
class ArticleCoverImageState (line 769) | class ArticleCoverImageState extends State<ArticleCoverImage> {
method initState (line 778) | void initState()
method build (line 793) | Widget build(BuildContext context)
class ArticlePreviewTextView (line 945) | class ArticlePreviewTextView extends StatefulWidget {
method createState (line 957) | State<StatefulWidget> createState()
class ArticlePreviewViewState (line 962) | class ArticlePreviewViewState extends State<ArticlePreviewTextView> {
method initState (line 966) | void initState()
method build (line 974) | Widget build(BuildContext context)
class RelatedArticles (line 1059) | class RelatedArticles extends StatefulWidget {
method createState (line 1072) | State<RelatedArticles> createState()
class _RelatedArticlesState (line 1075) | class _RelatedArticlesState extends State<RelatedArticles>
method buildRelatedArticleTiles (line 1079) | List<Widget> buildRelatedArticleTiles(BuildContext context, Article ar...
method build (line 1106) | Widget build(BuildContext context)
FILE: lib/src/article_view/view/highlight_article_tile.dart
class HighlightArticleTile (line 3) | class HighlightArticleTile extends StatefulWidget {
method createState (line 11) | State<HighlightArticleTile> createState()
class _HighlightArticleTileState (line 14) | class _HighlightArticleTileState extends State<HighlightArticleTile>
method initState (line 23) | void initState()
method buildLabel (line 29) | String? buildLabel({required Article? article})
method build (line 39) | Widget build(BuildContext context)
method goToReadingPage (line 205) | void goToReadingPage()
FILE: lib/src/assets/assets.dart
class AhlAssets (line 8) | class AhlAssets {
FILE: lib/src/constants/constants.dart
class BorderSizes (line 6) | class BorderSizes {
class Margins (line 20) | class Margins {
class ContentSize (line 44) | class ContentSize {
method maxWidth (line 46) | double maxWidth(double widthConstraints)
class ScreenSizes (line 55) | class ScreenSizes {
class Paddings (line 72) | class Paddings {
class Sizes (line 102) | class Sizes {
class IconSizes (line 114) | class IconSizes {
class ButtonGeometry (line 130) | class ButtonGeometry {
class HeroHeaderGeometry (line 137) | class HeroHeaderGeometry {
class AhlDurations (line 144) | class AhlDurations {
FILE: lib/src/firebase_constants.dart
function initialize (line 88) | void initialize()
function _initialize (line 98) | Future<void> _initialize()
FILE: lib/src/localization/locale_utils.dart
class LocaleUtils (line 5) | class LocaleUtils {
method changeLocale (line 7) | void changeLocale(BuildContext context, Locale newLocale)
FILE: lib/src/newsletter/bloc/bloc.dart
class NewsletterSubscriptionBloc (line 5) | class NewsletterSubscriptionBloc
method _onErrorEvent (line 55) | void _onErrorEvent(ErrorEvent event, emit)
method _onLoadingEvent (line 61) | void _onLoadingEvent(LoadingEvent event, emit)
method _onSuccessEvent (line 66) | void _onSuccessEvent(SuccessEvent event, emit)
method _onInitializeRequest (line 78) | void _onInitializeRequest(
method _onSubscriptionRequest (line 87) | void _onSubscriptionRequest(SubscriptionRequestEvent event,
FILE: lib/src/newsletter/event/event.dart
class NewsletterSubscriptionEvent (line 6) | class NewsletterSubscriptionEvent {
class SubscriptionRequestEvent (line 13) | class SubscriptionRequestEvent extends NewsletterSubscriptionEvent {
class InitializeRequestEvent (line 17) | class InitializeRequestEvent extends NewsletterSubscriptionEvent {
type CloseRequestEvent (line 22) | typedef CloseRequestEvent = InitializeRequestEvent;
class LoadingEvent (line 24) | class LoadingEvent extends NewsletterSubscriptionEvent {}
class SuccessEvent (line 26) | class SuccessEvent extends NewsletterSubscriptionEvent {}
class ErrorEvent (line 28) | class ErrorEvent extends NewsletterSubscriptionEvent {
FILE: lib/src/newsletter/newsletter_repository.dart
class NewsletterSubscriptionRepository (line 3) | class NewsletterSubscriptionRepository {
method data (line 17) | Map<String, dynamic> data(String email)
method initialize (line 23) | void initialize()
method subscribe (line 28) | Future<void> subscribe({
FILE: lib/src/newsletter/state/state.dart
type NewsletterSubscriptionStatus (line 3) | enum NewsletterSubscriptionStatus {
class NewsletterSubscriptionState (line 17) | final class NewsletterSubscriptionState extends Equatable {
method copyWith (line 34) | NewsletterSubscriptionState copyWith({
method getError (line 49) | String? getError(BuildContext context)
FILE: lib/src/newsletter/view/news_letter_view.dart
class NewsLetterPrompt (line 3) | class NewsLetterPrompt extends StatefulWidget {
method createState (line 7) | State<NewsLetterPrompt> createState()
class _NewsLetterPromptState (line 10) | class _NewsLetterPromptState extends State<NewsLetterPrompt>
method build (line 16) | Widget build(BuildContext context)
class NewsletterPromptView (line 48) | class NewsletterPromptView extends StatefulWidget {
method createState (line 52) | State<NewsletterPromptView> createState()
class _NewsletterPromptViewState (line 55) | class _NewsletterPromptViewState extends State<NewsletterPromptView> {
method build (line 59) | Widget build(BuildContext context)
class NewsletterTextPrompt (line 157) | class NewsletterTextPrompt extends StatelessWidget {
method build (line 163) | Widget build(BuildContext context)
function evaluateAxis (line 199) | Axis evaluateAxis(
FILE: lib/src/pages/articles/articles_page.dart
class ArticlesPage (line 4) | class ArticlesPage extends StatefulWidget {
method createState (line 10) | State<ArticlesPage> createState()
class _ArticlesPageState (line 13) | class _ArticlesPageState extends State<ArticlesPage> {
method build (line 15) | Widget build(BuildContext context)
FILE: lib/src/pages/homepage/donation/donation_page.dart
class DonationPage (line 4) | class DonationPage extends StatefulWidget {
method createState (line 10) | State<DonationPage> createState()
class _DonationPageState (line 13) | class _DonationPageState extends State<DonationPage> {
method build (line 15) | Widget build(BuildContext context)
FILE: lib/src/pages/homepage/hero_header/hero_header.dart
class HeroHeaderView (line 15) | class HeroHeaderView extends StatelessWidget {
method build (line 19) | Widget build(BuildContext context)
class MobileHeroHeader (line 37) | class MobileHeroHeader extends StatefulWidget {
method createState (line 43) | State<MobileHeroHeader> createState()
class _MobileHeroHeaderState (line 46) | class _MobileHeroHeaderState extends State<MobileHeroHeader> {
method build (line 48) | Widget build(BuildContext context)
class HeroActions (line 90) | class HeroActions extends StatefulWidget {
method createState (line 101) | State<HeroActions> createState()
class _HeroActionsState (line 104) | class _HeroActionsState extends State<HeroActions> {
method primaryAction (line 105) | void primaryAction()
method secondaryAction (line 109) | void secondaryAction()
method build (line 114) | Widget build(BuildContext context)
class DefaultHeroHeader (line 170) | class DefaultHeroHeader extends StatefulWidget {
method createState (line 176) | State<DefaultHeroHeader> createState()
class _DefaultHeroHeaderState (line 179) | class _DefaultHeroHeaderState extends State<DefaultHeroHeader> {
method build (line 181) | Widget build(BuildContext context)
class HeroImageView (line 220) | class HeroImageView extends StatelessWidget {
method build (line 229) | Widget build(BuildContext context)
class HeroTextView (line 250) | class HeroTextView extends StatelessWidget {
method build (line 265) | Widget build(BuildContext context)
class ScrollIncitation (line 334) | class ScrollIncitation extends StatefulWidget {
method createState (line 338) | State<StatefulWidget> createState()
class _ScrollIncitation (line 343) | class _ScrollIncitation extends State<ScrollIncitation>
method initState (line 348) | void initState()
method build (line 359) | Widget build(BuildContext context)
FILE: lib/src/pages/homepage/homepage.dart
class HomePage (line 27) | class HomePage extends StatefulWidget {
method createState (line 33) | State<StatefulWidget> createState()
class _HomePageState (line 38) | class _HomePageState extends State<HomePage> {
method initState (line 66) | void initState()
method seoSetup (line 85) | void seoSetup()
method build (line 132) | Widget build(BuildContext context)
FILE: lib/src/pages/homepage/welcoming/welcoming.dart
class WelcomingView (line 13) | class WelcomingView extends StatelessWidget {
method build (line 17) | Widget build(BuildContext context)
class _WelcomingContent (line 27) | class _WelcomingContent extends StatelessWidget {
method build (line 30) | Widget build(BuildContext context)
class LogoNDD (line 165) | class LogoNDD extends StatelessWidget {
method build (line 169) | Widget build(BuildContext context)
class Signature (line 189) | class Signature extends StatelessWidget {
method build (line 193) | Widget build(BuildContext context)
FILE: lib/src/pages/novena_page/novena_page.dart
class NovenaPage (line 18) | class NovenaPage extends StatefulWidget {
method createState (line 37) | State<NovenaPage> createState()
class _NovenaPageState (line 40) | class _NovenaPageState extends State<NovenaPage> {
method initState (line 42) | void initState()
method build (line 47) | Widget build(BuildContext context)
class NovenaContentView (line 102) | class NovenaContentView extends StatefulWidget {
method createState (line 112) | State<NovenaContentView> createState()
method buildNovenaDaysArticleTiles (line 150) | List<Widget> buildNovenaDaysArticleTiles(
class _NovenaContentViewState (line 190) | class _NovenaContentViewState extends State<NovenaContentView> {
method initState (line 196) | void initState()
method dispose (line 212) | void dispose()
method build (line 220) | Widget build(BuildContext context)
FILE: lib/src/pages/prayers/prayers_page.dart
class PrayersPage (line 14) | class PrayersPage extends StatefulWidget {
method createState (line 20) | State<PrayersPage> createState()
class _PrayersPageState (line 23) | class _PrayersPageState extends State<PrayersPage> {
method build (line 25) | Widget build(BuildContext context)
FILE: lib/src/pages/projects/project_page_view.dart
class ProjectPageView (line 26) | class ProjectPageView extends StatelessWidget {
method build (line 41) | Widget build(BuildContext context)
class _ProjectPageContentView (line 98) | class _ProjectPageContentView extends StatefulWidget {
method createState (line 107) | State<_ProjectPageContentView> createState()
class _ProjectPageContentViewState (line 111) | class _ProjectPageContentViewState extends State<_ProjectPageContentView>
method initState (line 119) | void initState()
method updateNeedDisplayTitle (line 130) | void updateNeedDisplayTitle()
method build (line 141) | Widget build(BuildContext context)
class ProjectDescriptionContentView (line 305) | class ProjectDescriptionContentView extends StatelessWidget {
method buildSuggestions (line 317) | Widget buildSuggestions(BuildContext context)
method build (line 357) | Widget build(BuildContext context)
class ProjectNewsView (line 392) | class ProjectNewsView extends StatelessWidget {
method buildRelatedArticle (line 400) | List<Article> buildRelatedArticle(Article article)
method build (line 426) | Widget build(BuildContext context)
FILE: lib/src/pages/projects/projects_page.dart
class ProjectsPage (line 31) | class ProjectsPage extends StatefulWidget {
method createState (line 39) | State<ProjectsPage> createState()
class _ProjectsPageState (line 42) | class _ProjectsPageState extends State<ProjectsPage> {
method initState (line 44) | void initState()
method build (line 49) | Widget build(BuildContext context)
class AhlDivider (line 102) | class AhlDivider extends StatelessWidget {
method build (line 125) | Widget build(BuildContext context)
class SuggestionSection (line 147) | class SuggestionSection extends StatefulWidget {
method createState (line 160) | State<StatefulWidget> createState()
class _SuggestionSectionState (line 163) | class _SuggestionSectionState extends State<SuggestionSection>
method initState (line 170) | void initState()
method getImage (line 175) | Future<Uint8List?> getImage()
method build (line 185) | Widget build(BuildContext context)
class HeroImage (line 250) | class HeroImage extends StatelessWidget {
method build (line 254) | Widget build(BuildContext context)
class Header (line 292) | class Header extends StatelessWidget {
method build (line 296) | Widget build(BuildContext context)
class InProgressProjectListView (line 353) | class InProgressProjectListView extends StatefulWidget {
method createState (line 357) | State<InProgressProjectListView> createState()
class _InProgressProjectListViewState (line 361) | class _InProgressProjectListViewState extends State<InProgressProjectLis...
method initState (line 363) | void initState()
method build (line 372) | Widget build(BuildContext context)
class AllArticleView (line 381) | class AllArticleView extends StatefulWidget {
method createState (line 385) | State<AllArticleView> createState()
class _AllArticleViewState (line 388) | class _AllArticleViewState extends State<AllArticleView> {
method build (line 390) | Widget build(BuildContext context)
class ProjectsView (line 452) | class ProjectsView extends StatefulWidget {
method createState (line 468) | State<ProjectsView> createState()
class ProjectsViewState (line 473) | class ProjectsViewState extends State<ProjectsView> {
method buildProjectWidget (line 476) | List<Widget> buildProjectWidget(BuildContext context)
method build (line 491) | Widget build(BuildContext context)
class ProjectCard (line 586) | class ProjectCard extends StatelessWidget {
method build (line 595) | Widget build(BuildContext context)
FILE: lib/src/pages/rosary/rosary_page.dart
class RosaryPage (line 10) | class RosaryPage extends StatefulWidget {
method createState (line 16) | State<RosaryPage> createState()
class _RosaryPageState (line 19) | class _RosaryPageState extends State<RosaryPage> {
method initState (line 23) | void initState()
method build (line 30) | Widget build(BuildContext context)
FILE: lib/src/pages/saints/saints.dart
class SaintsPage (line 3) | class SaintsPage extends StatefulWidget {
method createState (line 9) | State<SaintsPage> createState()
class _SaintsPageState (line 12) | class _SaintsPageState extends State<SaintsPage> {
method build (line 14) | Widget build(BuildContext context)
FILE: lib/src/pages/who_we_are/who_we_are.dart
class WhoWeArePage (line 12) | class WhoWeArePage extends StatefulWidget {
method createState (line 18) | State<WhoWeArePage> createState()
class _WhoWeArePageState (line 28) | class _WhoWeArePageState extends State<WhoWeArePage>
method initState (line 34) | void initState()
method dispose (line 44) | void dispose()
method incrementDragging (line 49) | void incrementDragging(DragUpdateDetails details)
method incrementScrolling (line 55) | void incrementScrolling()
method build (line 62) | Widget build(BuildContext context)
class ScrollingAnimationPage (line 96) | class ScrollingAnimationPage extends StatefulWidget {
method createState (line 107) | State<ScrollingAnimationPage> createState()
class _ScrollingAnimationPageState (line 110) | class _ScrollingAnimationPageState extends State<ScrollingAnimationPage>
method initState (line 116) | void initState()
method updateAnimation (line 129) | void updateAnimation()
method dispose (line 134) | void dispose()
method build (line 141) | Widget build(BuildContext context)
class MyAnimatedWidget (line 167) | class MyAnimatedWidget extends StatelessWidget {
method build (line 173) | Widget build(BuildContext context)
method sloganSlide (line 242) | Offset sloganSlide(AnimationController animation)
method sloganDx (line 254) | double sloganDx(AnimationController animation)
FILE: lib/src/partners/view.dart
class PartnersView (line 18) | class PartnersView extends StatefulWidget {
method createState (line 22) | State<PartnersView> createState()
class _PartnersViewState (line 25) | class _PartnersViewState extends State<PartnersView>
method computeImage (line 33) | Future<List<Uint8List>?> computeImage()
method initState (line 66) | void initState()
method build (line 75) | Widget build(BuildContext context)
FILE: lib/src/prayers_intention/bloc.dart
type PrayerRequestStatus (line 3) | enum PrayerRequestStatus {
class PrayerRequestBloc (line 12) | class PrayerRequestBloc extends Bloc<PrayerRequestEvent, PrayerRequestSt...
method _onInitializedEvent (line 32) | void _onInitializedEvent(PrayerRequestEvent event, Emitter emit)
method _onFilledFormEvent (line 42) | void _onFilledFormEvent(PrayerRequestFilledFormEvent event, Emitter emit)
method _onFilledDateEvent (line 54) | void _onFilledDateEvent(PrayerRequestFilledDateEvent event, Emitter emit)
method _onCompletedEvent (line 65) | void _onCompletedEvent(PrayerRequestCompletedEvent event, Emitter emit)
FILE: lib/src/prayers_intention/event.dart
class PrayerRequestEvent (line 4) | abstract class PrayerRequestEvent {}
class PrayerRequestInitializeEvent (line 6) | class PrayerRequestInitializeEvent implements PrayerRequestEvent {}
class PrayerRequestFilledFormEvent (line 8) | class PrayerRequestFilledFormEvent implements PrayerRequestEvent {
class PrayerRequestFilledDateEvent (line 20) | class PrayerRequestFilledDateEvent implements PrayerRequestEvent {
class PrayerRequestCompletedEvent (line 30) | class PrayerRequestCompletedEvent implements PrayerRequestEvent {
FILE: lib/src/prayers_intention/model.dart
type PrayerType (line 9) | enum PrayerType {
function getList (line 16) | List getList(BuildContext context)
function localizedToString (line 24) | String localizedToString(BuildContext context)
function localizedToStringWithArticle (line 37) | String localizedToStringWithArticle(BuildContext context)
class PrayerRequest (line 89) | class PrayerRequest {
method copyWith (line 104) | PrayerRequest copyWith({
method toString (line 119) | String toString()
method toDoc (line 129) | Map<String, dynamic> toDoc()
FILE: lib/src/prayers_intention/repository.dart
class PrayerRequestRepo (line 3) | class PrayerRequestRepo {
method write (line 8) | void write(PrayerRequest request)
method dayMonthYear (line 35) | String dayMonthYear(DateTime date)
method getPrayersWithDate (line 39) | List getPrayersWithDate(
FILE: lib/src/prayers_intention/state.dart
class PrayerRequestState (line 3) | class PrayerRequestState implements Equatable {
method copyWith (line 17) | PrayerRequestState copyWith({
method toString (line 27) | String toString()
class PrayerRequestInitialState (line 34) | class PrayerRequestInitialState extends PrayerRequestState {
class PrayerRequestCompleteState (line 39) | class PrayerRequestCompleteState extends PrayerRequestState {
class PrayerRequestFilledDateState (line 58) | class PrayerRequestFilledDateState extends PrayerRequestState {
class PrayerRequestFilledFormState (line 76) | class PrayerRequestFilledFormState extends PrayerRequestState {
FILE: lib/src/prayers_intention/view.dart
class PrayersIntentionRequestView (line 14) | class PrayersIntentionRequestView extends StatefulWidget {
method createState (line 18) | State<PrayersIntentionRequestView> createState()
class _PrayersIntentionRequestViewState (line 22) | class _PrayersIntentionRequestViewState
method initState (line 36) | void initState()
method dispose (line 93) | void dispose()
method _submitPrayer (line 103) | void _submitPrayer()
method nextView (line 113) | void nextView()
method previousView (line 122) | void previousView()
method build (line 133) | Widget build(BuildContext context)
class PrayerDateCollectionView (line 163) | class PrayerDateCollectionView extends StatefulWidget {
method createState (line 175) | State<PrayerDateCollectionView> createState()
class _PrayerDateCollectionViewState (line 179) | class _PrayerDateCollectionViewState extends State<PrayerDateCollectionV...
method _onSelectionChange (line 190) | void _onSelectionChange(Set<PrayerType> p0)
method initState (line 199) | void initState()
method build (line 210) | Widget build(BuildContext context)
class PrayerCollectView (line 449) | class PrayerCollectView extends StatefulWidget {
method createState (line 456) | State<PrayerCollectView> createState()
class _PrayerCollectViewState (line 459) | class _PrayerCollectViewState extends State<PrayerCollectView> {
method initState (line 468) | void initState()
method build (line 489) | Widget build(BuildContext context)
class ReviewPrayerView (line 680) | class ReviewPrayerView extends StatefulWidget {
method createState (line 695) | State<ReviewPrayerView> createState()
class _ReviewPrayerState (line 698) | class _ReviewPrayerState extends State<ReviewPrayerView> {
method build (line 700) | Widget build(BuildContext context)
function trySnack (line 842) | void trySnack(
FILE: lib/src/prayers_space/view.dart
class PrayerSpaceView (line 13) | class PrayerSpaceView extends StatelessWidget {
method showAvailableSoonSnackBar (line 16) | void showAvailableSoonSnackBar(BuildContext context)
method build (line 78) | Widget build(BuildContext context)
FILE: lib/src/project_space/bloc.dart
class ProjectBloc (line 10) | class ProjectBloc extends Bloc<ArticleEvent, ArticleState<Article>> {
method _onInitializeArticleBlocEvent (line 33) | void _onInitializeArticleBlocEvent(
method _onGetArticleById (line 45) | void _onGetArticleById(GetArticleByIdEvent event, Emitter emit)
method _onGetHighlightedArticle (line 75) | void _onGetHighlightedArticle(
method _onGetArticleListEvent (line 110) | void _onGetArticleListEvent(GetArticleListEvent event, Emitter emit)
FILE: lib/src/project_space/model.dart
class Project (line 6) | class Project extends Article {
function getProjectStatus (line 21) | String? getProjectStatus(BuildContext context, String projectStatus)
FILE: lib/src/project_space/view.dart
class ProjectsSpaceView (line 24) | class ProjectsSpaceView extends StatefulWidget {
method createState (line 28) | State<ProjectsSpaceView> createState()
class _ProjectsSpaceViewState (line 31) | class _ProjectsSpaceViewState extends State<ProjectsSpaceView>
method initState (line 44) | void initState()
method updateState (line 67) | void updateState(ArticleState<Article> incomingState)
method build (line 110) | Widget build(BuildContext context)
method buildCard (line 190) | Widget buildCard(BuildContext context, Uint8List imageData, Article pr...
method buildProjectCards (line 229) | List<Widget> buildProjectCards(List<Article?>? projects)
class ProjectsCarousel (line 277) | class ProjectsCarousel extends StatefulWidget {
method createState (line 285) | State<ProjectsCarousel> createState()
class _ProjectsCarouselState (line 288) | class _ProjectsCarouselState extends State<ProjectsCarousel> {
method initState (line 297) | void initState()
method updateCurrentIndex (line 308) | void updateCurrentIndex(int value)
method dispose (line 336) | void dispose()
method isHovered (line 342) | void isHovered(bool isHovered)
method build (line 349) | Widget build(BuildContext context)
class AhlCard (line 433) | class AhlCard extends StatefulWidget {
method createState (line 458) | State<AhlCard> createState()
class _AhlCardState (line 461) | class _AhlCardState extends State<AhlCard> with SingleTickerProviderStat...
method initState (line 466) | void initState()
method setHoveringTo (line 471) | void setHoveringTo(bool isHovered)
method dispose (line 483) | void dispose()
method build (line 489) | Widget build(BuildContext context)
class CustomPageIndicator (line 615) | class CustomPageIndicator extends StatefulWidget {
method createState (line 623) | _CustomPageIndicatorState createState()
class _CustomPageIndicatorState (line 626) | class _CustomPageIndicatorState extends State<CustomPageIndicator> {
method build (line 628) | Widget build(BuildContext context)
method _buildDot (line 635) | Widget _buildDot(int index)
FILE: lib/src/rosary/rosary_prompt.dart
class RosaryPrompt (line 3) | class RosaryPrompt extends StatelessWidget {
method build (line 7) | Widget build(BuildContext context)
FILE: lib/src/sample_feature/sample_item.dart
class SampleItem (line 2) | class SampleItem {
FILE: lib/src/sample_feature/sample_item_details_view.dart
class SampleItemDetailsView (line 4) | class SampleItemDetailsView extends StatelessWidget {
method build (line 10) | Widget build(BuildContext context)
FILE: lib/src/sample_feature/sample_item_list_view.dart
class SampleItemListView (line 8) | class SampleItemListView extends StatelessWidget {
method build (line 19) | Widget build(BuildContext context)
FILE: lib/src/settings/settings_controller.dart
class SettingsController (line 10) | class SettingsController with ChangeNotifier {
method loadSettings (line 32) | Future<void> loadSettings()
method updateThemeMode (line 40) | Future<void> updateThemeMode(ThemeMode? newThemeMode)
method updateLocales (line 58) | Future<void> updateLocales(List<Locale>? newLocales)
FILE: lib/src/settings/settings_service.dart
class SettingsService (line 9) | class SettingsService {
method themeMode (line 11) | Future<ThemeMode> themeMode()
method local (line 14) | Future<List<Locale>> local()
method updateThemeMode (line 17) | Future<void> updateThemeMode(ThemeMode theme)
FILE: lib/src/settings/settings_view.dart
class SettingsView (line 9) | class SettingsView extends StatelessWidget {
method build (line 17) | Widget build(BuildContext context)
FILE: lib/src/theme/theme.dart
class AhlTheme (line 5) | class AhlTheme {
method lightTheme (line 17) | ThemeData lightTheme(double constraints)
method buttonTheme (line 213) | ButtonThemeData buttonTheme(double constraints)
FILE: lib/src/utils/breakpoint_resolver.dart
function resolveForBreakPoint (line 4) | T resolveForBreakPoint<T>(
function resolveLabelTextThemeForBreakPoints (line 35) | TextStyle? resolveLabelTextThemeForBreakPoints(
function resolveBodyTextThemeForBreakPoints (line 45) | TextStyle? resolveBodyTextThemeForBreakPoints(
function resolveTitleTextThemeForBreakPoints (line 55) | TextStyle? resolveTitleTextThemeForBreakPoints(
function resolveHeadlineTextThemeForBreakPoints (line 65) | TextStyle? resolveHeadlineTextThemeForBreakPoints(
function resolveDisplayTextThemeForBreakPoints (line 75) | TextStyle? resolveDisplayTextThemeForBreakPoints(
function resolveSeparatorSize (line 85) | double resolveSeparatorSize(BuildContext context)
FILE: lib/src/utils/date_time_utils.dart
function parseReleaseDate (line 9) | DateTime parseReleaseDate(String dateString)
function localMonth (line 28) | String localMonth(int month, BuildContext context)
function localizedToString (line 59) | String localizedToString(
function localizedFromStringDate (line 64) | String localizedFromStringDate(
FILE: lib/src/utils/firebase_utils.dart
function getCollection (line 1) | String? getCollection(String path)
FILE: lib/src/utils/seo.dart
function setupSeo (line 4) | void setupSeo(BuildContext context)
FILE: lib/src/utils/storage_utils.dart
class ArticleStorageUtils (line 14) | final class ArticleStorageUtils {
method getCoverImageUrl (line 55) | Future<String?> getCoverImageUrl()
method getCoverImage (line 82) | Future<Uint8List?> getCoverImage()
method getContent (line 123) | Future<http.Response?> getContent()
function encodeResponseToString (line 147) | String encodeResponseToString(http.Response response)
function decodeStringToResponse (line 183) | http.Response decodeStringToResponse(String encodedString)
function encodeUint8ListToString (line 216) | String encodeUint8ListToString(Uint8List data)
function decodeUint8ListFromString (line 221) | Uint8List decodeUint8ListFromString(String encodedString)
FILE: lib/src/validation/email_validation.dart
function isValidEmail (line 5) | bool isValidEmail(String email)
FILE: lib/src/who_we_are/view.dart
class WhoWeAreSpace (line 19) | class WhoWeAreSpace extends StatelessWidget {
method build (line 23) | Widget build(BuildContext context)
class WhoWeAreTile (line 49) | class WhoWeAreTile extends StatefulWidget {
method createState (line 57) | State<WhoWeAreTile> createState()
class WhoWeAreTileState (line 60) | class WhoWeAreTileState extends State<WhoWeAreTile>
method getImage (line 71) | Future<Uint8List?> getImage()
method getTitle (line 79) | Future<String?> getTitle()
method build (line 109) | Widget build(BuildContext context)
FILE: lib/src/widgets/actions.dart
type Actions (line 3) | enum Actions {
class ActionsLists (line 21) | class ActionsLists {
method actionLocalized (line 30) | Map<String, String?> actionLocalized(BuildContext context)
FILE: lib/src/widgets/app_bar.dart
class AhlAppBar (line 4) | class AhlAppBar extends StatelessWidget implements PreferredSizeWidget {
method buildContentWidgets (line 32) | Widget buildContentWidgets(
method build (line 115) | Widget build(BuildContext context)
method buildActions (line 163) | List<Widget> buildActions(BuildContext context)
method resolveStyle (line 168) | TextStyle? resolveStyle(String routeName)
method resolveStyleIf (line 176) | TextStyle? resolveStyleIf(bool Function() test)
class AhlMenuButton (line 364) | class AhlMenuButton extends StatelessWidget {
method build (line 368) | Widget build(BuildContext context)
FILE: lib/src/widgets/audio_player.dart
class FirebaseAudioPlayer (line 3) | class FirebaseAudioPlayer extends StatefulWidget {
method createState (line 13) | State<FirebaseAudioPlayer> createState()
class _FirebaseAudioPlayerState (line 16) | class _FirebaseAudioPlayerState extends State<FirebaseAudioPlayer> {
method initState (line 22) | void initState()
method getAudioUrl (line 27) | Future<String> getAudioUrl()
method build (line 40) | Widget build(BuildContext context)
FILE: lib/src/widgets/drawer.dart
class AhlDrawer (line 3) | class AhlDrawer extends StatelessWidget {
method build (line 7) | Widget build(BuildContext context)
class DrawerFooter (line 97) | class DrawerFooter extends StatelessWidget {
method build (line 101) | Widget build(BuildContext context)
FILE: lib/src/widgets/footer.dart
class AhlFooter (line 3) | class AhlFooter extends StatelessWidget {
method build (line 9) | Widget build(BuildContext context)
class FooterPageButton (line 300) | class FooterPageButton extends StatelessWidget {
method build (line 318) | Widget build(BuildContext context)
class FooterProminentButton (line 350) | class FooterProminentButton extends StatelessWidget {
method build (line 362) | Widget build(BuildContext context)
class FooterLowLevelButton (line 389) | class FooterLowLevelButton extends StatelessWidget {
method build (line 401) | Widget build(BuildContext context)
class FooterIconButton (line 426) | class FooterIconButton extends StatelessWidget {
method build (line 438) | Widget build(BuildContext context)
FILE: lib/src/widgets/forms_prompt.dart
class FormsLayoutBase (line 6) | class FormsLayoutBase extends StatelessWidget {
method build (line 16) | Widget build(BuildContext context)
FILE: lib/src/widgets/loading_page.dart
class LoadingView (line 5) | class LoadingView extends StatefulWidget {
method createState (line 11) | State<LoadingView> createState()
class _LoadingViewState (line 14) | class _LoadingViewState extends State<LoadingView>
method initState (line 19) | void initState()
method dispose (line 30) | void dispose()
method animation (line 36) | void animation(AnimationStatus status)
method build (line 43) | Widget build(BuildContext context)
FILE: lib/src/widgets/logo.dart
class AhlLogo (line 3) | class AhlLogo extends StatelessWidget {
method build (line 23) | Widget build(BuildContext context)
FILE: lib/src/widgets/my_flutter_app_icons.dart
class MyFlutterIcons (line 27) | class MyFlutterIcons {
FILE: lib/src/widgets/promotion_bar.dart
class PromotionBar (line 3) | class PromotionBar extends StatefulWidget {
method createState (line 18) | State<PromotionBar> createState()
class _PromotionBarState (line 21) | class _PromotionBarState extends State<PromotionBar> {
method initState (line 27) | void initState()
method build (line 33) | Widget build(BuildContext context)
method close (line 55) | void close()
method open (line 59) | void open()
FILE: lib/src/widgets/prompt_card.dart
class PromptCard (line 3) | class PromptCard extends StatefulWidget {
method createState (line 33) | State<PromptCard> createState()
class _PromptCardState (line 36) | class _PromptCardState extends State<PromptCard>
method initState (line 46) | void initState()
method dispose (line 54) | void dispose()
method _onHoverCallBack (line 59) | void _onHoverCallBack(bool isHovered)
method animateZoomInOut (line 65) | void animateZoomInOut(bool isHovered)
method elevate (line 74) | void elevate(bool isHovered)
method build (line 86) | Widget build(BuildContext context)
FILE: lib/src/widgets/section_title.dart
class SectionTitle (line 3) | class SectionTitle extends StatelessWidget {
method build (line 22) | Widget build(BuildContext context)
FILE: lib/src/widgets/space_view.dart
class SpaceView (line 3) | class SpaceView extends StatelessWidget {
method build (line 18) | Widget build(BuildContext context)
FILE: test/articles/article_view_test.dart
function populate (line 37) | void populate()
FILE: test/articles/articles_bloc_test.dart
function main (line 10) | void main()
FILE: test/articles/articles_repository_test.dart
class MockArticlesRepository (line 30) | class MockArticlesRepository extends Mock implements ArticlesRepository {}
function main (line 32) | void main()
function populate (line 68) | void populate(
function setupRepo (line 87) | void setupRepo(FirebaseFirestore fakeFirestore,
FILE: test/articles/bare_test.dart
function main (line 4) | void main()
FILE: test/articles/collection_utils_test.dart
function main (line 4) | void main()
FILE: test/breakpoint_resolver_test.dart
function main (line 4) | void main()
FILE: test/breakpoint_utils/separator_size_test.dart
function main (line 7) | void main()
FILE: test/data_storage/firestore_test.dart
function main (line 13) | void main()
class MockArticleHelper (line 135) | class MockArticleHelper with Mock implements ArticlesRepository {}
FILE: test/newsletter/newsletterbloc_test.dart
function main (line 15) | void main()
class MockNewsletterPromptBloc (line 65) | class MockNewsletterPromptBloc extends Mock implements Bloc {}
FILE: test/newsletter/newsletterbloc_test.mocks.dart
class MockNewsletterSubscriptionRepository (line 27) | class MockNewsletterSubscriptionRepository extends _i1.Mock
method data (line 39) | Map<String, dynamic> data(String? email)
method initialize (line 49) | void initialize()
method subscribe (line 58) | _i3.Future<void> subscribe({required String? email})
FILE: test/prayer_request/bloc_test.dart
function main (line 49) | void main()
FILE: test/prayer_request/repo_test.dart
function main (line 5) | void main()
FILE: test/project_bloc/project_bloc_test.dart
function main (line 9) | void main()
FILE: test/unit_test.dart
function main (line 10) | void main()
FILE: test/widget_test.dart
function main (line 14) | void main()
FILE: web/flutter_bootstrap.js
constant MANIFEST (line 9) | const MANIFEST = "flutter-app-manifest";
constant TEMP (line 10) | const TEMP = "flutter-temp-cache";
constant CACHE_NAME (line 11) | const CACHE_NAME = "flutter-app-cache";
constant CORE (line 13) | const CORE = [
function getVersion (line 21) | async function getVersion({isOnline=false}) {
function checkCache (line 52) | async function checkCache() {
FILE: web/js/lottie.js
function createTag (line 28) | function createTag(t) {
function extendPrototype (line 31) | function extendPrototype(t, e) {
function getDescriptor (line 39) | function getDescriptor(t, e) {
function createProxyFunction (line 42) | function createProxyFunction(t) {
function t (line 47) | function t(t) {
function t (line 119) | function t(t, e) {
function createSizedArray (line 147) | function createSizedArray(t) {
function _typeof$6 (line 150) | function _typeof$6(t) {
function ProjectInterface$1 (line 180) | function ProjectInterface$1() {
function roundValues (line 247) | function roundValues(t) {
function bmRnd (line 250) | function bmRnd(t) {
function styleDiv (line 253) | function styleDiv(t) {
function BMEnterFrameEvent (line 266) | function BMEnterFrameEvent(t, e, i, r) {
function BMCompleteEvent (line 272) | function BMCompleteEvent(t, e) {
function BMCompleteLoopEvent (line 275) | function BMCompleteLoopEvent(t, e, i, r) {
function BMSegmentStartEvent (line 281) | function BMSegmentStartEvent(t, e, i) {
function BMDestroyEvent (line 284) | function BMDestroyEvent(t, e) {
function BMRenderFrameErrorEvent (line 287) | function BMRenderFrameErrorEvent(t, e) {
function BMConfigErrorEvent (line 292) | function BMConfigErrorEvent(t) {
function BMAnimationConfigErrorEvent (line 295) | function BMAnimationConfigErrorEvent(t, e) {
function HSVtoRGB (line 304) | function HSVtoRGB(t, e, i) {
function RGBtoHSV (line 332) | function RGBtoHSV(t, e, i) {
function addSaturationToRGB (line 354) | function addSaturationToRGB(t, e) {
function addBrightnessToRGB (line 362) | function addBrightnessToRGB(t, e) {
function addHueToRGB (line 370) | function addHueToRGB(t, e) {
function createNS (line 423) | function createNS(t) {
function _typeof$5 (line 426) | function _typeof$5(t) {
function n (line 460) | function n() {
function o (line 852) | function o(t, e) {
function e (line 891) | function e() {
function i (line 898) | function i() {
function r (line 905) | function r(t, e, i) {
function s (line 914) | function s(t) {
function a (line 925) | function a(t) {
function n (line 941) | function n() {
function BaseEvent (line 1040) | function BaseEvent() {}
function t (line 1068) | function t(t) {
function t (line 1098) | function t(t) {
function e (line 1102) | function e(t) {
function getRenderer (line 1130) | function getRenderer(t) {
function getRegisteredRenderer (line 1133) | function getRegisteredRenderer() {
function _typeof$4 (line 1138) | function _typeof$4(t) {
function o (line 1785) | function o(t) {
function h (line 1791) | function h(t, i) {
function l (line 1800) | function l() {
function p (line 1803) | function p() {
function f (line 1806) | function f(t, i) {
function m (line 1813) | function m(t) {
function c (line 1819) | function c(t) {
function d (line 1822) | function d() {
function s (line 1930) | function s(t, e) {
function a (line 1933) | function a(t, e) {
function n (line 1936) | function n(t) {
function o (line 1939) | function o(t, e, i) {
function h (line 1942) | function h(t, e, i) {
function l (line 1945) | function l(t) {
function bezFunction (line 2061) | function bezFunction() {
function interpolateValue (line 2280) | function interpolateValue(t, e) {
function slerp (line 2428) | function slerp(t, e, i) {
function quaternionToEuler (line 2459) | function quaternionToEuler(t, e) {
function createQuaternion (line 2469) | function createQuaternion(t) {
function getValueAtCurrentTime (line 2486) | function getValueAtCurrentTime() {
function setVValue (line 2506) | function setVValue(t) {
function processEffectsSequence (line 2518) | function processEffectsSequence() {
function addEffect (line 2536) | function addEffect(t) {
function ValueProperty (line 2539) | function ValueProperty(t, e, i, r) {
function MultiDimensionalProperty (line 2558) | function MultiDimensionalProperty(t, e, i, r) {
function KeyframedValueProperty (line 2586) | function KeyframedValueProperty(t, e, i, r) {
function KeyframedMultidimensionalProperty (line 2614) | function KeyframedMultidimensionalProperty(t, e, i, r) {
function DynamicPropertyContainer (line 2732) | function DynamicPropertyContainer() {}
function ShapePath (line 2758) | function ShapePath() {
function ShapeCollection (line 2888) | function ShapeCollection() {
function e (line 2931) | function e(t, e, i) {
function i (line 2994) | function i() {
function r (line 3007) | function r() {
function s (line 3010) | function s(t) {
function a (line 3033) | function a() {
function n (line 3054) | function n(t, e, i) {
function o (line 3073) | function o(t) {
function h (line 3076) | function h(e, s, a) {
function e (line 3109) | function e(t, e) {
function t (line 3174) | function t(t, e) {
function t (line 3291) | function t(t, e) {
function s (line 3575) | function s() {
function a (line 3596) | function a(i) {
function n (line 3602) | function n(i) {
function o (line 3608) | function o(i) {
function h (line 3614) | function h(i) {
function l (line 3620) | function l(t, e) {
function p (line 3623) | function p(t, e) {
function f (line 3626) | function f(r, s) {
function m (line 3633) | function m(t, e, i) {
function c (line 3641) | function c(t, e, i, r, s, a, n, o, h, l, p, f, m, c, d, u) {
function d (line 3662) | function d(t, e, i) {
function u (line 3670) | function u(t, e, i, r, s, a, n, o, h, l, p, f, m, c, d, u) {
function y (line 3731) | function y(t) {
function g (line 3752) | function g() {
function v (line 3777) | function v(t) {
function b (line 3784) | function b(t) {
function x (line 3789) | function x(t) {
function P (line 3793) | function P(t, e, i) {
function E (line 3812) | function E(t, e, i) {
function S (line 3820) | function S(t, e, i) {
function C (line 3828) | function C(t, e, i) {
function _ (line 3836) | function _() {
function A (line 3862) | function A(t) {
function T (line 3869) | function T(t) {
function M (line 3876) | function M(t, e, i) {
function k (line 3901) | function k(t, e, i) {
function D (line 3919) | function D(t, e) {
function F (line 3928) | function F() {
function w (line 3933) | function w(t) {
function I (line 3938) | function I() {
function _typeof$3 (line 3993) | function _typeof$3(t) {
function setLocation (line 4015) | function setLocation(t) {
function searchAnimations (line 4018) | function searchAnimations() {
function setSubframeRendering (line 4023) | function setSubframeRendering(t) {
function setPrefix (line 4026) | function setPrefix(t) {
function loadAnimation (line 4029) | function loadAnimation(t) {
function setQuality (line 4035) | function setQuality(t) {
function inBrowser (line 4051) | function inBrowser() {
function installPlugin (line 4054) | function installPlugin(t, e) {
function getFactory (line 4057) | function getFactory(t) {
function checkReady (line 4069) | function checkReady() {
function getQueryVariable (line 4073) | function getQueryVariable(t) {
function ShapeModifier (line 4139) | function ShapeModifier() {}
function TrimModifier (line 4140) | function TrimModifier() {}
function PuckerAndBloatModifier (line 4141) | function PuckerAndBloatModifier() {}
function e (line 4529) | function e(t, e, i) {
function RepeaterModifier (line 4804) | function RepeaterModifier() {}
function RoundCornersModifier (line 4805) | function RoundCornersModifier() {}
function floatEqual (line 4806) | function floatEqual(t, e) {
function floatZero (line 4809) | function floatZero(t) {
function lerp (line 4812) | function lerp(t, e, i) {
function lerpPoint (line 4815) | function lerpPoint(t, e, i) {
function quadRoots (line 4818) | function quadRoots(t, e, i) {
function polynomialCoefficients (line 4827) | function polynomialCoefficients(t, e, i, r) {
function singlePoint (line 4830) | function singlePoint(t) {
function PolynomialBezier (line 4833) | function PolynomialBezier(t, e, i, r, s) {
function extrema (line 4844) | function extrema(t, e) {
function intersectData (line 4862) | function intersectData(t, e, i) {
function splitData (line 4875) | function splitData(t) {
function boxIntersect (line 4879) | function boxIntersect(t, e) {
function intersectsImpl (line 4885) | function intersectsImpl(t, e, i, r, s, a) {
function crossProduct (line 4901) | function crossProduct(t, e) {
function lineIntersection (line 4908) | function lineIntersection(t, e, i, r) {
function polarOffset (line 4916) | function polarOffset(t, e, i) {
function pointDistance (line 4919) | function pointDistance(t, e) {
function pointEqual (line 4922) | function pointEqual(t, e) {
function ZigZagModifier (line 4925) | function ZigZagModifier() {}
function setPoint (line 4926) | function setPoint(t, e, i, r, s, a, n) {
function getPerpendicularVector (line 4941) | function getPerpendicularVector(t, e) {
function getProjectingAngle (line 4949) | function getProjectingAngle(t, e) {
function zigZagCorner (line 4955) | function zigZagCorner(t, e, i, r, s, a, n) {
function zigZagSegment (line 4979) | function zigZagSegment(t, e, i, r, s, a) {
function linearOffset (line 5004) | function linearOffset(t, e, i) {
function offsetSegment (line 5008) | function offsetSegment(t, e) {
function joinLines (line 5021) | function joinLines(t, e, i, r, s) {
function getIntersection (line 5054) | function getIntersection(t, e) {
function pruneSegmentIntersection (line 5060) | function pruneSegmentIntersection(t, e) {
function pruneIntersections (line 5075) | function pruneIntersections(t) {
function offsetSegmentSplit (line 5088) | function offsetSegmentSplit(t, e) {
function OffsetPathModifier (line 5109) | function OffsetPathModifier() {}
function getFontProperties (line 5110) | function getFontProperties(t) {
function s (line 5781) | function s(t, e) {
function a (line 5813) | function a(t, e) {
function n (line 5842) | function n(t) {
function o (line 5853) | function o(t) {
function SlotManager (line 6094) | function SlotManager(t) {
function slotFactory (line 6097) | function slotFactory(t) {
function RenderableElement (line 6100) | function RenderableElement() {}
function SliderEffect (line 6182) | function SliderEffect(t, e, i) {
function AngleEffect (line 6185) | function AngleEffect(t, e, i) {
function ColorEffect (line 6188) | function ColorEffect(t, e, i) {
function PointEffect (line 6191) | function PointEffect(t, e, i) {
function LayerIndexEffect (line 6194) | function LayerIndexEffect(t, e, i) {
function MaskIndexEffect (line 6197) | function MaskIndexEffect(t, e, i) {
function CheckboxEffect (line 6200) | function CheckboxEffect(t, e, i) {
function NoValueEffect (line 6203) | function NoValueEffect() {
function EffectsManager (line 6206) | function EffectsManager(t, e) {
function GroupEffect (line 6215) | function GroupEffect(t, e) {
function BaseElement (line 6218) | function BaseElement() {}
function FrameElement (line 6219) | function FrameElement() {}
function FootageElement (line 6220) | function FootageElement(t, e, i) {
function AudioElement (line 6227) | function AudioElement(t, e, i) {
function BaseRenderer (line 6252) | function BaseRenderer() {}
function TransformElement (line 6602) | function TransformElement() {}
function MaskElement (line 6603) | function MaskElement(t, e, i) {
function SVGEffects (line 7024) | function SVGEffects(t) {
function registerEffect$1 (line 7055) | function registerEffect$1(t, e, i) {
function SVGBaseElement (line 7058) | function SVGBaseElement() {}
function HierarchyElement (line 7059) | function HierarchyElement() {}
function RenderableDOMElement (line 7060) | function RenderableDOMElement() {}
function IImageElement (line 7061) | function IImageElement(t, e, i) {
function ProcessedElement (line 7074) | function ProcessedElement(t, e) {
function IShapeElement (line 7077) | function IShapeElement() {}
function SVGShapeData (line 7419) | function SVGShapeData(t, e, i) {
function SVGStyleData (line 7435) | function SVGStyleData(t, e) {
function DashProperty (line 7445) | function DashProperty(t, e, i, r) {
function SVGStrokeStyleData (line 7467) | function SVGStrokeStyleData(t, e, i) {
function SVGFillStyleData (line 7477) | function SVGFillStyleData(t, e, i) {
function SVGNoStyleData (line 7484) | function SVGNoStyleData(t, e, i) {
function GradientProperty (line 7489) | function GradientProperty(t, e, i) {
function SVGGradientFillStyleData (line 7502) | function SVGGradientFillStyleData(t, e, i) {
function SVGGradientStrokeStyleData (line 7507) | function SVGGradientStrokeStyleData(t, e, i) {
function ShapeGroupData (line 7515) | function ShapeGroupData() {
function SVGTransformData (line 7518) | function SVGTransformData(t, e, i) {
function i (line 7721) | function i(t, e, i) {
function r (line 7730) | function r() {}
function s (line 7731) | function s(i, r, s) {
function a (line 7773) | function a(t, e, i) {
function n (line 7788) | function n(t, e, i) {
function o (line 7791) | function o(t, e, i) {
function h (line 7874) | function h(t, e, i) {
function SVGShapeElement (line 7925) | function SVGShapeElement(t, e, i) {
function LetterProps (line 7936) | function LetterProps(t, e, i, r, s, a) {
function TextProperty (line 7945) | function TextProperty(t, e) {
function r (line 8586) | function r(t, e) {
function TextAnimatorDataProperty (line 8710) | function TextAnimatorDataProperty(t, e, i) {
function TextAnimatorProperty (line 8735) | function TextAnimatorProperty(t, e, i) {
function ITextElement (line 8749) | function ITextElement() {}
function SVGTextLottieElement (line 9323) | function SVGTextLottieElement(t, e, i) {
function ISolidElement (line 9328) | function ISolidElement(t, e, i) {
function NullElement (line 9331) | function NullElement(t, e, i) {
function SVGRendererBase (line 9338) | function SVGRendererBase() {}
function ICompElement (line 9339) | function ICompElement() {}
function SVGCompElement (line 9340) | function SVGCompElement(t, e, i) {
function SVGRenderer (line 9353) | function SVGRenderer(t, e) {
function ShapeTransformManager (line 9414) | function ShapeTransformManager() {
function s (line 9994) | function s() {
function createCanvas (line 10031) | function createCanvas(t, e) {
function CVEffects (line 10042) | function CVEffects(t) {
function registerEffect (line 10058) | function registerEffect(t, e) {
function CVMaskElement (line 10061) | function CVMaskElement(t, e) {
function CVBaseElement (line 10078) | function CVBaseElement() {}
function CVShapeData (line 10137) | function CVShapeData(t, e, i, r) {
function CVShapeElement (line 10158) | function CVShapeElement(t, e, i) {
function CVTextElement (line 10169) | function CVTextElement(t, e, i) {
function CVImageElement (line 10188) | function CVImageElement(t, e, i) {
function CVSolidElement (line 10193) | function CVSolidElement(t, e, i) {
function CanvasRendererBase (line 10196) | function CanvasRendererBase() {}
function CanvasContext (line 10197) | function CanvasContext() {
function CVContextData (line 10208) | function CVContextData() {
function CVCompElement (line 10232) | function CVCompElement(t, e, i) {
function CanvasRenderer (line 10242) | function CanvasRenderer(t, e) {
function HBaseElement (line 10297) | function HBaseElement() {}
function HSolidElement (line 10298) | function HSolidElement(t, e, i) {
function HShapeElement (line 10301) | function HShapeElement(t, e, i) {
function HTextElement (line 10314) | function HTextElement(t, e, i) {
function HCameraElement (line 10322) | function HCameraElement(t, e, i) {
function HImageElement (line 10350) | function HImageElement(t, e, i) {
function HybridRendererBase (line 10353) | function HybridRendererBase(t, e) {
function HCompElement (line 10382) | function HCompElement(t, e, i) {
function HybridRenderer (line 10395) | function HybridRenderer(t, e) {
function e (line 12765) | function e(e) {
function _typeof$2 (line 12786) | function _typeof$2(t) {
function seedRandom (line 12804) | function seedRandom(t, e) {
function initialize$2 (line 12908) | function initialize$2(t) {
function _typeof$1 (line 12912) | function _typeof$1(t) {
function resetFrame (line 12939) | function resetFrame() {
function $bm_isInstanceOfArray (line 12942) | function $bm_isInstanceOfArray(t) {
function isNumerable (line 12945) | function isNumerable(t, e) {
function $bm_neg (line 12953) | function $bm_neg(t) {
function sum (line 12988) | function sum(t, e) {
function sub (line 13017) | function sub(t, e) {
function mul (line 13045) | function mul(t, e) {
function div (line 13072) | function div(t, e) {
function mod (line 13099) | function mod(t, e) {
function clamp (line 13111) | function clamp(t, e, i) {
function radiansToDegrees (line 13118) | function radiansToDegrees(t) {
function degreesToRadians (line 13122) | function degreesToRadians(t) {
function length (line 13127) | function length(t, e) {
function normalize (line 13137) | function normalize(t) {
function rgbToHsl (line 13140) | function rgbToHsl(t) {
function hue2rgb (line 13166) | function hue2rgb(t, e, i) {
function hslToRgb (line 13179) | function hslToRgb(t) {
function linear (line 13196) | function linear(t, e, i, r, s) {
function random (line 13215) | function random(t, e) {
function createPath (line 13231) | function createPath(t, e, i, r) {
function initiateExpression (line 13254) | function initiateExpression(elem, data, property) {
function t (line 13629) | function t(t, e) {
function i (line 13665) | function i(t, e, i) {
function r (line 13695) | function r() {
function e (line 13742) | function e(t) {
function t (line 13839) | function t(t) {
function e (line 13846) | function e(t, e) {
function i (line 13855) | function i(t, e) {
function r (line 13859) | function r(t, e) {
function s (line 13868) | function s(t, e) {
function a (line 13872) | function a(t, e) {
function n (line 13881) | function n(t, e) {
function o (line 13890) | function o(t) {
function h (line 13905) | function h() {
function f (line 13910) | function f(t) {
function t (line 14008) | function t(i, r, s, a) {
function e (line 14053) | function e(t, e, i, r) {
function s (line 14096) | function s(t) {
function t (line 14130) | function t(t, o, c) {
function e (line 14161) | function e(e, i, r) {
function i (line 14224) | function i(t, e, i) {
function r (line 14244) | function r(t, e, i) {
function s (line 14273) | function s() {
function a (line 14278) | function a(t, e, i) {
function n (line 14319) | function n(t, e, i) {
function o (line 14347) | function o(t, e, i) {
function h (line 14416) | function h(t, e, i) {
function l (line 14435) | function l(t, e, i) {
function p (line 14480) | function p(t, e, i) {
function f (line 14507) | function f(t, e, i) {
function m (line 14524) | function m(t, e, i) {
function a (line 14549) | function a(t) {
function i (line 14571) | function i(t) {
function _typeof (line 14594) | function _typeof(t) {
function e (line 14614) | function e(t) {
function r (line 14622) | function r(t) {
function e (line 14640) | function e(t) {
function getInterface (line 14656) | function getInterface(t) {
function addPropertyDecorator (line 14718) | function addPropertyDecorator() {
function initialize$1 (line 15105) | function initialize$1() {
function addDecorator (line 15108) | function addDecorator() {
function initialize (line 15137) | function initialize() {
function SVGComposableEffect (line 15140) | function SVGComposableEffect() {}
function SVGTintFilter (line 15155) | function SVGTintFilter(t, e, i, r, s) {
function SVGFillFilter (line 15173) | function SVGFillFilter(t, e, i, r) {
function SVGStrokeEffect (line 15183) | function SVGStrokeEffect(t, e, i) {
function SVGTritoneFilter (line 15189) | function SVGTritoneFilter(t, e, i, r) {
function SVGProLevelsFilter (line 15213) | function SVGProLevelsFilter(t, e, i, r) {
function SVGDropShadowEffect (line 15284) | function SVGDropShadowEffect(t, e, i, r, s) {
function SVGMatte3Effect (line 15687) | function SVGMatte3Effect(t, e, i) {
function SVGGaussianBlurEffect (line 15697) | function SVGGaussianBlurEffect(t, e, i, r) {
function TransformEffect (line 15706) | function TransformEffect() {}
function SVGTransformEffect (line 15707) | function SVGTransformEffect(t, e) {
function CVTransformEffect (line 15710) | function CVTransformEffect(t) {
FILE: web/lottie.js
function createTag (line 1) | function createTag(t){return document.createElement(t)}
function extendPrototype (line 1) | function extendPrototype(t,e){var i,r,s=t.length;for(i=0;i<s;i+=1)for(va...
function getDescriptor (line 1) | function getDescriptor(t,e){return Object.getOwnPropertyDescriptor(t,e)}
function createProxyFunction (line 1) | function createProxyFunction(t){function e(){}return e.prototype=t,e}
function t (line 1) | function t(t){this.audios=[],this.audioFactory=t,this._volume=1,this._is...
function t (line 1) | function t(t,e){var i,r=0,s=[];switch(t){case"int16":case"uint8c":i=1;br...
function createSizedArray (line 1) | function createSizedArray(t){return Array.apply(null,{length:t})}
function _typeof$6 (line 1) | function _typeof$6(t){return _typeof$6="function"==typeof Symbol&&"symbo...
function ProjectInterface$1 (line 1) | function ProjectInterface$1(){return{}}
function roundValues (line 1) | function roundValues(t){_shouldRoundValues=!!t}
function bmRnd (line 1) | function bmRnd(t){return _shouldRoundValues?Math.round(t):t}
function styleDiv (line 1) | function styleDiv(t){t.style.position="absolute",t.style.top=0,t.style.l...
function BMEnterFrameEvent (line 1) | function BMEnterFrameEvent(t,e,i,r){this.type=t,this.currentTime=e,this....
function BMCompleteEvent (line 1) | function BMCompleteEvent(t,e){this.type=t,this.direction=e<0?-1:1}
function BMCompleteLoopEvent (line 1) | function BMCompleteLoopEvent(t,e,i,r){this.type=t,this.currentLoop=i,thi...
function BMSegmentStartEvent (line 1) | function BMSegmentStartEvent(t,e,i){this.type=t,this.firstFrame=e,this.t...
function BMDestroyEvent (line 1) | function BMDestroyEvent(t,e){this.type=t,this.target=e}
function BMRenderFrameErrorEvent (line 1) | function BMRenderFrameErrorEvent(t,e){this.type="renderFrameError",this....
function BMConfigErrorEvent (line 1) | function BMConfigErrorEvent(t){this.type="configError",this.nativeError=t}
function BMAnimationConfigErrorEvent (line 1) | function BMAnimationConfigErrorEvent(t,e){this.type=t,this.nativeError=e}
function HSVtoRGB (line 1) | function HSVtoRGB(t,e,i){var r,s,a,n,o,h,l,p;switch(h=i*(1-e),l=i*(1-(o=...
function RGBtoHSV (line 1) | function RGBtoHSV(t,e,i){var r,s=Math.max(t,e,i),a=Math.min(t,e,i),n=s-a...
function addSaturationToRGB (line 1) | function addSaturationToRGB(t,e){var i=RGBtoHSV(255*t[0],255*t[1],255*t[...
function addBrightnessToRGB (line 1) | function addBrightnessToRGB(t,e){var i=RGBtoHSV(255*t[0],255*t[1],255*t[...
function addHueToRGB (line 1) | function addHueToRGB(t,e){var i=RGBtoHSV(255*t[0],255*t[1],255*t[2]);ret...
function createNS (line 1) | function createNS(t){return document.createElementNS(svgNS,t)}
function _typeof$5 (line 1) | function _typeof$5(t){return _typeof$5="function"==typeof Symbol&&"symbo...
function n (line 1) | function n(){e||(e=function(e){if(window.Worker&&window.Blob&&getWebWork...
function o (line 1) | function o(t,e){var s="processId_"+(i+=1);return r[s]={onComplete:t,onEr...
function e (line 1) | function e(){this.loadedAssets+=1,this.loadedAssets===this.totalImages&&...
function i (line 1) | function i(){this.loadedFootagesCount+=1,this.loadedAssets===this.totalI...
function r (line 1) | function r(t,e,i){var r="";if(t.e)r=t.p;else if(e){var s=t.p;-1!==s.inde...
function s (line 1) | function s(t){var e=0,i=setInterval(function(){(t.getBBox().width||e>500...
function a (line 1) | function a(t){var e={assetData:t},i=r(t,this.assetsPath,this.path);retur...
function n (line 1) | function n(){this._imageLoaded=e.bind(this),this._footageLoaded=i.bind(t...
function BaseEvent (line 1) | function BaseEvent(){}
function t (line 1) | function t(t){for(var e,i=t.split("\r\n"),r={},s=0,a=0;a<i.length;a+=1)2...
function t (line 1) | function t(t){this.compositions.push(t)}
function e (line 1) | function e(t){for(var e=0,i=this.compositions.length;e<i;){if(this.compo...
function getRenderer (line 1) | function getRenderer(t){return renderers[t]}
function getRegisteredRenderer (line 1) | function getRegisteredRenderer(){if(renderers.canvas)return"canvas";for(...
function _typeof$4 (line 1) | function _typeof$4(t){return _typeof$4="function"==typeof Symbol&&"symbo...
function o (line 1) | function o(t){for(var i=0,s=t.target;i<r;)e[i].animation===s&&(e.splice(...
function h (line 1) | function h(t,i){if(!t)return null;for(var s=0;s<r;){if(e[s].elem===t&&nu...
function l (line 1) | function l(){s+=1,d()}
function p (line 1) | function p(){s-=1}
function f (line 1) | function f(t,i){t.addEventListener("destroy",o),t.addEventListener("_act...
function m (line 1) | function m(t){var o,h=t-i;for(o=0;o<r;o+=1)e[o].animation.advanceTime(h)...
function c (line 1) | function c(t){i=t,window.requestAnimationFrame(m)}
function d (line 1) | function d(){!n&&s&&a&&(window.requestAnimationFrame(c),a=!1)}
function s (line 1) | function s(t,e){return 1-3*e+3*t}
function a (line 1) | function a(t,e){return 3*e-6*t}
function n (line 1) | function n(t){return 3*t}
function o (line 1) | function o(t,e,i){return((s(e,i)*t+a(e,i))*t+n(e))*t}
function h (line 1) | function h(t,e,i){return 3*s(e,i)*t*t+2*a(e,i)*t+n(e)}
function l (line 1) | function l(t){this._p=t,this._mSampleValues=r?new Float32Array(11):new A...
function bezFunction (line 1) | function bezFunction(){var t=Math;function e(t,e,i,r,s,a){var n=t*r+e*s+...
function interpolateValue (line 1) | function interpolateValue(t,e){var i,r=this.offsetTime;"multidimensional...
function slerp (line 1) | function slerp(t,e,i){var r,s,a,n,o,h=[],l=t[0],p=t[1],f=t[2],m=t[3],c=e...
function quaternionToEuler (line 1) | function quaternionToEuler(t,e){var i=e[0],r=e[1],s=e[2],a=e[3],n=Math.a...
function createQuaternion (line 1) | function createQuaternion(t){var e=t[0]*degToRads,i=t[1]*degToRads,r=t[2...
function getValueAtCurrentTime (line 1) | function getValueAtCurrentTime(){var t=this.comp.renderedFrame-this.offs...
function setVValue (line 1) | function setVValue(t){var e;if("unidimensional"===this.propType)e=t*this...
function processEffectsSequence (line 1) | function processEffectsSequence(){if(this.elem.globalData.frameId!==this...
function addEffect (line 1) | function addEffect(t){this.effectsSequence.push(t),this.container.addDyn...
function ValueProperty (line 1) | function ValueProperty(t,e,i,r){this.propType="unidimensional",this.mult...
function MultiDimensionalProperty (line 1) | function MultiDimensionalProperty(t,e,i,r){var s;this.propType="multidim...
function KeyframedValueProperty (line 1) | function KeyframedValueProperty(t,e,i,r){this.propType="unidimensional",...
function KeyframedMultidimensionalProperty (line 1) | function KeyframedMultidimensionalProperty(t,e,i,r){var s;this.propType=...
function DynamicPropertyContainer (line 1) | function DynamicPropertyContainer(){}
function ShapePath (line 1) | function ShapePath(){this.c=!1,this._length=0,this._maxLength=8,this.v=c...
function ShapeCollection (line 1) | function ShapeCollection(){this._length=0,this._maxLength=4,this.shapes=...
function e (line 1) | function e(t,e,i){var r,s,a,n,o,h,l,p,f,m=i.lastIndex,c=this.keyframes;i...
function i (line 1) | function i(){var e=this.comp.renderedFrame-this.offsetTime,i=this.keyfra...
function r (line 1) | function r(){this.paths=this.localShapeCollection}
function s (line 1) | function s(t){(function(t,e){if(t._length!==e._length||t.c!==e.c)return!...
function a (line 1) | function a(){if(this.elem.globalData.frameId!==this.frameId)if(this.effe...
function n (line 1) | function n(t,e,i){this.propType="shape",this.comp=t.comp,this.container=...
function o (line 1) | function o(t){this.effectsSequence.push(t),this.container.addDynamicProp...
function h (line 1) | function h(e,s,a){this.propType="shape",this.comp=e.comp,this.elem=e,thi...
function e (line 1) | function e(t,e){this.v=shapePool.newElement(),this.v.setPathData(!0,4),t...
function t (line 1) | function t(t,e){this.v=shapePool.newElement(),this.v.setPathData(!0,0),t...
function t (line 1) | function t(t,e){this.v=shapePool.newElement(),this.v.c=!0,this.localShap...
function s (line 1) | function s(){return this.props[0]=1,this.props[1]=0,this.props[2]=0,this...
function a (line 1) | function a(i){if(0===i)return this;var r=t(i),s=e(i);return this._t(r,-s...
function n (line 1) | function n(i){if(0===i)return this;var r=t(i),s=e(i);return this._t(1,0,...
function o (line 1) | function o(i){if(0===i)return this;var r=t(i),s=e(i);return this._t(r,0,...
function h (line 1) | function h(i){if(0===i)return this;var r=t(i),s=e(i);return this._t(r,-s...
function l (line 1) | function l(t,e){return this._t(1,e,t,1,0,0)}
function p (line 1) | function p(t,e){return this.shear(i(t),i(e))}
function f (line 1) | function f(r,s){var a=t(s),n=e(s);return this._t(a,n,0,0,-n,a,0,0,0,0,1,...
function m (line 1) | function m(t,e,i){return i||0===i||(i=1),1===t&&1===e&&1===i?this:this._...
function c (line 1) | function c(t,e,i,r,s,a,n,o,h,l,p,f,m,c,d,u){return this.props[0]=t,this....
function d (line 1) | function d(t,e,i){return i=i||0,0!==t||0!==e||0!==i?this._t(1,0,0,0,0,1,...
function u (line 1) | function u(t,e,i,r,s,a,n,o,h,l,p,f,m,c,d,u){var y=this.props;if(1===t&&0...
function y (line 1) | function y(t){var e=t.props;return this.transform(e[0],e[1],e[2],e[3],e[...
function g (line 1) | function g(){return this._identityCalculated||(this._identity=!(1!==this...
function v (line 1) | function v(t){for(var e=0;e<16;){if(t.props[e]!==this.props[e])return!1;...
function b (line 1) | function b(t){var e;for(e=0;e<16;e+=1)t.props[e]=this.props[e];return t}
function x (line 1) | function x(t){var e;for(e=0;e<16;e+=1)this.props[e]=t[e]}
function P (line 1) | function P(t,e,i){return{x:t*this.props[0]+e*this.props[4]+i*this.props[...
function E (line 1) | function E(t,e,i){return t*this.props[0]+e*this.props[4]+i*this.props[8]...
function S (line 1) | function S(t,e,i){return t*this.props[1]+e*this.props[5]+i*this.props[9]...
function C (line 1) | function C(t,e,i){return t*this.props[2]+e*this.props[6]+i*this.props[10...
function _ (line 1) | function _(){var t=this.props[0]*this.props[5]-this.props[1]*this.props[...
function A (line 1) | function A(t){return this.getInverseMatrix().applyToPointArray(t[0],t[1]...
function T (line 1) | function T(t){var e,i=t.length,r=[];for(e=0;e<i;e+=1)r[e]=A(t[e]);return r}
function M (line 1) | function M(t,e,i){var r=createTypedArray("float32",6);if(this.isIdentity...
function k (line 1) | function k(t,e,i){return this.isIdentity()?[t,e,i]:[t*this.props[0]+e*th...
function D (line 1) | function D(t,e){if(this.isIdentity())return t+","+e;var i=this.props;ret...
function F (line 1) | function F(){for(var t=0,e=this.props,i="matrix3d(";t<16;)i+=r(1e4*e[t])...
function w (line 1) | function w(t){return t<1e-6&&t>0||t>-1e-6&&t<0?r(1e4*t)/1e4:t}
function I (line 1) | function I(){var t=this.props;return"matrix("+w(t[0])+","+w(t[1])+","+w(...
function _typeof$3 (line 1) | function _typeof$3(t){return _typeof$3="function"==typeof Symbol&&"symbo...
function setLocation (line 1) | function setLocation(t){setLocationHref(t)}
function searchAnimations (line 1) | function searchAnimations(){!0===standalone?animationManager.searchAnima...
function setSubframeRendering (line 1) | function setSubframeRendering(t){setSubframeEnabled(t)}
function setPrefix (line 1) | function setPrefix(t){setIdPrefix(t)}
function loadAnimation (line 1) | function loadAnimation(t){return!0===standalone&&(t.animationData=JSON.p...
function setQuality (line 1) | function setQuality(t){if("string"==typeof t)switch(t){case"high":setDef...
function inBrowser (line 1) | function inBrowser(){return"undefined"!=typeof navigator}
function installPlugin (line 1) | function installPlugin(t,e){"expressions"===t&&setExpressionsPlugin(e)}
function getFactory (line 1) | function getFactory(t){switch(t){case"propertyFactory":return PropertyFa...
function checkReady (line 1) | function checkReady(){"complete"===document.readyState&&(clearInterval(r...
function getQueryVariable (line 1) | function getQueryVariable(t){for(var e=queryString.split("&"),i=0;i<e.le...
function ShapeModifier (line 1) | function ShapeModifier(){}
function TrimModifier (line 1) | function TrimModifier(){}
function PuckerAndBloatModifier (line 1) | function PuckerAndBloatModifier(){}
function e (line 1) | function e(t,e,i){if(this.elem=t,this.frameId=-1,this.propType="transfor...
function RepeaterModifier (line 1) | function RepeaterModifier(){}
function RoundCornersModifier (line 1) | function RoundCornersModifier(){}
function floatEqual (line 1) | function floatEqual(t,e){return 1e5*Math.abs(t-e)<=Math.min(Math.abs(t),...
function floatZero (line 1) | function floatZero(t){return Math.abs(t)<=1e-5}
function lerp (line 1) | function lerp(t,e,i){return t*(1-i)+e*i}
function lerpPoint (line 1) | function lerpPoint(t,e,i){return[lerp(t[0],e[0],i),lerp(t[1],e[1],i)]}
function quadRoots (line 1) | function quadRoots(t,e,i){if(0===t)return[];var r=e*e-4*t*i;if(r<0)retur...
function polynomialCoefficients (line 1) | function polynomialCoefficients(t,e,i,r){return[3*e-t-3*i+r,3*t-6*e+3*i,...
function singlePoint (line 1) | function singlePoint(t){return new PolynomialBezier(t,t,t,t,!1)}
function PolynomialBezier (line 1) | function PolynomialBezier(t,e,i,r,s){s&&pointEqual(t,e)&&(e=lerpPoint(t,...
function extrema (line 1) | function extrema(t,e){var i=t.points[0][e],r=t.points[t.points.length-1]...
function intersectData (line 1) | function intersectData(t,e,i){var r=t.boundingBox();return{cx:r.cx,cy:r....
function splitData (line 1) | function splitData(t){var e=t.bez.split(.5);return[intersectData(e[0],t....
function boxIntersect (line 1) | function boxIntersect(t,e){return 2*Math.abs(t.cx-e.cx)<t.width+e.width&...
function intersectsImpl (line 1) | function intersectsImpl(t,e,i,r,s,a){if(boxIntersect(t,e))if(i>=a||t.wid...
function crossProduct (line 1) | function crossProduct(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2...
function lineIntersection (line 1) | function lineIntersection(t,e,i,r){var s=[t[0],t[1],1],a=[e[0],e[1],1],n...
function polarOffset (line 1) | function polarOffset(t,e,i){return[t[0]+Math.cos(e)*i,t[1]-Math.sin(e)*i]}
function pointDistance (line 1) | function pointDistance(t,e){return Math.hypot(t[0]-e[0],t[1]-e[1])}
function pointEqual (line 1) | function pointEqual(t,e){return floatEqual(t[0],e[0])&&floatEqual(t[1],e...
function ZigZagModifier (line 1) | function ZigZagModifier(){}
function setPoint (line 1) | function setPoint(t,e,i,r,s,a,n){var o=i-Math.PI/2,h=i+Math.PI/2,l=e[0]+...
function getPerpendicularVector (line 1) | function getPerpendicularVector(t,e){var i=[e[0]-t[0],e[1]-t[1]],r=.5*-M...
function getProjectingAngle (line 1) | function getProjectingAngle(t,e){var i=0===e?t.length()-1:e-1,r=(e+1)%t....
function zigZagCorner (line 1) | function zigZagCorner(t,e,i,r,s,a,n){var o=getProjectingAngle(e,i),h=e.v...
function zigZagSegment (line 1) | function zigZagSegment(t,e,i,r,s,a){for(var n=0;n<r;n+=1){var o=(n+1)/(r...
function linearOffset (line 1) | function linearOffset(t,e,i){var r=Math.atan2(e[0]-t[0],e[1]-t[1]);retur...
function offsetSegment (line 1) | function offsetSegment(t,e){var i,r,s,a,n,o,h;i=(h=linearOffset(t.points...
function joinLines (line 1) | function joinLines(t,e,i,r,s){var a=e.points[3],n=i.points[0];if(3===r)r...
function getIntersection (line 1) | function getIntersection(t,e){var i=t.intersections(e);return i.length&&...
function pruneSegmentIntersection (line 1) | function pruneSegmentIntersection(t,e){var i=t.slice(),r=e.slice(),s=get...
function pruneIntersections (line 1) | function pruneIntersections(t){for(var e,i=1;i<t.length;i+=1)e=pruneSegm...
function offsetSegmentSplit (line 1) | function offsetSegmentSplit(t,e){var i,r,s,a,n=t.inflectionPoints();if(0...
function OffsetPathModifier (line 1) | function OffsetPathModifier(){}
function getFontProperties (line 1) | function getFontProperties(t){for(var e=t.fStyle?t.fStyle.split(" "):[],...
function s (line 1) | function s(t,e){var i=createTag("span");i.setAttribute("aria-hidden",!0)...
function a (line 1) | function a(t,e){var i,r=document.body&&e?"svg":"canvas",s=getFontPropert...
function n (line 1) | function n(t){var e=0,i=t.charCodeAt(0);if(i>=55296&&i<=56319){var r=t.c...
function o (line 1) | function o(t){var e=n(t);return e>=127462&&e<=127487}
function SlotManager (line 1) | function SlotManager(t){this.animationData=t}
function slotFactory (line 1) | function slotFactory(t){return new SlotManager(t)}
function RenderableElement (line 1) | function RenderableElement(){}
function SliderEffect (line 1) | function SliderEffect(t,e,i){this.p=PropertyFactory.getProp(e,t.v,0,0,i)}
function AngleEffect (line 1) | function AngleEffect(t,e,i){this.p=PropertyFactory.getProp(e,t.v,0,0,i)}
function ColorEffect (line 1) | function ColorEffect(t,e,i){this.p=PropertyFactory.getProp(e,t.v,1,0,i)}
function PointEffect (line 1) | function PointEffect(t,e,i){this.p=PropertyFactory.getProp(e,t.v,1,0,i)}
function LayerIndexEffect (line 1) | function LayerIndexEffect(t,e,i){this.p=PropertyFactory.getProp(e,t.v,0,...
function MaskIndexEffect (line 1) | function MaskIndexEffect(t,e,i){this.p=PropertyFactory.getProp(e,t.v,0,0...
function CheckboxEffect (line 1) | function CheckboxEffect(t,e,i){this.p=PropertyFactory.getProp(e,t.v,0,0,i)}
function NoValueEffect (line 1) | function NoValueEffect(){this.p={}}
function EffectsManager (line 1) | function EffectsManager(t,e){var i,r=t.ef||[];this.effectElements=[];var...
function GroupEffect (line 1) | function GroupEffect(t,e){this.init(t,e)}
function BaseElement (line 1) | function BaseElement(){}
function FrameElement (line 1) | function FrameElement(){}
function FootageElement (line 1) | function FootageElement(t,e,i){this.initFrame(),this.initRenderable(),th...
function AudioElement (line 1) | function AudioElement(t,e,i){this.initFrame(),this.initRenderable(),this...
function BaseRenderer (line 1) | function BaseRenderer(){}
function TransformElement (line 1) | function TransformElement(){}
function MaskElement (line 1) | function MaskElement(t,e,i){this.data=t,this.element=e,this.globalData=i...
function SVGEffects (line 1) | function SVGEffects(t){var e,i,r="SourceGraphic",s=t.data.ef?t.data.ef.l...
function registerEffect$1 (line 1) | function registerEffect$1(t,e,i){registeredEffects$1[t]={effect:e,counts...
function SVGBaseElement (line 1) | function SVGBaseElement(){}
function HierarchyElement (line 1) | function HierarchyElement(){}
function RenderableDOMElement (line 1) | function RenderableDOMElement(){}
function IImageElement (line 1) | function IImageElement(t,e,i){this.assetData=e.getAssetData(t.refId),thi...
function ProcessedElement (line 1) | function ProcessedElement(t,e){this.elem=t,this.pos=e}
function IShapeElement (line 1) | function IShapeElement(){}
function SVGShapeData (line 1) | function SVGShapeData(t,e,i){this.caches=[],this.styles=[],this.transfor...
function SVGStyleData (line 1) | function SVGStyleData(t,e){this.data=t,this.type=t.ty,this.d="",this.lvl...
function DashProperty (line 1) | function DashProperty(t,e,i,r){var s;this.elem=t,this.frameId=-1,this.da...
function SVGStrokeStyleData (line 1) | function SVGStrokeStyleData(t,e,i){this.initDynamicPropertyContainer(t),...
function SVGFillStyleData (line 1) | function SVGFillStyleData(t,e,i){this.initDynamicPropertyContainer(t),th...
function SVGNoStyleData (line 1) | function SVGNoStyleData(t,e,i){this.initDynamicPropertyContainer(t),this...
function GradientProperty (line 1) | function GradientProperty(t,e,i){this.data=e,this.c=createTypedArray("ui...
function SVGGradientFillStyleData (line 1) | function SVGGradientFillStyleData(t,e,i){this.initDynamicPropertyContain...
function SVGGradientStrokeStyleData (line 1) | function SVGGradientStrokeStyleData(t,e,i){this.initDynamicPropertyConta...
function ShapeGroupData (line 1) | function ShapeGroupData(){this.it=[],this.prevViewData=[],this.gr=create...
function SVGTransformData (line 1) | function SVGTransformData(t,e,i){this.transform={mProps:t,op:e,container...
function i (line 1) | function i(t,e,i){(i||e.transform.op._mdf)&&e.transform.container.setAtt...
function r (line 1) | function r(){}
function s (line 1) | function s(i,r,s){var a,n,o,h,l,p,f,m,c,d,u=r.styles.length,y=r.lvl;for(...
function a (line 1) | function a(t,e,i){var r=e.style;(e.c._mdf||i)&&r.pElem.setAttribute("fil...
function n (line 1) | function n(t,e,i){o(t,e,i),h(t,e,i)}
function o (line 1) | function o(t,e,i){var r,s,a,n,o,h=e.gf,l=e.g._hasOpacity,p=e.s.v,f=e.e.v...
function h (line 1) | function h(t,e,i){var r=e.style,s=e.d;s&&(s._mdf||i)&&s.dashStr&&(r.pEle...
function SVGShapeElement (line 1) | function SVGShapeElement(t,e,i){this.shapes=[],this.shapesData=t.shapes,...
function LetterProps (line 1) | function LetterProps(t,e,i,r,s,a){this.o=t,this.sw=e,this.sc=i,this.fc=r...
function TextProperty (line 1) | function TextProperty(t,e){this._frameId=initialDefaultFrame,this.pv="",...
function r (line 1) | function r(t,e){this._currentTextLength=-1,this.k=!1,this.data=e,this.el...
function TextAnimatorDataProperty (line 1) | function TextAnimatorDataProperty(t,e,i){var r={propType:!1},s=PropertyF...
function TextAnimatorProperty (line 1) | function TextAnimatorProperty(t,e,i){this._isFirstFrame=!0,this._hasMask...
function ITextElement (line 1) | function ITextElement(){}
function SVGTextLottieElement (line 1) | function SVGTextLottieElement(t,e,i){this.textSpans=[],this.renderType="...
function ISolidElement (line 1) | function ISolidElement(t,e,i){this.initElement(t,e,i)}
function NullElement (line 1) | function NullElement(t,e,i){this.initFrame(),this.initBaseData(t,e,i),th...
function SVGRendererBase (line 1) | function SVGRendererBase(){}
function ICompElement (line 1) | function ICompElement(){}
function SVGCompElement (line 1) | function SVGCompElement(t,e,i){this.layers=t.layers,this.supports3d=!0,t...
function SVGRenderer (line 1) | function SVGRenderer(t,e){this.animationItem=t,this.layers=null,this.ren...
function ShapeTransformManager (line 1) | function ShapeTransformManager(){this.sequences={},this.sequenceList=[],...
function s (line 1) | function s(){var s,a,n;e||(s=createNS("svg"),a=createNS("filter"),n=crea...
function createCanvas (line 1) | function createCanvas(t,e){if(featureSupport.offscreenCanvas)return new ...
function CVEffects (line 1) | function CVEffects(t){var e,i,r=t.data.ef?t.data.ef.length:0;for(this.fi...
function registerEffect (line 1) | function registerEffect(t,e){registeredEffects[t]={effect:e}}
function CVMaskElement (line 1) | function CVMaskElement(t,e){var i;this.data=t,this.element=e,this.masksP...
function CVBaseElement (line 1) | function CVBaseElement(){}
function CVShapeData (line 1) | function CVShapeData(t,e,i,r){this.styledShapes=[],this.tr=[0,0,0,0,0,0]...
function CVShapeElement (line 1) | function CVShapeElement(t,e,i){this.shapes=[],this.shapesData=t.shapes,t...
function CVTextElement (line 1) | function CVTextElement(t,e,i){this.textSpans=[],this.yOffset=0,this.fill...
function CVImageElement (line 1) | function CVImageElement(t,e,i){this.assetData=e.getAssetData(t.refId),th...
function CVSolidElement (line 1) | function CVSolidElement(t,e,i){this.initElement(t,e,i)}
function CanvasRendererBase (line 1) | function CanvasRendererBase(){}
function CanvasContext (line 1) | function CanvasContext(){this.opacity=-1,this.transform=createTypedArray...
function CVContextData (line 1) | function CVContextData(){var t;this.stack=[],this.cArrPos=0,this.cTr=new...
function CVCompElement (line 1) | function CVCompElement(t,e,i){this.completeLayers=!1,this.layers=t.layer...
function CanvasRenderer (line 1) | function CanvasRenderer(t,e){this.animationItem=t,this.renderConfig={cle...
function HBaseElement (line 1) | function HBaseElement(){}
function HSolidElement (line 1) | function HSolidElement(t,e,i){this.initElement(t,e,i)}
function HShapeElement (line 1) | function HShapeElement(t,e,i){this.shapes=[],this.shapesData=t.shapes,th...
function HTextElement (line 1) | function HTextElement(t,e,i){this.textSpans=[],this.textPaths=[],this.cu...
function HCameraElement (line 1) | function HCameraElement(t,e,i){this.initFrame(),this.initBaseData(t,e,i)...
function HImageElement (line 1) | function HImageElement(t,e,i){this.assetData=e.getAssetData(t.refId),thi...
function HybridRendererBase (line 1) | function HybridRendererBase(t,e){this.animationItem=t,this.layers=null,t...
function HCompElement (line 1) | function HCompElement(t,e,i){this.layers=t.layers,this.supports3d=!t.has...
function HybridRenderer (line 1) | function HybridRenderer(t,e){this.animationItem=t,this.layers=null,this....
function e (line 1) | function e(e){for(var i=0,r=t.layers.length;i<r;){if(t.layers[i].nm===e|...
function _typeof$2 (line 1) | function _typeof$2(t){return _typeof$2="function"==typeof Symbol&&"symbo...
function seedRandom (line 1) | function seedRandom(t,e){var i,r=this,s=256,a=e.pow(s,6),n=e.pow(2,52),o...
function initialize$2 (line 1) | function initialize$2(t){seedRandom([],t)}
function _typeof$1 (line 1) | function _typeof$1(t){return _typeof$1="function"==typeof Symbol&&"symbo...
function resetFrame (line 1) | function resetFrame(){_lottieGlobal={}}
function $bm_isInstanceOfArray (line 1) | function $bm_isInstanceOfArray(t){return t.constructor===Array||t.constr...
function isNumerable (line 1) | function isNumerable(t,e){return"number"===t||e instanceof Number||"bool...
function $bm_neg (line 1) | function $bm_neg(t){var e=_typeof$1(t);if("number"===e||t instanceof Num...
function sum (line 1) | function sum(t,e){var i=_typeof$1(t),r=_typeof$1(e);if(isNumerable(i,t)&...
function sub (line 1) | function sub(t,e){var i=_typeof$1(t),r=_typeof$1(e);if(isNumerable(i,t)&...
function mul (line 1) | function mul(t,e){var i,r,s,a=_typeof$1(t),n=_typeof$1(e);if(isNumerable...
function div (line 1) | function div(t,e){var i,r,s,a=_typeof$1(t),n=_typeof$1(e);if(isNumerable...
function mod (line 1) | function mod(t,e){return"string"==typeof t&&(t=parseInt(t,10)),"string"=...
function clamp (line 1) | function clamp(t,e,i){if(e>i){var r=i;i=e,e=r}return Math.min(Math.max(t...
function radiansToDegrees (line 1) | function radiansToDegrees(t){return t/degToRads}
function degreesToRadians (line 1) | function degreesToRadians(t){return t*degToRads}
function length (line 1) | function length(t,e){if("number"==typeof t||t instanceof Number)return e...
function normalize (line 1) | function normalize(t){return div(t,length(t))}
function rgbToHsl (line 1) | function rgbToHsl(t){var e,i,r=t[0],s=t[1],a=t[2],n=Math.max(r,s,a),o=Ma...
function hue2rgb (line 1) | function hue2rgb(t,e,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i...
function hslToRgb (line 1) | function hslToRgb(t){var e,i,r,s=t[0],a=t[1],n=t[2];if(0===a)e=n,r=n,i=n...
function linear (line 1) | function linear(t,e,i,r,s){if(void 0!==r&&void 0!==s||(r=e,s=i,e=0,i=1),...
function random (line 1) | function random(t,e){if(void 0===e&&(void 0===t?(t=0,e=1):(e=t,t=void 0)...
function createPath (line 1) | function createPath(t,e,i,r){var s,a=t.length,n=shapePool.newElement();n...
function initiateExpression (line 1) | function initiateExpression(elem,data,property){function noOp(t){return ...
function t (line 1) | function t(t,e){this._mask=t,this._data=e}
function i (line 1) | function i(t,e,i){Object.defineProperty(t,"velocity",{get:function(){ret...
function r (line 1) | function r(){return t}
function e (line 1) | function e(t){switch(t){case"scale":case"Scale":case"ADBE Scale":case 6:...
function t (line 1) | function t(t){var e=new Matrix;void 0!==t?this._elem.finalTransform.mPro...
function e (line 1) | function e(t,e){var i=this.getMatrix(e);return i.props[12]=0,i.props[13]...
function i (line 1) | function i(t,e){var i=this.getMatrix(e);return this.applyPoint(i,t)}
function r (line 1) | function r(t,e){var i=this.getMatrix(e);return i.props[12]=0,i.props[13]...
function s (line 1) | function s(t,e){var i=this.getMatrix(e);return this.invertPoint(i,t)}
function a (line 1) | function a(t,e){if(this._elem.hierarchy&&this._elem.hierarchy.length){va...
function n (line 1) | function n(t,e){if(this._elem.hierarchy&&this._elem.hierarchy.length){va...
function o (line 1) | function o(t){var e=new Matrix;if(e.reset(),this._elem.finalTransform.mP...
function h (line 1) | function h(){return[1,1,1,1]}
function f (line 1) | function f(t){switch(t){case"ADBE Root Vectors Group":case"Contents":cas...
function t (line 1) | function t(i,r,s,a){function n(t){for(var e=i.ef,r=0,s=e.length;r<s;){if...
function e (line 1) | function e(t,e,i,r){var s=ExpressionPropertyInterface(t.p);return t.p.se...
function s (line 1) | function s(t){return"Shape"===t||"shape"===t||"Path"===t||"path"===t||"A...
function t (line 1) | function t(t,o,c){var d,u=[],y=t?t.length:0;for(d=0;d<y;d+=1)"gr"===t[d]...
function e (line 1) | function e(e,i,r){var s=function(t){switch(t){case"ADBE Vectors Group":c...
function i (line 1) | function i(t,e,i){function r(t){return"Color"===t||"color"===t?r.color:"...
function r (line 1) | function r(t,e,i){function r(t){return"Start Point"===t||"start point"==...
function s (line 1) | function s(){return function(){return null}}
function a (line 1) | function a(t,e,i){var r,s=propertyGroupFactory(l,i),a=propertyGroupFacto...
function n (line 1) | function n(t,e,i){function r(e){return e===t.e.ix||"End"===e||"end"===e?...
function o (line 1) | function o(t,e,i){function r(e){return t.a.ix===e||"Anchor Point"===e?r....
function h (line 1) | function h(t,e,i){function r(e){return t.p.ix===e?r.position:t.s.ix===e?...
function l (line 1) | function l(t,e,i){function r(e){return t.p.ix===e?r.position:t.r.ix===e?...
function p (line 1) | function p(t,e,i){function r(e){return t.p.ix===e?r.position:t.r.ix===e?...
function f (line 1) | function f(t,e,i){function r(e){return t.r.ix===e||"Round Corners 1"===e...
function m (line 1) | function m(t,e,i){function r(e){return t.c.ix===e||"Copies"===e?r.copies...
function a (line 1) | function a(t){if("number"==typeof t)return 0===(t=void 0===t?1:t)?r:s[t-...
function i (line 1) | function i(t){return"ADBE Text Document"===t?i.sourceText:null}
function _typeof (line 1) | function _typeof(t){return _typeof="function"==typeof Symbol&&"symbol"==...
function e (line 1) | function e(t){return"Outline"===t?e.outlineInterface():null}
function r (line 1) | function r(t){if(i[t])return e=t,"object"===_typeof(i=i[t])?r:i;var s=t....
function e (line 1) | function e(t){return"Data"===t?e.dataInterface:null}
function getInterface (line 1) | function getInterface(t){return interfaces[t]||null}
function addPropertyDecorator (line 1) | function addPropertyDecorator(){function t(t,e,i){if(!this.k||!this.keyf...
function initialize$1 (line 1) | function initialize$1(){addPropertyDecorator()}
function addDecorator (line 1) | function addDecorator(){TextProperty.prototype.getExpressionValue=functi...
function initialize (line 1) | function initialize(){addDecorator()}
function SVGComposableEffect (line 1) | function SVGComposableEffect(){}
function SVGTintFilter (line 1) | function SVGTintFilter(t,e,i,r,s){this.filterManager=e;var a=createNS("f...
function SVGFillFilter (line 1) | function SVGFillFilter(t,e,i,r){this.filterManager=e;var s=createNS("feC...
function SVGStrokeEffect (line 1) | function SVGStrokeEffect(t,e,i){this.initialized=!1,this.filterManager=e...
function SVGTritoneFilter (line 1) | function SVGTritoneFilter(t,e,i,r){this.filterManager=e;var s=createNS("...
function SVGProLevelsFilter (line 1) | function SVGProLevelsFilter(t,e,i,r){this.filterManager=e;var s=this.fil...
function SVGDropShadowEffect (line 1) | function SVGDropShadowEffect(t,e,i,r,s){var a=e.container.globalData.ren...
function SVGMatte3Effect (line 1) | function SVGMatte3Effect(t,e,i){this.initialized=!1,this.filterManager=e...
function SVGGaussianBlurEffect (line 1) | function SVGGaussianBlurEffect(t,e,i,r){t.setAttribute("x","-100%"),t.se...
function TransformEffect (line 1) | function TransformEffect(){}
function SVGTransformEffect (line 1) | function SVGTransformEffect(t,e){this.init(e)}
function CVTransformEffect (line 1) | function CVTransformEffect(t){this.init(t)}
Condensed preview — 140 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,517K chars).
[
{
"path": ".firebaserc",
"chars": 59,
"preview": "{\n \"projects\": {\n \"default\": \"aujourdhuilavenir\"\n }\n}\n"
},
{
"path": ".github/workflows/firebase-hosting-pull-request.yml",
"chars": 785,
"preview": "# This file was auto-generated by the Firebase CLI\n# https://github.com/firebase/firebase-tools\n\nname: Deploy to Firebas"
},
{
"path": ".github/workflows/flutter_dep_get.yml",
"chars": 680,
"preview": "# An action to update flutter dep\n\nname: Deploy on merge with cache clearing\n'on':\n push:\n branches:\n - main\njo"
},
{
"path": ".hintrc",
"chars": 85,
"preview": "{\n \"extends\": [\n \"development\"\n ],\n \"hints\": {\n \"meta-viewport\": \"off\"\n }\n}"
},
{
"path": ".metadata",
"chars": 964,
"preview": "# This file tracks properties of this Flutter project.\n# Used by Flutter tool to assess capabilities and perform upgrade"
},
{
"path": "README.md",
"chars": 96,
"preview": "Visit [Aujourd'hui l'avenir](https://aujourdhuilavenir.org) to see how the website looks like.\n\n"
},
{
"path": "analysis_options.yaml",
"chars": 1420,
"preview": "# This file configures the analyzer, which statically analyzes Dart code to\n# check for errors, warnings, and lints.\n#\n#"
},
{
"path": "assets/animations/loading.json",
"chars": 89469,
"preview": "{\"v\":\"4.8.0\",\"meta\":{\"g\":\"LottieFiles AE 3.5.7\",\"a\":\"\",\"k\":\"\",\"d\":\"\",\"tc\":\"\"},\"fr\":120,\"ip\":0,\"op\":1200,\"w\":3000,\"h\":300"
},
{
"path": "assets/content.md",
"chars": 4612,
"preview": "---\n__Advertisement :)__\n\n- __[pica](https://nodeca.github.io/pica/demo/)__ - high quality and fast image\n resize in br"
},
{
"path": "assets/qui_sommes_nous.md",
"chars": 3157,
"preview": "\n\n### Qui sommes nous?\n\n## Les Sœurs D"
},
{
"path": "assets/sample.md",
"chars": 4612,
"preview": "---\n__Advertisement :)__\n\n- __[pica](https://nodeca.github.io/pica/demo/)__ - high quality and fast image\n resize in br"
},
{
"path": "cors.json",
"chars": 72,
"preview": "[\n\t{\n\t\t\"origin\":[\"*\"],\n\t\t\"method\":[\"GET\"],\n\t\t\"maxAgeSeconds\": 3600\n\t}\n]\n"
},
{
"path": "dap.ps1",
"chars": 1181,
"preview": "# Simple powershell script for automating build and deploy in the [avant_premiere] channel.\n\n# flutter build web --relea"
},
{
"path": "devtools_options.yaml",
"chars": 30,
"preview": "extensions:\n - provider: true"
},
{
"path": "firebase.json",
"chars": 648,
"preview": "{\n \"hosting\": {\n \"public\": \"build/web/\",\n \"ignore\": [\n \"firebase.json\",\n \"**/.*\",\n \"**/node_module"
},
{
"path": "firestore.indexes.json",
"chars": 44,
"preview": "{\n \"indexes\": [],\n \"fieldOverrides\": []\n}\n"
},
{
"path": "firestore.rules",
"chars": 319,
"preview": "rules_version = '2';\n\nservice cloud.firestore {\n match /databases/{database}/documents {\n match /{document=**} {\n "
},
{
"path": "functions/main.py",
"chars": 404,
"preview": "# Welcome to Cloud Functions for Firebase for Python!\n# To get started, simply uncomment the below code or create your o"
},
{
"path": "functions/requirements.txt",
"chars": 25,
"preview": "firebase_functions~=0.1.0"
},
{
"path": "l10n.yaml",
"chars": 162,
"preview": "arb-dir: lib/src/localization\ntemplate-arb-file: app_fr.arb\noutput-localization-file: app_localizations.dart\nuntranslate"
},
{
"path": "lib/ahl_barrel.dart",
"chars": 218,
"preview": "library;\n\nimport 'package:ahl/src/utils/breakpoint_resolver.dart';\nimport 'package:flutter/foundation.dart';\nimport 'pac"
},
{
"path": "lib/firebase_options.dart",
"chars": 2353,
"preview": "// File generated by FlutterFire CLI.\n// ignore_for_file: lines_longer_than_80_chars, avoid_classes_with_only_static_mem"
},
{
"path": "lib/main.dart",
"chars": 1931,
"preview": "import 'package:flutter/foundation.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_web_plugins/ur"
},
{
"path": "lib/src/app.dart",
"chars": 11964,
"preview": "\nimport 'package:ahl/src/article_view/view/article_view.dart';\nimport 'package:ahl/src/pages/novena_page/novena_page.dar"
},
{
"path": "lib/src/article_view/bloc/bloc.dart",
"chars": 6410,
"preview": "import 'package:cloud_firestore/cloud_firestore.dart';\nimport 'package:firebase_article/firebase_article.dart' as fire_a"
},
{
"path": "lib/src/article_view/data/data.dart",
"chars": 53,
"preview": "// A barrel that contain every data implementation\n\n\n"
},
{
"path": "lib/src/article_view/event/event.dart",
"chars": 1438,
"preview": "final class ArticleEvent {\n const ArticleEvent({this.id});\n\n final String? id;\n}\n\nfinal class GetHighlightArticleEvent"
},
{
"path": "lib/src/article_view/state/state.dart",
"chars": 1601,
"preview": "import 'package:equatable/equatable.dart';\nimport 'package:firebase_article/firebase_article.dart';\n\nenum ArticleStatus "
},
{
"path": "lib/src/article_view/view/article_content_view.dart",
"chars": 29735,
"preview": "part of 'article_view.dart';\n\n/// Article Page\nclass ArticleContentPage extends StatefulWidget {\n /// Build [ArticleCon"
},
{
"path": "lib/src/article_view/view/article_view.dart",
"chars": 42778,
"preview": "import 'dart:developer';\nimport 'dart:convert';\nimport 'dart:developer' as developer;\n\nimport 'package:flutter/material."
},
{
"path": "lib/src/article_view/view/highlight_article_tile.dart",
"chars": 8477,
"preview": "part of 'article_view.dart';\n\nclass HighlightArticleTile extends StatefulWidget {\n const HighlightArticleTile({\n sup"
},
{
"path": "lib/src/assets/assets.dart",
"chars": 1764,
"preview": "part of '../../ahl_barrel.dart';\n\n/// This source file collect all assets in the project and provide handier\n/// way to "
},
{
"path": "lib/src/constants/constants.dart",
"chars": 2968,
"preview": "part of '../../ahl_barrel.dart';\n\n/// Maximum number of suggestions in Article Based architecture.\nconst int maxSuggesti"
},
{
"path": "lib/src/firebase_constants.dart",
"chars": 3422,
"preview": "import 'dart:async';\nimport 'dart:developer';\n\nimport 'package:ahl/firebase_options.dart';\nimport 'package:cloud_firesto"
},
{
"path": "lib/src/localization/app_en.arb",
"chars": 2098,
"preview": "{\n \"appTitle\": \"Aujourd'hui l'avenir\",\n \"@appTitle\": {\n \"description\": \"The title of the application\"\n },\n \"longA"
},
{
"path": "lib/src/localization/app_fr.arb",
"chars": 6160,
"preview": "{\n \"@@locale\": \"fr\",\n \"appTitle\": \"Aujourd'hui l'avenir\",\n \"@appTitle\": {\n \"description\": \"The title of the applic"
},
{
"path": "lib/src/localization/locale_utils.dart",
"chars": 269,
"preview": "import 'package:flutter/material.dart';\n\nimport '../app.dart';\n\nclass LocaleUtils {\n /// Switch app locale to\n static "
},
{
"path": "lib/src/newsletter/bloc/bloc.dart",
"chars": 3244,
"preview": "part of '../newsletter.dart';\n\nconst invalidEmailError = \"Invalid Email\";\n\nclass NewsletterSubscriptionBloc\n extends "
},
{
"path": "lib/src/newsletter/event/event.dart",
"chars": 944,
"preview": "part of '../newsletter.dart';\n\n/// The event carry data (here email) from the UI to the\n/// bloc. Then the bloc return t"
},
{
"path": "lib/src/newsletter/newsletter.dart",
"chars": 590,
"preview": "import 'dart:async';\nimport 'package:cloud_firestore/cloud_firestore.dart';\nimport 'package:flutter/material.dart';\n\nimp"
},
{
"path": "lib/src/newsletter/newsletter_repository.dart",
"chars": 1146,
"preview": "part of 'newsletter.dart';\n\nclass NewsletterSubscriptionRepository {\n NewsletterSubscriptionRepository({\n required F"
},
{
"path": "lib/src/newsletter/state/state.dart",
"chars": 1300,
"preview": "part of '../newsletter.dart';\n\nenum NewsletterSubscriptionStatus {\n /// When the prompt is empty\n initial,\n\n /// When"
},
{
"path": "lib/src/newsletter/view/news_letter_view.dart",
"chars": 7171,
"preview": "part of '../newsletter.dart';\n\nclass NewsLetterPrompt extends StatefulWidget {\n const NewsLetterPrompt({super.key});\n\n "
},
{
"path": "lib/src/pages/articles/articles_page.dart",
"chars": 612,
"preview": "import 'package:ahl/src/widgets/widgets.dart';\nimport 'package:flutter/material.dart';\n\nclass ArticlesPage extends State"
},
{
"path": "lib/src/pages/homepage/donation/donation_page.dart",
"chars": 609,
"preview": "import 'package:ahl/src/widgets/widgets.dart';\nimport 'package:flutter/material.dart';\n\nclass DonationPage extends State"
},
{
"path": "lib/src/pages/homepage/hero_header/hero_header.dart",
"chars": 10594,
"preview": "import 'package:ahl/src/utils/seo.dart';\nimport 'package:flutter/material.dart';\n\nimport 'package:flutter_gen/gen_l10n/a"
},
{
"path": "lib/src/pages/homepage/homepage.dart",
"chars": 9904,
"preview": "import 'dart:developer';\n\nimport 'package:flutter/foundation.dart';\nimport 'package:flutter/material.dart';\n\nimport 'pac"
},
{
"path": "lib/src/pages/homepage/welcoming/welcoming.dart",
"chars": 7228,
"preview": "import 'dart:math';\n\nimport 'package:ahl/ahl_barrel.dart';\nimport 'package:ahl/src/utils/breakpoint_resolver.dart';\nimpo"
},
{
"path": "lib/src/pages/novena_page/novena_article_extension.dart",
"chars": 0,
"preview": ""
},
{
"path": "lib/src/pages/novena_page/novena_page.dart",
"chars": 11290,
"preview": "import 'package:ahl/ahl_barrel.dart';\nimport 'package:ahl/src/article_view/bloc/bloc.dart';\nimport 'package:ahl/src/arti"
},
{
"path": "lib/src/pages/prayers/prayers_page.dart",
"chars": 2054,
"preview": "import 'package:flutter/material.dart';\n\nimport 'package:flutter_gen/gen_l10n/app_localizations.dart';\n\nimport 'package:"
},
{
"path": "lib/src/pages/projects/project_page_view.dart",
"chars": 14699,
"preview": "import 'package:ahl/ahl_barrel.dart';\n\nimport 'package:ahl/src/article_view/event/event.dart';\nimport 'package:ahl/src/t"
},
{
"path": "lib/src/pages/projects/projects_page.dart",
"chars": 19781,
"preview": "import 'dart:developer';\nimport 'dart:typed_data';\n\nimport 'package:ahl/src/article_view/event/event.dart';\nimport 'pack"
},
{
"path": "lib/src/pages/rosary/rosary_page.dart",
"chars": 3570,
"preview": "import 'package:flutter/material.dart';\n\nimport 'package:flutter_gen/gen_l10n/app_localizations.dart';\n\nimport 'package:"
},
{
"path": "lib/src/pages/saints/saints.dart",
"chars": 541,
"preview": "import 'package:flutter/material.dart';\n\nclass SaintsPage extends StatefulWidget {\n const SaintsPage({super.key});\n\n s"
},
{
"path": "lib/src/pages/who_we_are/who_we_are.dart",
"chars": 7877,
"preview": "import 'dart:developer' as developer;\nimport 'dart:math';\n\nimport 'package:ahl/ahl_barrel.dart';\nimport 'package:ahl/src"
},
{
"path": "lib/src/partners/view.dart",
"chars": 4668,
"preview": "import 'dart:developer';\n\nimport \"package:flutter/material.dart\";\n\nimport \"package:firebase_storage/firebase_storage.dar"
},
{
"path": "lib/src/prayers_intention/bloc.dart",
"chars": 1960,
"preview": "part of 'prayer_request.dart';\n\nenum PrayerRequestStatus {\n initial,\n filledDate,\n filledForm,\n\n /// When the Prayer"
},
{
"path": "lib/src/prayers_intention/event.dart",
"chars": 967,
"preview": "part of 'prayer_request.dart';\n\n\nabstract class PrayerRequestEvent {}\n\nclass PrayerRequestInitializeEvent implements Pra"
},
{
"path": "lib/src/prayers_intention/model.dart",
"chars": 3227,
"preview": "part of 'prayer_request.dart';\n\nconst option = [\n \"Messe\",\n \"Chapelet\",\n \"Vêpre\",\n];\n\nenum PrayerType {\n mass,\n ros"
},
{
"path": "lib/src/prayers_intention/prayer_request.dart",
"chars": 783,
"preview": "\nimport 'package:ahl/src/firebase_constants.dart';\nimport 'package:ahl/src/utils/breakpoint_resolver.dart';\nimport 'pack"
},
{
"path": "lib/src/prayers_intention/repository.dart",
"chars": 1147,
"preview": "part of 'prayer_request.dart';\n\nclass PrayerRequestRepo {\n PrayerRequestRepo({required this.db});\n\n FirebaseFirestore "
},
{
"path": "lib/src/prayers_intention/state.dart",
"chars": 2954,
"preview": "part of 'prayer_request.dart';\n\nclass PrayerRequestState implements Equatable {\n const PrayerRequestState({this.request"
},
{
"path": "lib/src/prayers_intention/view.dart",
"chars": 30506,
"preview": "part of 'prayer_request.dart';\n\nconst Color prayerIntentionTextColor = Colors.white;\n\n/// The route view to collect, set"
},
{
"path": "lib/src/prayers_space/view.dart",
"chars": 3288,
"preview": "import 'package:ahl/src/rosary/rosary.dart';\nimport 'package:ahl/src/utils/breakpoint_resolver.dart';\nimport 'package:fl"
},
{
"path": "lib/src/project_space/bloc.dart",
"chars": 3730,
"preview": "import 'package:firebase_article/firebase_article.dart';\nimport 'package:cloud_firestore/cloud_firestore.dart';\nimport '"
},
{
"path": "lib/src/project_space/model.dart",
"chars": 829,
"preview": "import 'package:firebase_article/firebase_article.dart';\nimport 'package:flutter/material.dart';\n\nimport 'package:flutte"
},
{
"path": "lib/src/project_space/view.dart",
"chars": 20301,
"preview": "import 'dart:developer';\nimport 'dart:typed_data';\n\nimport 'package:ahl/src/article_view/event/event.dart';\nimport 'pack"
},
{
"path": "lib/src/rosary/rosary.dart",
"chars": 284,
"preview": "import 'package:flutter/material.dart';\n\nimport 'package:flutter_gen/gen_l10n/app_localizations.dart';\n\nimport 'package:"
},
{
"path": "lib/src/rosary/rosary_prompt.dart",
"chars": 714,
"preview": "part of 'rosary.dart';\n\nclass RosaryPrompt extends StatelessWidget {\n const RosaryPrompt({super.key});\n\n @override\n W"
},
{
"path": "lib/src/sample_feature/sample_item.dart",
"chars": 127,
"preview": "/// A placeholder class that represents an entity or model.\nclass SampleItem {\n const SampleItem(this.id);\n\n final int"
},
{
"path": "lib/src/sample_feature/sample_item_details_view.dart",
"chars": 478,
"preview": "import 'package:flutter/material.dart';\n\n/// Displays detailed information about a SampleItem.\nclass SampleItemDetailsVi"
},
{
"path": "lib/src/sample_feature/sample_item_list_view.dart",
"chars": 2479,
"preview": "import 'package:flutter/material.dart';\n\nimport '../settings/settings_view.dart';\nimport 'sample_item.dart';\nimport 'sam"
},
{
"path": "lib/src/settings/settings_controller.dart",
"chars": 2576,
"preview": "import 'package:flutter/material.dart';\n\nimport 'settings_service.dart';\n\n/// A class that many Widgets can interact wit"
},
{
"path": "lib/src/settings/settings_service.dart",
"chars": 933,
"preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_gen/gen_l10n/app_localizations.dart';\n\n/// A service tha"
},
{
"path": "lib/src/settings/settings_view.dart",
"chars": 1627,
"preview": "import 'package:flutter/material.dart';\n\nimport 'settings_controller.dart';\n\n/// Displays the various settings that can "
},
{
"path": "lib/src/theme/theme.dart",
"chars": 6279,
"preview": "import 'package:flutter/material.dart';\n\nimport '../utils/breakpoint_resolver.dart';\n\nclass AhlTheme {\n AhlTheme._();\n\n"
},
{
"path": "lib/src/utils/breakpoint_resolver.dart",
"chars": 2558,
"preview": "import '../../ahl_barrel.dart';\nimport 'package:flutter/material.dart';\n\nT resolveForBreakPoint<T>(\n double screenWidth"
},
{
"path": "lib/src/utils/date_time_utils.dart",
"chars": 2480,
"preview": "import 'dart:developer';\n\nimport 'package:flutter/material.dart';\nimport 'package:flutter/widgets.dart';\n\nimport 'packag"
},
{
"path": "lib/src/utils/firebase_utils.dart",
"chars": 330,
"preview": "String? getCollection(String path) {\n List entry = path.split('/').where((element) => element != \"\").toList();\n String"
},
{
"path": "lib/src/utils/seo.dart",
"chars": 235,
"preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_seo/flutter_seo.dart';\n\nvoid setupSeo(BuildContext conte"
},
{
"path": "lib/src/utils/storage_utils.dart",
"chars": 6806,
"preview": "import 'dart:async';\nimport 'dart:convert';\nimport 'dart:developer';\nimport 'dart:typed_data';\n\nimport 'package:firebase"
},
{
"path": "lib/src/validation/email_validation.dart",
"chars": 233,
"preview": "\nfinal emailRegex = RegExp(\n r\"^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-z"
},
{
"path": "lib/src/who_we_are/view.dart",
"chars": 6865,
"preview": "import 'dart:developer';\n\nimport '../../ahl_barrel.dart';\nimport 'package:ahl/src/firebase_constants.dart';\nimport 'pack"
},
{
"path": "lib/src/widgets/actions.dart",
"chars": 5316,
"preview": "part of 'widgets.dart';\n\nenum Actions {\n aboutUs,\n home,\n news,\n ourProjects,\n prayers,\n makeDonation,\n contact,\n"
},
{
"path": "lib/src/widgets/app_bar.dart",
"chars": 11384,
"preview": "part of 'widgets.dart';\n\n/// class for the appBar\nclass AhlAppBar extends StatelessWidget implements PreferredSizeWidget"
},
{
"path": "lib/src/widgets/audio_player.dart",
"chars": 2449,
"preview": "part of 'widgets.dart';\n\nclass FirebaseAudioPlayer extends StatefulWidget {\n const FirebaseAudioPlayer({\n super.key,"
},
{
"path": "lib/src/widgets/drawer.dart",
"chars": 3868,
"preview": "part of 'widgets.dart';\n\nclass AhlDrawer extends StatelessWidget {\n const AhlDrawer({super.key});\n\n @override\n Widget"
},
{
"path": "lib/src/widgets/footer.dart",
"chars": 14983,
"preview": "part of 'widgets.dart';\n\nclass AhlFooter extends StatelessWidget {\n const AhlFooter({super.key, this.actionColor = cons"
},
{
"path": "lib/src/widgets/forms_prompt.dart",
"chars": 2927,
"preview": "part of 'widgets.dart';\n\nfinal GlobalKey<FormState> _formKey =\n GlobalKey<FormState>(debugLabel: \"prayer_request_key\""
},
{
"path": "lib/src/widgets/loading_page.dart",
"chars": 1765,
"preview": "import 'package:dotlottie_loader/dotlottie_loader.dart';\nimport 'package:flutter/material.dart';\nimport 'package:lottie/"
},
{
"path": "lib/src/widgets/logo.dart",
"chars": 2704,
"preview": "part of 'widgets.dart';\n\nclass AhlLogo extends StatelessWidget {\n const AhlLogo({\n super.key,\n this.size = const "
},
{
"path": "lib/src/widgets/my_flutter_app_icons.dart",
"chars": 1476,
"preview": "/// Flutter icons MyFlutterApp\n/// Copyright (C) 2024 by original authors @ fluttericon.com, fontello.com\n/// This font "
},
{
"path": "lib/src/widgets/prayers_request.dart",
"chars": 24,
"preview": "part of 'widgets.dart';\n"
},
{
"path": "lib/src/widgets/promotion_bar.dart",
"chars": 2105,
"preview": "part of 'widgets.dart';\n\nclass PromotionBar extends StatefulWidget {\n const PromotionBar({\n super.key,\n required "
},
{
"path": "lib/src/widgets/prompt_card.dart",
"chars": 5286,
"preview": "part of 'widgets.dart';\n\nclass PromptCard extends StatefulWidget {\n const PromptCard({\n super.key,\n this.constrai"
},
{
"path": "lib/src/widgets/section_title.dart",
"chars": 2009,
"preview": "part of \"widgets.dart\";\n\nclass SectionTitle extends StatelessWidget {\n const SectionTitle({\n super.key,\n required"
},
{
"path": "lib/src/widgets/space_view.dart",
"chars": 2119,
"preview": "part of 'widgets.dart';\n\nclass SpaceView extends StatelessWidget {\n const SpaceView({\n super.key,\n this.headerIma"
},
{
"path": "lib/src/widgets/widgets.dart",
"chars": 1237,
"preview": "import 'dart:developer';\nimport 'dart:js_interop';\n\nimport 'package:ahl/src/pages/prayers/prayers_page.dart';\nimport 'pa"
},
{
"path": "pubspec.yaml",
"chars": 4435,
"preview": "name: ahl\ndescription: A website for the community of dominican sisters at Madagascar.\n\n# Prevent accidental publishing "
},
{
"path": "secrets.md",
"chars": 0,
"preview": ""
},
{
"path": "storage.rules",
"chars": 1080,
"preview": "rules_version = '2';\n\n// Craft rules based on data in your Firestore database\n// allow write: if firestore.get(\n// /d"
},
{
"path": "test/articles/article_view_test.dart",
"chars": 1639,
"preview": "import \"package:cloud_firestore/cloud_firestore.dart\";\nimport \"package:fake_cloud_firestore/fake_cloud_firestore.dart\";\n"
},
{
"path": "test/articles/articles_bloc_test.dart",
"chars": 2228,
"preview": "import 'package:ahl/src/article_view/bloc/bloc.dart';\nimport 'package:ahl/src/article_view/event/event.dart';\nimport 'pa"
},
{
"path": "test/articles/articles_repository_test.dart",
"chars": 2839,
"preview": "// Test on ArticleRepository class\n// - Responsibility:\n// - provide article objects to the whole app\n// - getArt"
},
{
"path": "test/articles/bare_test.dart",
"chars": 527,
"preview": "import 'package:flutter_test/flutter_test.dart';\nimport 'package:flutter/material.dart';\n\nvoid main() {\n\n test(\"bare te"
},
{
"path": "test/articles/collection_utils_test.dart",
"chars": 797,
"preview": "import 'package:ahl/src/utils/firebase_utils.dart';\nimport 'package:flutter_test/flutter_test.dart';\n\nvoid main() {\n gr"
},
{
"path": "test/breakpoint_resolver_test.dart",
"chars": 976,
"preview": "import 'package:ahl/src/utils/breakpoint_resolver.dart';\nimport 'package:test/test.dart';\n\nvoid main() {\n test(\n 'Br"
},
{
"path": "test/breakpoint_utils/separator_size_test.dart",
"chars": 974,
"preview": "import \"dart:developer\";\n\nimport \"package:ahl/src/utils/breakpoint_resolver.dart\";\nimport \"package:flutter/material.dart"
},
{
"path": "test/data_storage/firestore_test.dart",
"chars": 4216,
"preview": "// Test the data storage mechanism and triggering from firestore.\nimport 'package:firebase_article/firebase_article.dart"
},
{
"path": "test/newsletter/newsletterbloc_test.dart",
"chars": 2162,
"preview": "import 'package:bloc_test/bloc_test.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:flutter_test"
},
{
"path": "test/newsletter/newsletterbloc_test.mocks.dart",
"chars": 2317,
"preview": "// Mocks generated by Mockito 5.4.4 from annotations\n// in ahl/test/newsletter/newsletterbloc_test.dart.\n// Do not manua"
},
{
"path": "test/prayer_request/bloc_test.dart",
"chars": 3988,
"preview": "import 'package:ahl/src/prayers_intention/prayer_request.dart';\nimport 'package:flutter_test/flutter_test.dart';\nimport "
},
{
"path": "test/prayer_request/repo_test.dart",
"chars": 516,
"preview": "import 'package:ahl/src/prayers_intention/prayer_request.dart';\nimport 'package:fake_cloud_firestore/fake_cloud_firestor"
},
{
"path": "test/project_bloc/project_bloc_test.dart",
"chars": 507,
"preview": "import 'package:ahl/src/article_view/state/state.dart';\nimport 'package:ahl/src/project_space/bloc.dart';\nimport 'packag"
},
{
"path": "test/project_page_view/build_relations_test.dart",
"chars": 0,
"preview": ""
},
{
"path": "test/unit_test.dart",
"chars": 1114,
"preview": "// This is an example unit test.\n//\n// A unit test tests a single function, method, or class. To learn more about\n// wri"
},
{
"path": "test/widget_test.dart",
"chars": 1026,
"preview": "// This is an example Flutter widget test.\n//\n// To perform an interaction with a widget in your test, use the WidgetTes"
},
{
"path": "untranslated_message.txt",
"chars": 1250,
"preview": "{\n \"en\": [\n \"slogan\",\n \"heroHeaderSubtitle\",\n \"articles\",\n \"read\",\n \"thanksForRegistering\",\n \"invalid"
},
{
"path": "web/flutter_bootstrap.js",
"chars": 2756,
"preview": "/// This script avoid cache conflict when the old version is present in cache\n/// but a new version is already deployed."
},
{
"path": "web/google-site-verification=zW71m6kfnZRv8zRIyqnpIJgMvlVlE0tK1aLMdqrTojg.txt",
"chars": 68,
"preview": "google-site-verification=zW71m6kfnZRv8zRIyqnpIJgMvlVlE0tK1aLMdqrTojg"
},
{
"path": "web/google91970a171ec523e2.html",
"chars": 53,
"preview": "google-site-verification: google91970a171ec523e2.html"
},
{
"path": "web/index.html",
"chars": 5175,
"preview": "<!DOCTYPE html>\n<html lang=\"fr\">\n <head>\n <script>\n (function (w, d, s, l, i) {\n w[l] = w[l] || [];\n "
},
{
"path": "web/js/lottie.js",
"chars": 555570,
"preview": "\"undefined\" != typeof navigator &&\n (function (t, e) {\n \"object\" == typeof exports && \"undefined\" != typeof module\n "
},
{
"path": "web/loader.css",
"chars": 1522,
"preview": "body{\n margin: 0;\n}\n\n#loader {\n width: 100vw;\n height: 100vh;\n /* display: block; */\n display: flex;\n flex-direc"
},
{
"path": "web/loading_rosary.json",
"chars": 45248,
"preview": "{\"v\":\"5.12.1\",\"fr\":120,\"ip\":0,\"op\":286,\"w\":720,\"h\":720,\"nm\":\"CHAPELET-LOGIN\",\"ddd\":0,\"assets\":[{\"id\":\"comp_0\",\"nm\":\"Préc"
},
{
"path": "web/lottie.js",
"chars": 305543,
"preview": "\"undefined\"!=typeof navigator&&function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"fu"
},
{
"path": "web/manifest.json",
"chars": 902,
"preview": "{\n \"name\": \"ahl\",\n \"short_name\": \"ahl\",\n \"start_url\": \".\",\n \"display\": \"standalone\",\n \"background_color\":"
},
{
"path": "web/package.json",
"chars": 56,
"preview": "{\n \"dependencies\": {\n \"lottie-web\": \"^5.12.2\"\n }\n}\n"
},
{
"path": "web/site.webmanifest",
"chars": 384,
"preview": "{\n \"name\": \"aujourdhuilavenir.org\",\n \"short_name\": \"ahl\",\n \"icons\": [\n {\n \"src\": \"/android-chrome-192x192.png"
},
{
"path": "web/sitemap.xml",
"chars": 1405,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<urlset xmlns=\"https://www.sitemaps.org/schemas/sitemap/0.9\">\n <url>\n <loc>ht"
},
{
"path": "web/style.css",
"chars": 64,
"preview": ".loader-div {\n width: 100px;\n height: 100px;\n margin: 3em;\n}\n"
}
]
// ... and 8 more files (download for full content)
About this extraction
This page contains the full source code of the JosephinCrafter/auto-yescoin GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 140 files (1.4 MB), approximately 400.6k tokens, and a symbol index with 1187 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.